diff --git a/.eslintrc b/.eslintrc index a8c8c8be..06005abb 100644 --- a/.eslintrc +++ b/.eslintrc @@ -63,7 +63,6 @@ "defaultstatus": "off", "event": "off", "external": "off", - "fetch": "off", "find": "off", "focus": "off", "frames": "off", diff --git a/TODO.md b/TODO.md index a8a90d30..b2fa194d 100644 --- a/TODO.md +++ b/TODO.md @@ -5,12 +5,9 @@ This list only reflects the items that have needed to be done since July 2020, t Note: The items listed here are not in any sort of priority order. ### To Do (Remote Side) -- Use DOM in place of jQuery -- Use fetch/require in place of $.ajax - Dependency loading (jquery, css, config file) - Stop depending on injector giving config -- Fix floating window module -- Dummyproof public servers +- Fix emote render ### To Do (Injector) - Update to new windowprefs location diff --git a/css/main.css b/css/main.css index 2beb51af..f73734bf 100644 --- a/css/main.css +++ b/css/main.css @@ -195,6 +195,7 @@ -webkit-app-region: no-drag; position: fixed; z-index: 1001; + box-sizing: border-box; } .floating-window.modal-open { diff --git a/css/main.min.css b/css/main.min.css index 05adb998..9e0e4f6b 100644 --- a/css/main.min.css +++ b/css/main.min.css @@ -1 +1 @@ -.bd-loaderv2{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+IDwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyBoZWlnaHQ9IjEwMCUiIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjAwMCAyMDAwIj4gICAgPG1ldGFkYXRhIC8+ICAgIDxkZWZzPiAgICAgICAgPGZpbHRlciBpZD0ic2hhZG93MSI+ICAgICAgICA8ZmVEcm9wU2hhZG93IGR4PSIyMCIgZHk9IjAiIHN0ZERldmlhdGlvbj0iMjAiIGZsb29kLWNvbG9yPSJyZ2JhKDAsMCwwLDAuMzUpIi8+ICAgICAgICA8L2ZpbHRlcj4gICAgICAgIDxmaWx0ZXIgaWQ9InNoYWRvdzIiPiAgICAgICAgPGZlRHJvcFNoYWRvdyBkeD0iMTUiIGR5PSIwIiBzdGREZXZpYXRpb249IjIwIiBmbG9vZC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwLjE1KSIvPiAgICAgICAgPC9maWx0ZXI+ICAgICAgICA8ZmlsdGVyIGlkPSJzaGFkb3czIj4gICAgICAgIDxmZURyb3BTaGFkb3cgZHg9IjEwIiBkeT0iMCIgc3RkRGV2aWF0aW9uPSIyMCIgZmxvb2QtY29sb3I9InJnYmEoMCwwLDAsMC4zNSkiLz4gICAgICAgIDwvZmlsdGVyPiAgICA8L2RlZnM+ICAgIDxnPiAgICAgICAgPHBhdGggc3R5bGU9ImZpbHRlcjogdXJsKCNzaGFkb3czKSIgZD0iTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaIiBmaWxsPSIjMTcxNzE3IiBvcGFjaXR5PSIxIi8+ICAgICAgICA8cGF0aCBzdHlsZT0iZmlsdGVyOiB1cmwoI3NoYWRvdzIpIiBkPSJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWiIgZmlsbD0iIzNFODJFNSIgb3BhY2l0eT0iMSIvPiAgICAgICAgPHBhdGggc3R5bGU9ImZpbHRlcjogdXJsKCNzaGFkb3cxKSIgZD0iTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWiIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMSIvPiAgICA8L2c+PC9zdmc+)}.bd-loaderv2{position:fixed;bottom:5px;right:5px;z-index:2147483647;display:block;width:20px;height:20px;background-size:100% 100%;animation:bd-loaderv2-animation 1.5s ease-in-out infinite}@keyframes bd-loaderv2-animation{0%{opacity:.05}50%{opacity:.6}to{opacity:.05}}.bd-settings-group.collapsible .bd-settings-title{display:flex;justify-content:space-between}.bd-settings-group.collapsible .bd-settings-title::after{content:"";background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FscXVlXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSItOTUwIDUzMiAxOCAxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAtOTUwIDUzMiAxOCAxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6bm9uZTt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTS05MzIsNTMydjE4aC0xOHYtMThILTkzMnoiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QxIiBwb2ludHM9Ii05MzYuNiw1MzguOCAtOTQxLDU0My4yIC05NDUuNCw1MzguOCAiLz4NCjwvc3ZnPg0K);height:20px;width:20px;display:inline-block;vertical-align:bottom;transition:transform .3s ease;transform:rotate(0)}.bd-settings-group.collapsed .bd-settings-title::after{transition:transform .3s ease;transform:rotate(90deg)}.bd-settings-container{height:auto;overflow:hidden;transition:height 300ms cubic-bezier(.47,0,.745,.715)}.bd-settings-group.collapsed .bd-settings-container{height:0}.bd-settings-group~.bd-settings-group .bd-settings-title{margin-top:30px;transition:margin-top 300ms ease}.bd-settings-group.collapsed+.bd-settings-group .bd-settings-title{margin-top:0}.bd-settings-group.collapsible .bd-settings-title{order:1;align-items:center}.bd-settings-group.collapsible .bd-settings-title::before{content:"";background-color:rgba(114,118,125,.3);height:2px;order:2;flex:1;margin:0 10px 0 15px}.bd-settings-group.collapsible .bd-settings-title::after{order:3}.bd-settings-title.bd-settings-group-title{margin-bottom:10px}.checkbox-item{display:flex}.checkbox-item .checkbox-label{margin-right:8px}#bd-connection{margin-left:10px}.bd-button{background-color:#3e82e5;color:#fff;border-radius:3px;padding:2px 6px}.bd-button:hover{background-color:#3875ce}.bd-button:active{background-color:#3268b7}.bd-footnote{color:#b9bbbe;font-size:11px}.bd-button-next,.bd-button-reconnect{margin:5px 10px 10px 0;width:100%;min-height:20px}.bd-server-card{position:relative;border-width:1px;border-style:solid;border-radius:5px;background:rgba(32,34,37,.6);border-color:#202225;margin-bottom:8px}.bd-server-header,.bd-server-footer{display:flex;color:#b9bbbe}.bd-server-header{text-transform:uppercase;letter-spacing:.5px}.bd-server-card .bd-button{margin-top:4px}.bd-button.bd-button-success{background-color:#3ac15c}.bd-button.bd-button-success:hover{background-color:#34ae53}.bd-button.bd-button-success:active{background-color:#2e9a4a}#bbd-version{font-size:12px;font-weight:600;color:#72767d;padding:2px 10px}.settings-open .bd-close{cursor:pointer;float:right}@keyframes open-window{0%{transform:scale(.9)}to{transform:none}}.floating-window{animation:open-window 200ms ease;min-width:200px;min-height:300px;box-shadow:0 2px 10px 0 rgba(0,0,0,.2);display:flex;flex-direction:column;-webkit-app-region:no-drag;position:fixed;z-index:1001}.floating-window.modal-open{z-index:999}.floating-window.resizable{overflow:auto;resize:both;padding-bottom:10px;background:#202225}.floating-window-titlebar{width:100%;display:flex;justify-content:space-between;align-items:center;background:#202225;color:#fff;border-bottom:1px solid #272822}.floating-window-content{background:#2f3129;color:#fff;flex:1}.floating-window-titlebar .title{flex:1;text-align:center;padding:2px 0}.floating-window-buttons{display:flex}.floating-window-buttons .button{cursor:pointer;padding:0 2px}.floating-window-buttons .button svg{fill:#dcddde;margin-top:1.5px}.floating-window-buttons .button:hover svg{fill:#fff}.floating-window-buttons .button:hover{background-color:#36393f}.floating-window-buttons .close-button:hover{background-color:#f04747}.floating-window-buttons .close-button:hover svg path.fill{fill:#fff}.floating-window-content #bd-editor-panel{display:flex;flex-direction:column;flex:1}.floating-window-content{display:flex;flex-direction:column}.floating-window .editor-wrapper{flex:1}.floating-window .ace_editor{height:auto;flex:1}.floating-window #bd-editor-controls{height:auto;background:#202225;border:0;box-shadow:0 1px 0 0 #2f3129 inset}.bd-addon-controls{display:flex;align-items:center;justify-content:space-between}.bd-addon-controls .bd-search{font-size:13px;margin:0;width:200px}.bd-addon-dropdowns{display:flex}.bd-select-wrapper+.bd-select-wrapper{margin-left:10px}.bd-select-wrapper{color:#f6f6f7;font-size:13px;display:flex;align-items:center}.bd-select-wrapper label{opacity:.3;margin-right:5px}.bd-select{position:relative;cursor:pointer;color:#f6f6f7;font-size:13px;display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.3);border-radius:3px;padding:5px 5px 5px 0}.bd-select.bd-select-transparent{background:0 0;border:0;padding:0}.bd-select-value{padding-left:12px}.bd-select-arrow{margin-left:10px}.bd-select .bd-select-options{position:absolute;background:#2f3136;border-radius:0 0 3px 3px;max-height:300px;min-width:calc(100% + 2px);overflow-y:auto;box-shadow:rgba(0,0,0,.3) 0 1px 5px 0;border:1px solid rgba(0,0,0,.3);border-top:0;margin-top:-1px;margin-left:-1px;z-index:2;top:100%}.bd-select-transparent .bd-select-options{border:1px solid rgba(0,0,0,.3);margin-top:3px;border-radius:3px}.bd-select .bd-select-option{padding:8px 12px;cursor:pointer;white-space:pre}.bd-select .bd-select-option:hover,.bd-select .bd-select-option.selected{background:#26272b}.bd-search-wrapper{padding:3px;border-radius:3px;outline:0;border:0;background-color:#202225;color:#fff;display:flex;align-items:center}.bd-search{padding:2px 3px;background:0 0;border:0;color:#fff;flex:1}.bd-search-wrapper>svg{margin-right:2px}.bd-setting-item .bd-select{min-width:200px}.bd-settings-group.expanded .bd-settings-container:not(.animating){overflow:visible}.bd-switch{background-color:#72767d;border-radius:14px;width:42px;height:24px;opacity:1;overflow:hidden;user-select:none;position:relative;display:block;flex:0 0 auto;transition:background .15s ease-in-out,box-shadow .15s ease-in-out,border .15s ease-in-out,opacity .15s ease-in-out;margin-left:10px;box-shadow:inset 0 1px 1px rgba(0,0,0,.15)}.bd-switch::before{content:"";display:block;position:absolute;top:0;left:0;bottom:0;right:0;z-index:0;opacity:0;background-color:#000}.bd-switch::after{content:"";display:block;position:absolute;background-color:#fff;z-index:1;width:18px;margin:3px;border-radius:9px;height:18px;left:0;transition:transform .15s ease-in-out,width .1s ease-in-out,left .1s ease-in-out;box-shadow:0 2px 4px rgba(0,0,0,.3)}.bd-switch .bd-checkbox{position:absolute;width:100%;height:100%;opacity:0;padding:0;margin:0;z-index:2;cursor:pointer}.bd-switch-checked{background-color:#3e82e5}.bd-switch-checked::after{transform:translate3d(18px,0,0)}.bd-switch-disabled{opacity:.3;cursor:not-allowed}.bd-setting-item{display:flex;flex-direction:column;margin-bottom:20px}.bd-setting-header{display:flex;justify-content:space-between;align-items:center}.bd-setting-header label{font-weight:500;cursor:pointer;overflow:hidden;word-wrap:break-word;font-size:16px;line-height:24px;color:#f6f6f7}.bd-setting-note{color:#72767d;margin-top:4px;font-size:14px;line-height:20px;font-weight:500}.bd-setting-divider{width:100%;height:1px;margin-top:20px;background-color:rgba(114,118,125,.3)}.bd-controls+.bd-addon-list{margin-top:10px}.bd-addon-button{cursor:pointer}.bd-addon-button+.bd-addon-button{margin-left:5px}#emote-container{padding:10px}.emote-container{display:inline-block;padding:2px;border-radius:5px;width:30px;height:30px;position:relative}.emote-icon{max-width:100%;max-height:100%;position:absolute;margin:auto;top:0;right:0;bottom:0;left:0;cursor:pointer}.emote.stop-animation{animation:none!important}.emote-container:hover{background:rgba(123,123,123,.37)}.emoteflip,.emotespinflip{transform:scaleX(-1)}.emotespin{animation:1s emote-spin infinite linear}.emote1spin{animation:1s emote-spin-reverse infinite linear}.emotespin2{animation:.5s emote-spin infinite linear}.emote2spin{animation:.5s emote-spin-reverse infinite linear}.emotespin3{animation:.2s emote-spin infinite linear}.emote3spin{animation:.2s emote-spin-reverse infinite linear}.emotepulse{animation:1s emote-pulse infinite linear}.emotetr{transform:translateX(-3px)}.emotebl{transform:translateY(-3px)}.emotebr{transform:translate(-3px,-3px)}.emoteshake{animation:1s emote-shake infinite linear}.emoteflap{transform:scaleY(-1)!important}.emoteshake2{animation:emote-shake2 .3s linear infinite}.emoteshake3{animation:emote-shake3 .1s linear infinite}@keyframes emote-shake2{25%{transform:translate(-1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}75%{transform:translate(1px,-1px)}}@keyframes emote-shake3{25%{transform:translate(-1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}75%{transform:translate(1px,-1px)}}@keyframes emote-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes emote-spin-reverse{0%{transform:rotate(0deg)}to{transform:rotate(-360deg)}}@keyframes emote-pulse{0%{-webkit-transform:scale(1,1)}50%{-webkit-transform:scale(1.2,1.2)}to{-webkit-transform:scale(1,1)}}@keyframes emote-shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}#removemenu{width:auto;background:#505050;position:absolute;z-index:999999;display:none;box-shadow:0 0 2px #000;padding:2px;left:25px;display:block!important;cursor:pointer;color:#fff;position:fixed}#removemenu ul a{text-decoration:none;color:#fff;padding:3px}.emotewrapper{position:relative;display:inline-flex;object-fit:contain;margin:-.1em .05em -.2em .1em;vertical-align:top}.emotewrapper.jumboable{margin-bottom:0;margin-top:.2em;vertical-align:-.3em}.emote{height:1.45em}.emote.jumboable{height:2rem}.emotewrapper:hover .fav{display:block}.fav{display:none;position:absolute;width:15px;height:15px;right:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAzFBMVEUAAABQUFBMTExLS0tNTU1MTExNTU1NTU1MTExMTExNTU1LS0tEREBEREBEREBEREBJSUhLS0tLS0tEREBNTU1NTU1NTU1EREArKyhNTU1NTU0AAABMTExKSklMTExNTU1NTU1NTU1KSkpMTExKSkhNTU1KSkpISEZNTU1LS0tAQDxOTk5KSkpLS0tNTU1MTExMTEx/f39MTExMTExLS0pLS0tMTExNTU1NTU1LS0pNTU1NTU1NTU1NTU1NTU1NTUxNTU1NTU1NTUxMTEzB8C/5AAAAOnRSTlMAI8X96oWAgYSF68QBAg0PMCb9BIuLgQUD4N0Bh0mKhZSOQ4gcrKscaW8QRE6fmJyjAshASceG7cIpqQOxTQAAALVJREFUGFddx6FOA0EYAOGZvd07Qm6vVCAAgUUgQEDfX/YZMAigqaFN7iC5tsmPqGPUN/AvUVeoEbGOCElJz08Uzeixqu4AqomVVSNngOVjTqDGZSl3UFtPGV2ot2zaq96YM9p5Ddzcf/nTTAlj+/sNtNu8OcwkIsbPBtrUfMQeEhGQmHbmGIFMwLPzu6UMIwBNgToshgq8Nr2ki+Oy7ebDHp70LRPWB6OZgfWLWei7fJonOOsPCGA9kVlssOoAAAAASUVORK5CYII=);border:0;background-size:100% 100%;background-repeat:no-repeat;background-color:#303030;border-radius:5px;top:-7px;cursor:pointer}.fav.active{background-color:#ff0}.emojiPicker-3m1S-j{box-shadow:none;border-top:none;border-radius:0 0 5px 5px}#bd-qem{border-radius:5px 5px 0 0;background:#fff;border-bottom:1px solid rgba(0,0,0,.1)!important;height:30px;display:flex;flex-direction:row;padding-right:1px!important}#bd-qem button{border-left:1px solid #efefef;background:0 0;box-shadow:#cecece 1px 0 0 0;flex-grow:1}#bd-qem button:hover{background:#ececec}#bd-qem-twitch{border-radius:5px 0 0 0;order:2}#bd-qem-emojis{border-radius:0 5px 0 0;order:3}#bd-qem-favourite{order:3}#bd-qem button.active{background-color:#e2e2e2}#bd-qem-twitch-container,#bd-qem-favourite-container{width:346px;height:329px;background-color:#fff;border-radius:0 0 5px 5px}#bd-qem-twitch-container .scroller-wrap,#bd-qem-favourite-container .scroller-wrap{height:100%}.emote-menu-inner{padding:5px 0 0 15px}.bd-qme-hidden #bd-qem-emojis{display:none}#bd-pub-li{height:20px;margin-bottom:10px;overflow:hidden}#bd-pub-button{border-radius:4px;background-color:#2f3136;color:#b9bbbe;text-align:center;font-size:12px;line-height:20px;height:20px}.bd-server-card .bd-server-tags{flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:0;line-height:24px;font-size:12px;color:#b9bbbe;font-weight:700;margin-right:10px}.bd-server-card.bd-server-card-pinned{margin-bottom:15px}.bd-server-card.bd-server-card-pinned:after{background:#3a71c1;content:"";height:3px;width:100%;display:block;margin-top:7px;position:absolute;top:100%}.bd-server-description-container{color:#b9bbbe;min-height:65px;max-height:65px;border-top:1px solid #3f4146;border-bottom:1px solid #3f4146;padding-top:5px;font-size:13px}.bd-server-header{justify-content:space-between;font-weight:600}.bd-server-card{display:flex}.bd-server-content{padding:5px 10px;flex:1}.bd-server-image{min-width:115px;min-height:115px;max-width:115px;max-height:115px}.bd-server-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:15px;max-width:330px;flex:1 1 50%}.bd-layer{-ms-flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;flex-direction:column;left:0;position:absolute;right:0;top:0}#pubslayer button{background:#7289da;color:#fff;font-size:14px;font-weight:500;line-height:16px;padding:2px 16px;border:0;border-radius:3px;transition:background-color .17s ease}#pubslayer button:hover{background-color:#677bc4}#pubslayer input{color:#f6f6f7;background-color:rgba(0,0,0,.1);border-color:rgba(0,0,0,.3);padding:10px;height:30px;border-width:1px;border-style:solid;border-radius:3px;outline:0;transition:background-color .15s ease,border .15s ease}#bd-editor-panel{display:flex;flex-direction:column}#bd-editor-controls button{margin:0 5px 0 0;background:0 0;color:#fff;height:26px;font-weight:600;border-radius:3px;display:flex;align-items:center}#bd-editor-controls button:hover{background:rgba(255,255,255,.05)}#bd-editor-controls button svg{fill:#fff}#bd-editor-controls button:last-of-type{margin-right:0}#bd-editor-controls{display:flex;align-items:center;justify-content:space-between;background:#272822;color:#fff;border:0;box-shadow:0 1px 0 0 #2f3129 inset;padding:5px}.editor-wrapper{display:flex}.ace_editor{line-height:normal;font-family:Consolas,monospace;box-sizing:border-box;height:calc(100vh - 250px);font-size:14px;width:100%}.bd-monokai .editor .ace_gutter{background:#2f3136}.bd-monokai .ace_editor{background:#292b2f}.bd-monokai #bd-editor-controls{background:#202225}.theme-light #bd-editor-controls{background:#e8e8e8;border:1px solid #fff;border-top:1px solid #adadad;box-shadow:inset 0 1px 0 0 #fff}.controls-section{display:flex;align-items:center}.controls-section .checkbox-inner{width:14px;height:14px}.controls-section .checkbox-inner .checkbox:checked+span::after{left:2px;top:-2px}.controls-section .checkbox-label{font-size:14px}#floating-editor-window{min-width:340px;min-height:280px;max-height:900px;max-width:750px}.floating-addon-window{min-width:535px;min-height:605px;max-height:90%;max-width:90%}#ace_settingsmenu_container{background:rgba(0,0,0,.7)!important}body #ace_settingsmenu{padding-top:35px}body .ace_closeButton{position:absolute;top:8px;right:12px;z-index:10000;padding:0;cursor:pointer;background:0 0;border:0}body .ace_closeButton::before{content:"✖";color:#36393f}body .ace_closeButton:active{transform:translateY(2px)}#bd-editor-controls .help-text{margin-top:8px;margin-bottom:3px;font-size:14px}#bd-editor-controls .help-text .inline{background:#2f3129;padding:.2em;margin:-.2em 0;border-radius:3px}.bd-social-logo{opacity:.6}.bd-social-link:hover .bd-social-logo{opacity:1}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper{bottom:0;left:0;position:fixed;background:inherit;right:0;padding:5px}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper span{color:#b9bbbe;font-weight:600;font-size:11px}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper a{font-size:11px}.bd-button-title{margin-left:10px}.bd-switch-item{flex-direction:column;margin-top:8px}.bd-switch-item h3{font-size:16px;font-weight:500;line-height:24px;flex:1}.theme-dark .bd-switch-item h3{color:#f6f6f7}.theme-light .bd-switch-item h3{color:#4f545c}.bd-switch-item .bd-switch-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;width:44px;height:24px;display:block;flex:0 0 auto}.bd-switch-item .bd-switch-wrapper input{position:absolute;opacity:0;cursor:pointer;width:100%;height:100%;z-index:1}.bd-switch-item .bd-switch-wrapper .bd-switch{background:#7289da;position:absolute;top:0;right:0;bottom:0;left:0;background:#72767d;border-radius:14px;transition:background .15s ease-in-out,box-shadow .15s ease-in-out,border .15s ease-in-out}.bd-switch-item .bd-switch-wrapper .bd-switch:before{content:"";display:block;width:18px;height:18px;position:absolute;top:3px;left:3px;bottom:3px;background:#f6f6f7;border-radius:10px;transition:all .15s ease;box-shadow:0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05)}.bd-switch-item .bd-switch-wrapper .bd-switch.checked{background:#7289da}.bd-switch-item .bd-switch-wrapper .bd-switch.checked:before{transform:translateX(20px)}#bd-settingspane-container .scroller-wrap{height:100%}#bd-settingspane-container .scroller-wrap .scroller{display:flex}.bd-reload{cursor:pointer;vertical-align:top;fill:#dcddde}.bd-reload:hover{fill:#fff}.bd-reload-header{margin-left:5px}.bd-reload-card{margin-right:5px}.bd-controls{display:flex}.bd-addon-list{user-select:text}.bd-addon-list .bd-addon-card{max-height:175px;margin-bottom:20px;padding:5px 8px;border:1px solid transparent;border-radius:5px;overflow:hidden}.theme-dark .bd-addon-list .bd-addon-card{background-color:rgba(32,34,37,.6);color:#f6f6f7;border-color:#202225}.theme-light .bd-addon-list .bd-addon-card{background-color:#f8f9f9;color:#4f545c;border-color:#dcddde}.bd-addon-list .bd-addon-card.settings-open{max-height:800px;overflow-y:auto}.bd-addon-list .bd-addon-header{font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:space-between;padding-bottom:5px;border-bottom:1px solid transparent;overflow:hidden}.theme-dark .bd-addon-list .bd-addon-header{color:#f6f6f7;border-bottom-color:rgba(114,118,125,.3)}.theme-light .bd-addon-list .bd-addon-header{color:#4f545c;border-bottom-color:rgba(185,187,190,.3)}.bd-addon-list .bd-description{word-break:break-word;max-height:100px;margin:5px 0;padding:5px 0;overflow-y:auto}.theme-dark .bd-addon-list .bd-description{color:#b9bbbe}.theme-light .bd-addon-list .bd-description{color:#72767d}.bd-addon-list .scroller::-webkit-scrollbar-track-piece,.bd-addon-list .scroller::-webkit-scrollbar-thumb{border-radius:0!important;border-color:transparent}.bd-addon-list .bd-footer{font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:space-between;padding-top:5px;border-top:1px solid transparent;overflow:hidden}.theme-dark .bd-addon-list .bd-footer{border-top-color:rgba(114,118,125,.3)}.theme-light .bd-addon-list .bd-footer{border-top-color:rgba(185,187,190,.3)}.bd-addon-list .bd-footer button{padding:3px 16px;transition:opacity 250ms ease}.bd-addon-list .bd-footer button:disabled{opacity:.4}.bd-addon-list .bd-footer a{color:#3e82e5}.bd-addon-list .bd-footer a:hover{text-decoration:underline}@keyframes bd-backdrop{to{opacity:.85}}@keyframes bd-modal-wrapper{to{transform:scale(1);opacity:1}}@keyframes bd-backdrop-closing{to{opacity:0}}@keyframes bd-modal-wrapper-closing{to{transform:scale(.7);opacity:0}}.bd-backdrop{animation:bd-backdrop 250ms ease;animation-fill-mode:forwards;opacity:0;background-color:#000;transform:translateZ(0)}.bd-modal-wrapper.closing .bd-backdrop{animation:bd-backdrop-closing 200ms linear;animation-fill-mode:forwards;animation-delay:50ms;opacity:.85}.bd-modal-wrapper.closing .bd-modal{animation:bd-modal-wrapper-closing 250ms cubic-bezier(.19,1,.22,1);animation-fill-mode:forwards;opacity:1;transform:scale(1)}.bd-modal-wrapper .bd-modal{animation:bd-modal-wrapper 250ms cubic-bezier(.175,.885,.32,1.275);animation-fill-mode:forwards;transform:scale(.7);transform-origin:50% 50%;display:flex;align-items:center;box-sizing:border-box;contain:content;justify-content:center;top:0;left:0;bottom:0;right:0;opacity:0;pointer-events:none;position:absolute;z-index:1000}.bd-modal-wrapper .bd-modal-inner{display:flex;contain:layout;flex-direction:column;pointer-events:auto;border:1px solid rgba(28,36,43,.6);border-radius:5px;box-shadow:0 2px 10px 0 rgba(0,0,0,.2);overflow:hidden;max-height:660px;min-height:200px;width:440px;user-select:text}.bd-modal-wrapper .bd-content-modal .bd-modal-inner{height:500px;width:700px}.bd-modal-wrapper .header{background-color:#35393e;box-shadow:0 2px 3px 0 rgba(0,0,0,.2);padding:12px 20px;z-index:1;color:#fff;font-size:16px;font-weight:700;line-height:19px}.bd-modal-wrapper .bd-modal-body{background-color:#36393f;color:#fff;flex-direction:row;overflow:hidden;display:flex;flex-direction:column;flex:1;contain:layout;position:relative}.bd-modal-wrapper .scroller{padding:10px}.bd-modal-wrapper .bd-content-modal .bd-modal-body{padding:0}.bd-modal-wrapper .scroller{overflow-y:auto}.bd-modal-wrapper .footer{display:flex;justify-content:flex-end;padding:10px 20px}.bd-modal-wrapper .footer button{min-height:32px;min-width:60px;align-items:center;display:flex;font-size:14px;font-weight:500;justify-content:center;line-height:16px;padding:2px 16px;user-select:none}.bd-modal-wrapper .tab-bar-container{align-items:center;border-bottom:0;background:rgba(0,0,0,.2);box-shadow:0 2px 3px 0 rgba(0,0,0,.1);display:flex;flex-direction:row;justify-content:space-between;margin-bottom:15px}.bd-modal-wrapper .tab-bar.TOP{margin:0;border:0;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.bd-modal-wrapper .tab-bar-container .tab-bar-item{margin:0 15px;padding:15px 0;color:#fff!important;opacity:.5;transition:opacity 200ms ease;border-bottom:2px solid transparent}.bd-modal-wrapper .tab-bar-container .tab-bar-item:hover{border-color:#fff;cursor:pointer}.bd-modal-wrapper .tab-bar-container .tab-bar-item.selected{opacity:1;border-color:#fff}.bd-modal-wrapper .tab-bar.TOP .tab-bar-item+.tab-bar-item{margin:0}.bd-modal-wrapper .table-header{display:flex;justify-content:space-between;color:#fff;font-weight:700;padding-bottom:10px;margin:3px 15px 0 15px;border-bottom:1px solid #fff;font-size:14px}.bd-modal-wrapper .table-column{width:25%}.bd-modal-wrapper .table-column.column-error{width:50%}.bd-modal-wrapper .table-column{word-wrap:break-word}.bd-modal-wrapper .errors{display:flex;flex-direction:column;padding:0;font-size:14px;padding:0 5px}.bd-modal-wrapper .error{display:flex;color:#fff;border-bottom:1px solid rgba(255,255,255,.25);padding:15px 0;align-items:center}.bd-modal-wrapper .error-link{color:#3e82e5;font-weight:500}.bd-modal-wrapper .bd-content-modal .scroller{padding-top:0}.bd-toasts{position:fixed;display:flex;top:0;flex-direction:column;align-items:center;justify-content:flex-end;pointer-events:none;z-index:4000}@keyframes bd-toast-up{0%{transform:translateY(0);opacity:0}}.bd-toast{animation:bd-toast-up 300ms ease;transform:translateY(-10px);background:#36393f;padding:10px;border-radius:5px;box-shadow:0 0 0 1px rgba(32,34,37,.6),0 2px 10px 0 rgba(0,0,0,.2);font-weight:500;color:#fff;user-select:text;font-size:14px;opacity:1;margin-top:10px;pointer-events:none;user-select:none}@keyframes bd-toast-down{to{transform:translateY(0);opacity:0}}.bd-toast.closing{animation:bd-toast-down 200ms ease;animation-fill-mode:forwards;opacity:1;transform:translateY(-10px)}.bd-toast.icon{padding-left:30px;background-size:20px 20px;background-repeat:no-repeat;background-position:6px 50%}.bd-toast.toast-info{background-color:#4a90e2}.bd-toast.toast-info.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiLz48L3N2Zz4=)}.bd-toast.toast-success{background-color:#43b581}.bd-toast.toast-success.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiLz48L3N2Zz4=)}.bd-toast.toast-danger,.bd-toast.toast-error{background-color:#f04747}.bd-toast.toast-danger.icon,.bd-toast.toast-error.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+)}.bd-toast.toast-warning,.bd-toast.toast-warn{background-color:#ffa600;color:#fff}.bd-toast.toast-warning.icon,.bd-toast.toast-warn.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPg==)}.bd-minimal .divider-32i8lo{opacity:0}.bd-minimal .large-3ChYtB{max-width:20px;max-height:20px;background-size:100%;margin-right:2px;margin-top:0;border-radius:0}.bd-minimal .content-3dzVd8{border-left:2px solid #ebebeb;padding-left:2px}.bd-minimal .theme-dark .content-3dzVd8{border-left:2px solid #303030}.bd-minimal .username-_4ZSMR{font-size:small}.bd-minimal .container-1YxwTf{padding:5px}.bd-minimal .embed-IeVjo6{padding:2px}.bd-minimal .membersWrap-2h-GB4{min-width:0}.bd-minimal .members-1998pB .small-5Os1Bb{max-width:15px;max-height:15px;background-size:15px 15px}.bd-minimal .members-1998pB .small-5Os1Bb .status-oxiHuE{height:5px;width:5px}.bd-minimal .members-1998pB .member-3W1lQa{padding:5px}.bd-minimal .members-1998pB .memberInner-2CPc3V{transform:scale(.9)}.bd-minimal .members-1998pB .membersGroup-v9BXpm{margin-top:3px;transform:scale(.9)}.bd-minimal.bd-minimal-chan .channels-Ie2l6A{display:none}.bd-minimal .channels-Ie2l6A header span{font-size:12px}.bd-minimal .channels-Ie2l6A{width:160px}.bd-minimal .containerDefault-3GGEv_{transform:scale(.9)}.bd-minimal .content-3at_AU{transform:scale(.9)}.bd-minimal .icon-1_QxNX{width:14px;height:14px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .listItem-2P_4kh{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px;margin:0 12.5px 8px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .wrapper-25eVIn a,.bd-minimal .listItem-2P_4kh .wrapper-25eVIn .icon-27yU2q{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .listItem-2P_4kh .wrapper-25eVIn{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .listItem-2P_4kh svg,.bd-minimal .listItem-2P_4kh foreignObject[mask]{mask:none}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .homeIcon-tEMBK1{width:10px;height:10px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .circleIconButton-jET_ig{height:20px;width:20px}.bd-minimal .circleIconButton-jET_ig svg{height:14px;width:14px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .friendsOnline-_wi_fM{margin-left:-15px;font-size:7px}.bd-minimal #bd-pub-li{height:16px}.bd-minimal #bd-pub-button{font-size:8px;line-height:16px;height:16px}.bd-minimal .wrapper-1Rf91z,.bd-minimal .wrapper-1Rf91z .scrollerWrap-1IAIlv,.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG{width:45px}.bd-minimal .wrapper-1Rf91z .guildSeparator-3s64Iy{margin-left:-15px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .listItem-2P_4kh .wrapper-sa6paO{height:20px;margin-top:0;margin-left:-12.5px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .iconBadge-2wi9r4{width:12px;height:12px;background-size:12px}.bd-minimal .container-2Thooq .avatarSmall-3ACRaI{width:15px;height:15px;background-size:15px 15px}.bd-minimal .container-2Thooq .avatarSmall-3ACRaI .status-oxiHuE{height:5px;width:5px}.bd-minimal .container-2Thooq .accountDetails-3k9g4n{transform:scale(.8)}.bd-minimal .container-2Thooq .button-2b6hmh{height:14px;width:14px;background-size:14px 14px;margin-left:3px}.bd-minimal .container-2Thooq .button-2b6hmh svg{height:14px;width:14px}.bd-dark #bd-qem-favourite-container,.bd-dark #bd-qem-twitch-container{background-color:#353535}.bd-dark #bd-qem{border-bottom:1px solid #464646!important;background:#353535}.bd-dark #bd-qem button{background:#353535;border-left:1px solid #242424;box-shadow:#424242 1px 0 0 0;color:#fff}.bd-dark #bd-qem button.active{background-color:#292929}.bd-dark #bd-qem button:hover{background-color:#303030}.bd-dark #bd-qem-favourite-container,.bd-dark #bd-qem-twitch-container{background-color:#353535}.bd-dark .emojiPicker-3m1S-j{background-color:#353535}.bd-dark .emojiPicker-3m1S-j .category-2U57w6{background-color:#353535}.bd-dark .emojiPicker-3m1S-j .header-1nkwgG .searchBar-2pWH0_{background-color:#2b2b2b}.bd-dark .emojiPicker-3m1S-j .searchBar-2pWH0_ input{color:#fff}.bd-dark .emojiPicker-3m1S-j .searchBar-2pWH0_ input::-webkit-input-placeholder{color:#fff}.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7 .emojiItem-109bjA.selected-39BZ4S{background-color:rgba(123,123,123,.37)}.bd-dark .emojiPicker-3m1S-j .dimmer-3iH-5D.visible-3k45bQ{background-color:rgba(62,62,62,.65)}.bd-dark .emojiPicker-3m1S-j .diversitySelector-tmmMv0 .popout-2nUePc{background:#353535;border-color:#202020}.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-track,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-track-piece,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-track,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-track-piece,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track-piece{background-color:#303030!important;border-color:#303030!important}.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-thumb,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-thumb,.bd-dark .emojiPicker-3g68GS .scroller-3vODG7::-webkit-scrollbar-thumb{border-color:#202020!important;background-color:#202020!important}.bd-dark .theme-light .slide-2pHaq5{background:#36393f}.bd-dark .theme-dark .action-1lSjCi,.bd-dark .theme-light .action-1lSjCi{background:#2f3136}.bd-dark .theme-dark .or-3THJsp,.bd-dark .theme-light .or-3THJsp{background:#2f3136;order:2;height:56px;width:56px;top:103px;line-height:56px;left:calc(50% - 29px);border-radius:50%;border:2px solid #484b52}.bd-dark .create-3jownz{order:1}.bd-dark .join-33Tr-7{order:3}.bd-dark .theme-dark .actionIcon-2IISM_,.bd-dark .theme-light .actionIcon-2IISM_{filter:grayscale(100%) brightness(60%)}.bd-dark .theme-light .footer-2yfCgX{background:#2f3136}.bd-dark .regionSelectModal-12e-57{background:#36393f}.bd-dark .regionSelectModal-12e-57 .regionSelectModalOption-2DSIZ3{background:#2f3136;border:2px solid #484b52}.bd-dark~div #ace_settingsmenu{color:#f6f6f7;background:#36393f;box-shadow:0 0 0 1px rgba(32,34,37,.6),0 2px 10px 0 rgba(0,0,0,.2)}.bd-dark~div #ace_settingsmenu select,.bd-dark~div #ace_settingsmenu input[type=text]{color:#f6f6f7;background:#2f3136;border:1px solid #484b52}.bd-dark~div .ace_closeButton::before{color:#f6f6f7}.bd-chat-badge{vertical-align:bottom;line-height:1.375rem;display:inline-block;height:1.25rem}.bd-member-badge{height:15px;margin-left:4px} \ No newline at end of file +.bd-loaderv2{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+IDwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyBoZWlnaHQ9IjEwMCUiIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjAwMCAyMDAwIj4gICAgPG1ldGFkYXRhIC8+ICAgIDxkZWZzPiAgICAgICAgPGZpbHRlciBpZD0ic2hhZG93MSI+ICAgICAgICA8ZmVEcm9wU2hhZG93IGR4PSIyMCIgZHk9IjAiIHN0ZERldmlhdGlvbj0iMjAiIGZsb29kLWNvbG9yPSJyZ2JhKDAsMCwwLDAuMzUpIi8+ICAgICAgICA8L2ZpbHRlcj4gICAgICAgIDxmaWx0ZXIgaWQ9InNoYWRvdzIiPiAgICAgICAgPGZlRHJvcFNoYWRvdyBkeD0iMTUiIGR5PSIwIiBzdGREZXZpYXRpb249IjIwIiBmbG9vZC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwLjE1KSIvPiAgICAgICAgPC9maWx0ZXI+ICAgICAgICA8ZmlsdGVyIGlkPSJzaGFkb3czIj4gICAgICAgIDxmZURyb3BTaGFkb3cgZHg9IjEwIiBkeT0iMCIgc3RkRGV2aWF0aW9uPSIyMCIgZmxvb2QtY29sb3I9InJnYmEoMCwwLDAsMC4zNSkiLz4gICAgICAgIDwvZmlsdGVyPiAgICA8L2RlZnM+ICAgIDxnPiAgICAgICAgPHBhdGggc3R5bGU9ImZpbHRlcjogdXJsKCNzaGFkb3czKSIgZD0iTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaIiBmaWxsPSIjMTcxNzE3IiBvcGFjaXR5PSIxIi8+ICAgICAgICA8cGF0aCBzdHlsZT0iZmlsdGVyOiB1cmwoI3NoYWRvdzIpIiBkPSJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWiIgZmlsbD0iIzNFODJFNSIgb3BhY2l0eT0iMSIvPiAgICAgICAgPHBhdGggc3R5bGU9ImZpbHRlcjogdXJsKCNzaGFkb3cxKSIgZD0iTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWiIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMSIvPiAgICA8L2c+PC9zdmc+)}.bd-loaderv2{position:fixed;bottom:5px;right:5px;z-index:2147483647;display:block;width:20px;height:20px;background-size:100% 100%;animation:bd-loaderv2-animation 1.5s ease-in-out infinite}@keyframes bd-loaderv2-animation{0%{opacity:.05}50%{opacity:.6}to{opacity:.05}}.bd-settings-group.collapsible .bd-settings-title{display:flex;justify-content:space-between}.bd-settings-group.collapsible .bd-settings-title::after{content:"";background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FscXVlXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSItOTUwIDUzMiAxOCAxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAtOTUwIDUzMiAxOCAxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6bm9uZTt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTS05MzIsNTMydjE4aC0xOHYtMThILTkzMnoiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QxIiBwb2ludHM9Ii05MzYuNiw1MzguOCAtOTQxLDU0My4yIC05NDUuNCw1MzguOCAiLz4NCjwvc3ZnPg0K);height:20px;width:20px;display:inline-block;vertical-align:bottom;transition:transform .3s ease;transform:rotate(0)}.bd-settings-group.collapsed .bd-settings-title::after{transition:transform .3s ease;transform:rotate(90deg)}.bd-settings-container{height:auto;overflow:hidden;transition:height 300ms cubic-bezier(.47,0,.745,.715)}.bd-settings-group.collapsed .bd-settings-container{height:0}.bd-settings-group~.bd-settings-group .bd-settings-title{margin-top:30px;transition:margin-top 300ms ease}.bd-settings-group.collapsed+.bd-settings-group .bd-settings-title{margin-top:0}.bd-settings-group.collapsible .bd-settings-title{order:1;align-items:center}.bd-settings-group.collapsible .bd-settings-title::before{content:"";background-color:rgba(114,118,125,.3);height:2px;order:2;flex:1;margin:0 10px 0 15px}.bd-settings-group.collapsible .bd-settings-title::after{order:3}.bd-settings-title.bd-settings-group-title{margin-bottom:10px}.checkbox-item{display:flex}.checkbox-item .checkbox-label{margin-right:8px}#bd-connection{margin-left:10px}.bd-button{background-color:#3e82e5;color:#fff;border-radius:3px;padding:2px 6px}.bd-button:hover{background-color:#3875ce}.bd-button:active{background-color:#3268b7}.bd-footnote{color:#b9bbbe;font-size:11px}.bd-button-next,.bd-button-reconnect{margin:5px 10px 10px 0;width:100%;min-height:20px}.bd-server-card{position:relative;border-width:1px;border-style:solid;border-radius:5px;background:rgba(32,34,37,.6);border-color:#202225;margin-bottom:8px}.bd-server-header,.bd-server-footer{display:flex;color:#b9bbbe}.bd-server-header{text-transform:uppercase;letter-spacing:.5px}.bd-server-card .bd-button{margin-top:4px}.bd-button.bd-button-success{background-color:#3ac15c}.bd-button.bd-button-success:hover{background-color:#34ae53}.bd-button.bd-button-success:active{background-color:#2e9a4a}#bbd-version{font-size:12px;font-weight:600;color:#72767d;padding:2px 10px}.settings-open .bd-close{cursor:pointer;float:right}@keyframes open-window{0%{transform:scale(.9)}to{transform:none}}.floating-window{animation:open-window 200ms ease;min-width:200px;min-height:300px;box-shadow:0 2px 10px 0 rgba(0,0,0,.2);display:flex;flex-direction:column;-webkit-app-region:no-drag;position:fixed;z-index:1001;box-sizing:border-box}.floating-window.modal-open{z-index:999}.floating-window.resizable{overflow:auto;resize:both;padding-bottom:10px;background:#202225}.floating-window-titlebar{width:100%;display:flex;justify-content:space-between;align-items:center;background:#202225;color:#fff;border-bottom:1px solid #272822}.floating-window-content{background:#2f3129;color:#fff;flex:1}.floating-window-titlebar .title{flex:1;text-align:center;padding:2px 0}.floating-window-buttons{display:flex}.floating-window-buttons .button{cursor:pointer;padding:0 2px}.floating-window-buttons .button svg{fill:#dcddde;margin-top:1.5px}.floating-window-buttons .button:hover svg{fill:#fff}.floating-window-buttons .button:hover{background-color:#36393f}.floating-window-buttons .close-button:hover{background-color:#f04747}.floating-window-buttons .close-button:hover svg path.fill{fill:#fff}.floating-window-content #bd-editor-panel{display:flex;flex-direction:column;flex:1}.floating-window-content{display:flex;flex-direction:column}.floating-window .editor-wrapper{flex:1}.floating-window .ace_editor{height:auto;flex:1}.floating-window #bd-editor-controls{height:auto;background:#202225;border:0;box-shadow:0 1px 0 0 #2f3129 inset}.bd-addon-controls{display:flex;align-items:center;justify-content:space-between}.bd-addon-controls .bd-search{font-size:13px;margin:0;width:200px}.bd-addon-dropdowns{display:flex}.bd-select-wrapper+.bd-select-wrapper{margin-left:10px}.bd-select-wrapper{color:#f6f6f7;font-size:13px;display:flex;align-items:center}.bd-select-wrapper label{opacity:.3;margin-right:5px}.bd-select{position:relative;cursor:pointer;color:#f6f6f7;font-size:13px;display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.3);border-radius:3px;padding:5px 5px 5px 0}.bd-select.bd-select-transparent{background:0 0;border:0;padding:0}.bd-select-value{padding-left:12px}.bd-select-arrow{margin-left:10px}.bd-select .bd-select-options{position:absolute;background:#2f3136;border-radius:0 0 3px 3px;max-height:300px;min-width:calc(100% + 2px);overflow-y:auto;box-shadow:rgba(0,0,0,.3) 0 1px 5px 0;border:1px solid rgba(0,0,0,.3);border-top:0;margin-top:-1px;margin-left:-1px;z-index:2;top:100%}.bd-select-transparent .bd-select-options{border:1px solid rgba(0,0,0,.3);margin-top:3px;border-radius:3px}.bd-select .bd-select-option{padding:8px 12px;cursor:pointer;white-space:pre}.bd-select .bd-select-option:hover,.bd-select .bd-select-option.selected{background:#26272b}.bd-search-wrapper{padding:3px;border-radius:3px;outline:0;border:0;background-color:#202225;color:#fff;display:flex;align-items:center}.bd-search{padding:2px 3px;background:0 0;border:0;color:#fff;flex:1}.bd-search-wrapper>svg{margin-right:2px}.bd-setting-item .bd-select{min-width:200px}.bd-settings-group.expanded .bd-settings-container:not(.animating){overflow:visible}.bd-switch{background-color:#72767d;border-radius:14px;width:42px;height:24px;opacity:1;overflow:hidden;user-select:none;position:relative;display:block;flex:0 0 auto;transition:background .15s ease-in-out,box-shadow .15s ease-in-out,border .15s ease-in-out,opacity .15s ease-in-out;margin-left:10px;box-shadow:inset 0 1px 1px rgba(0,0,0,.15)}.bd-switch::before{content:"";display:block;position:absolute;top:0;left:0;bottom:0;right:0;z-index:0;opacity:0;background-color:#000}.bd-switch::after{content:"";display:block;position:absolute;background-color:#fff;z-index:1;width:18px;margin:3px;border-radius:9px;height:18px;left:0;transition:transform .15s ease-in-out,width .1s ease-in-out,left .1s ease-in-out;box-shadow:0 2px 4px rgba(0,0,0,.3)}.bd-switch .bd-checkbox{position:absolute;width:100%;height:100%;opacity:0;padding:0;margin:0;z-index:2;cursor:pointer}.bd-switch-checked{background-color:#3e82e5}.bd-switch-checked::after{transform:translate3d(18px,0,0)}.bd-switch-disabled{opacity:.3;cursor:not-allowed}.bd-setting-item{display:flex;flex-direction:column;margin-bottom:20px}.bd-setting-header{display:flex;justify-content:space-between;align-items:center}.bd-setting-header label{font-weight:500;cursor:pointer;overflow:hidden;word-wrap:break-word;font-size:16px;line-height:24px;color:#f6f6f7}.bd-setting-note{color:#72767d;margin-top:4px;font-size:14px;line-height:20px;font-weight:500}.bd-setting-divider{width:100%;height:1px;margin-top:20px;background-color:rgba(114,118,125,.3)}.bd-controls+.bd-addon-list{margin-top:10px}.bd-addon-button{cursor:pointer}.bd-addon-button+.bd-addon-button{margin-left:5px}#emote-container{padding:10px}.emote-container{display:inline-block;padding:2px;border-radius:5px;width:30px;height:30px;position:relative}.emote-icon{max-width:100%;max-height:100%;position:absolute;margin:auto;top:0;right:0;bottom:0;left:0;cursor:pointer}.emote.stop-animation{animation:none!important}.emote-container:hover{background:rgba(123,123,123,.37)}.emoteflip,.emotespinflip{transform:scaleX(-1)}.emotespin{animation:1s emote-spin infinite linear}.emote1spin{animation:1s emote-spin-reverse infinite linear}.emotespin2{animation:.5s emote-spin infinite linear}.emote2spin{animation:.5s emote-spin-reverse infinite linear}.emotespin3{animation:.2s emote-spin infinite linear}.emote3spin{animation:.2s emote-spin-reverse infinite linear}.emotepulse{animation:1s emote-pulse infinite linear}.emotetr{transform:translateX(-3px)}.emotebl{transform:translateY(-3px)}.emotebr{transform:translate(-3px,-3px)}.emoteshake{animation:1s emote-shake infinite linear}.emoteflap{transform:scaleY(-1)!important}.emoteshake2{animation:emote-shake2 .3s linear infinite}.emoteshake3{animation:emote-shake3 .1s linear infinite}@keyframes emote-shake2{25%{transform:translate(-1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}75%{transform:translate(1px,-1px)}}@keyframes emote-shake3{25%{transform:translate(-1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}75%{transform:translate(1px,-1px)}}@keyframes emote-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes emote-spin-reverse{0%{transform:rotate(0deg)}to{transform:rotate(-360deg)}}@keyframes emote-pulse{0%{-webkit-transform:scale(1,1)}50%{-webkit-transform:scale(1.2,1.2)}to{-webkit-transform:scale(1,1)}}@keyframes emote-shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}#removemenu{width:auto;background:#505050;position:absolute;z-index:999999;display:none;box-shadow:0 0 2px #000;padding:2px;left:25px;display:block!important;cursor:pointer;color:#fff;position:fixed}#removemenu ul a{text-decoration:none;color:#fff;padding:3px}.emotewrapper{position:relative;display:inline-flex;object-fit:contain;margin:-.1em .05em -.2em .1em;vertical-align:top}.emotewrapper.jumboable{margin-bottom:0;margin-top:.2em;vertical-align:-.3em}.emote{height:1.45em}.emote.jumboable{height:2rem}.emotewrapper:hover .fav{display:block}.fav{display:none;position:absolute;width:15px;height:15px;right:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAzFBMVEUAAABQUFBMTExLS0tNTU1MTExNTU1NTU1MTExMTExNTU1LS0tEREBEREBEREBEREBJSUhLS0tLS0tEREBNTU1NTU1NTU1EREArKyhNTU1NTU0AAABMTExKSklMTExNTU1NTU1NTU1KSkpMTExKSkhNTU1KSkpISEZNTU1LS0tAQDxOTk5KSkpLS0tNTU1MTExMTEx/f39MTExMTExLS0pLS0tMTExNTU1NTU1LS0pNTU1NTU1NTU1NTU1NTU1NTUxNTU1NTU1NTUxMTEzB8C/5AAAAOnRSTlMAI8X96oWAgYSF68QBAg0PMCb9BIuLgQUD4N0Bh0mKhZSOQ4gcrKscaW8QRE6fmJyjAshASceG7cIpqQOxTQAAALVJREFUGFddx6FOA0EYAOGZvd07Qm6vVCAAgUUgQEDfX/YZMAigqaFN7iC5tsmPqGPUN/AvUVeoEbGOCElJz08Uzeixqu4AqomVVSNngOVjTqDGZSl3UFtPGV2ot2zaq96YM9p5Ddzcf/nTTAlj+/sNtNu8OcwkIsbPBtrUfMQeEhGQmHbmGIFMwLPzu6UMIwBNgToshgq8Nr2ki+Oy7ebDHp70LRPWB6OZgfWLWei7fJonOOsPCGA9kVlssOoAAAAASUVORK5CYII=);border:0;background-size:100% 100%;background-repeat:no-repeat;background-color:#303030;border-radius:5px;top:-7px;cursor:pointer}.fav.active{background-color:#ff0}.emojiPicker-3m1S-j{box-shadow:none;border-top:none;border-radius:0 0 5px 5px}#bd-qem{border-radius:5px 5px 0 0;background:#fff;border-bottom:1px solid rgba(0,0,0,.1)!important;height:30px;display:flex;flex-direction:row;padding-right:1px!important}#bd-qem button{border-left:1px solid #efefef;background:0 0;box-shadow:#cecece 1px 0 0 0;flex-grow:1}#bd-qem button:hover{background:#ececec}#bd-qem-twitch{border-radius:5px 0 0 0;order:2}#bd-qem-emojis{border-radius:0 5px 0 0;order:3}#bd-qem-favourite{order:3}#bd-qem button.active{background-color:#e2e2e2}#bd-qem-twitch-container,#bd-qem-favourite-container{width:346px;height:329px;background-color:#fff;border-radius:0 0 5px 5px}#bd-qem-twitch-container .scroller-wrap,#bd-qem-favourite-container .scroller-wrap{height:100%}.emote-menu-inner{padding:5px 0 0 15px}.bd-qme-hidden #bd-qem-emojis{display:none}#bd-pub-li{height:20px;margin-bottom:10px;overflow:hidden}#bd-pub-button{border-radius:4px;background-color:#2f3136;color:#b9bbbe;text-align:center;font-size:12px;line-height:20px;height:20px}.bd-server-card .bd-server-tags{flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:0;line-height:24px;font-size:12px;color:#b9bbbe;font-weight:700;margin-right:10px}.bd-server-card.bd-server-card-pinned{margin-bottom:15px}.bd-server-card.bd-server-card-pinned:after{background:#3a71c1;content:"";height:3px;width:100%;display:block;margin-top:7px;position:absolute;top:100%}.bd-server-description-container{color:#b9bbbe;min-height:65px;max-height:65px;border-top:1px solid #3f4146;border-bottom:1px solid #3f4146;padding-top:5px;font-size:13px}.bd-server-header{justify-content:space-between;font-weight:600}.bd-server-card{display:flex}.bd-server-content{padding:5px 10px;flex:1}.bd-server-image{min-width:115px;min-height:115px;max-width:115px;max-height:115px}.bd-server-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:15px;max-width:330px;flex:1 1 50%}.bd-layer{-ms-flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;flex-direction:column;left:0;position:absolute;right:0;top:0}#pubslayer button{background:#7289da;color:#fff;font-size:14px;font-weight:500;line-height:16px;padding:2px 16px;border:0;border-radius:3px;transition:background-color .17s ease}#pubslayer button:hover{background-color:#677bc4}#pubslayer input{color:#f6f6f7;background-color:rgba(0,0,0,.1);border-color:rgba(0,0,0,.3);padding:10px;height:30px;border-width:1px;border-style:solid;border-radius:3px;outline:0;transition:background-color .15s ease,border .15s ease}#bd-editor-panel{display:flex;flex-direction:column}#bd-editor-controls button{margin:0 5px 0 0;background:0 0;color:#fff;height:26px;font-weight:600;border-radius:3px;display:flex;align-items:center}#bd-editor-controls button:hover{background:rgba(255,255,255,.05)}#bd-editor-controls button svg{fill:#fff}#bd-editor-controls button:last-of-type{margin-right:0}#bd-editor-controls{display:flex;align-items:center;justify-content:space-between;background:#272822;color:#fff;border:0;box-shadow:0 1px 0 0 #2f3129 inset;padding:5px}.editor-wrapper{display:flex}.ace_editor{line-height:normal;font-family:Consolas,monospace;box-sizing:border-box;height:calc(100vh - 250px);font-size:14px;width:100%}.bd-monokai .editor .ace_gutter{background:#2f3136}.bd-monokai .ace_editor{background:#292b2f}.bd-monokai #bd-editor-controls{background:#202225}.theme-light #bd-editor-controls{background:#e8e8e8;border:1px solid #fff;border-top:1px solid #adadad;box-shadow:inset 0 1px 0 0 #fff}.controls-section{display:flex;align-items:center}.controls-section .checkbox-inner{width:14px;height:14px}.controls-section .checkbox-inner .checkbox:checked+span::after{left:2px;top:-2px}.controls-section .checkbox-label{font-size:14px}#floating-editor-window{min-width:340px;min-height:280px;max-height:900px;max-width:750px}.floating-addon-window{min-width:535px;min-height:605px;max-height:90%;max-width:90%}#ace_settingsmenu_container{background:rgba(0,0,0,.7)!important}body #ace_settingsmenu{padding-top:35px}body .ace_closeButton{position:absolute;top:8px;right:12px;z-index:10000;padding:0;cursor:pointer;background:0 0;border:0}body .ace_closeButton::before{content:"✖";color:#36393f}body .ace_closeButton:active{transform:translateY(2px)}#bd-editor-controls .help-text{margin-top:8px;margin-bottom:3px;font-size:14px}#bd-editor-controls .help-text .inline{background:#2f3129;padding:.2em;margin:-.2em 0;border-radius:3px}.bd-social-logo{opacity:.6}.bd-social-link:hover .bd-social-logo{opacity:1}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper{bottom:0;left:0;position:fixed;background:inherit;right:0;padding:5px}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper span{color:#b9bbbe;font-weight:600;font-size:11px}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper a{font-size:11px}.bd-button-title{margin-left:10px}.bd-switch-item{flex-direction:column;margin-top:8px}.bd-switch-item h3{font-size:16px;font-weight:500;line-height:24px;flex:1}.theme-dark .bd-switch-item h3{color:#f6f6f7}.theme-light .bd-switch-item h3{color:#4f545c}.bd-switch-item .bd-switch-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;width:44px;height:24px;display:block;flex:0 0 auto}.bd-switch-item .bd-switch-wrapper input{position:absolute;opacity:0;cursor:pointer;width:100%;height:100%;z-index:1}.bd-switch-item .bd-switch-wrapper .bd-switch{background:#7289da;position:absolute;top:0;right:0;bottom:0;left:0;background:#72767d;border-radius:14px;transition:background .15s ease-in-out,box-shadow .15s ease-in-out,border .15s ease-in-out}.bd-switch-item .bd-switch-wrapper .bd-switch:before{content:"";display:block;width:18px;height:18px;position:absolute;top:3px;left:3px;bottom:3px;background:#f6f6f7;border-radius:10px;transition:all .15s ease;box-shadow:0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05)}.bd-switch-item .bd-switch-wrapper .bd-switch.checked{background:#7289da}.bd-switch-item .bd-switch-wrapper .bd-switch.checked:before{transform:translateX(20px)}#bd-settingspane-container .scroller-wrap{height:100%}#bd-settingspane-container .scroller-wrap .scroller{display:flex}.bd-reload{cursor:pointer;vertical-align:top;fill:#dcddde}.bd-reload:hover{fill:#fff}.bd-reload-header{margin-left:5px}.bd-reload-card{margin-right:5px}.bd-controls{display:flex}.bd-addon-list{user-select:text}.bd-addon-list .bd-addon-card{max-height:175px;margin-bottom:20px;padding:5px 8px;border:1px solid transparent;border-radius:5px;overflow:hidden}.theme-dark .bd-addon-list .bd-addon-card{background-color:rgba(32,34,37,.6);color:#f6f6f7;border-color:#202225}.theme-light .bd-addon-list .bd-addon-card{background-color:#f8f9f9;color:#4f545c;border-color:#dcddde}.bd-addon-list .bd-addon-card.settings-open{max-height:800px;overflow-y:auto}.bd-addon-list .bd-addon-header{font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:space-between;padding-bottom:5px;border-bottom:1px solid transparent;overflow:hidden}.theme-dark .bd-addon-list .bd-addon-header{color:#f6f6f7;border-bottom-color:rgba(114,118,125,.3)}.theme-light .bd-addon-list .bd-addon-header{color:#4f545c;border-bottom-color:rgba(185,187,190,.3)}.bd-addon-list .bd-description{word-break:break-word;max-height:100px;margin:5px 0;padding:5px 0;overflow-y:auto}.theme-dark .bd-addon-list .bd-description{color:#b9bbbe}.theme-light .bd-addon-list .bd-description{color:#72767d}.bd-addon-list .scroller::-webkit-scrollbar-track-piece,.bd-addon-list .scroller::-webkit-scrollbar-thumb{border-radius:0!important;border-color:transparent}.bd-addon-list .bd-footer{font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:space-between;padding-top:5px;border-top:1px solid transparent;overflow:hidden}.theme-dark .bd-addon-list .bd-footer{border-top-color:rgba(114,118,125,.3)}.theme-light .bd-addon-list .bd-footer{border-top-color:rgba(185,187,190,.3)}.bd-addon-list .bd-footer button{padding:3px 16px;transition:opacity 250ms ease}.bd-addon-list .bd-footer button:disabled{opacity:.4}.bd-addon-list .bd-footer a{color:#3e82e5}.bd-addon-list .bd-footer a:hover{text-decoration:underline}@keyframes bd-backdrop{to{opacity:.85}}@keyframes bd-modal-wrapper{to{transform:scale(1);opacity:1}}@keyframes bd-backdrop-closing{to{opacity:0}}@keyframes bd-modal-wrapper-closing{to{transform:scale(.7);opacity:0}}.bd-backdrop{animation:bd-backdrop 250ms ease;animation-fill-mode:forwards;opacity:0;background-color:#000;transform:translateZ(0)}.bd-modal-wrapper.closing .bd-backdrop{animation:bd-backdrop-closing 200ms linear;animation-fill-mode:forwards;animation-delay:50ms;opacity:.85}.bd-modal-wrapper.closing .bd-modal{animation:bd-modal-wrapper-closing 250ms cubic-bezier(.19,1,.22,1);animation-fill-mode:forwards;opacity:1;transform:scale(1)}.bd-modal-wrapper .bd-modal{animation:bd-modal-wrapper 250ms cubic-bezier(.175,.885,.32,1.275);animation-fill-mode:forwards;transform:scale(.7);transform-origin:50% 50%;display:flex;align-items:center;box-sizing:border-box;contain:content;justify-content:center;top:0;left:0;bottom:0;right:0;opacity:0;pointer-events:none;position:absolute;z-index:1000}.bd-modal-wrapper .bd-modal-inner{display:flex;contain:layout;flex-direction:column;pointer-events:auto;border:1px solid rgba(28,36,43,.6);border-radius:5px;box-shadow:0 2px 10px 0 rgba(0,0,0,.2);overflow:hidden;max-height:660px;min-height:200px;width:440px;user-select:text}.bd-modal-wrapper .bd-content-modal .bd-modal-inner{height:500px;width:700px}.bd-modal-wrapper .header{background-color:#35393e;box-shadow:0 2px 3px 0 rgba(0,0,0,.2);padding:12px 20px;z-index:1;color:#fff;font-size:16px;font-weight:700;line-height:19px}.bd-modal-wrapper .bd-modal-body{background-color:#36393f;color:#fff;flex-direction:row;overflow:hidden;display:flex;flex-direction:column;flex:1;contain:layout;position:relative}.bd-modal-wrapper .scroller{padding:10px}.bd-modal-wrapper .bd-content-modal .bd-modal-body{padding:0}.bd-modal-wrapper .scroller{overflow-y:auto}.bd-modal-wrapper .footer{display:flex;justify-content:flex-end;padding:10px 20px}.bd-modal-wrapper .footer button{min-height:32px;min-width:60px;align-items:center;display:flex;font-size:14px;font-weight:500;justify-content:center;line-height:16px;padding:2px 16px;user-select:none}.bd-modal-wrapper .tab-bar-container{align-items:center;border-bottom:0;background:rgba(0,0,0,.2);box-shadow:0 2px 3px 0 rgba(0,0,0,.1);display:flex;flex-direction:row;justify-content:space-between;margin-bottom:15px}.bd-modal-wrapper .tab-bar.TOP{margin:0;border:0;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.bd-modal-wrapper .tab-bar-container .tab-bar-item{margin:0 15px;padding:15px 0;color:#fff!important;opacity:.5;transition:opacity 200ms ease;border-bottom:2px solid transparent}.bd-modal-wrapper .tab-bar-container .tab-bar-item:hover{border-color:#fff;cursor:pointer}.bd-modal-wrapper .tab-bar-container .tab-bar-item.selected{opacity:1;border-color:#fff}.bd-modal-wrapper .tab-bar.TOP .tab-bar-item+.tab-bar-item{margin:0}.bd-modal-wrapper .table-header{display:flex;justify-content:space-between;color:#fff;font-weight:700;padding-bottom:10px;margin:3px 15px 0 15px;border-bottom:1px solid #fff;font-size:14px}.bd-modal-wrapper .table-column{width:25%}.bd-modal-wrapper .table-column.column-error{width:50%}.bd-modal-wrapper .table-column{word-wrap:break-word}.bd-modal-wrapper .errors{display:flex;flex-direction:column;padding:0;font-size:14px;padding:0 5px}.bd-modal-wrapper .error{display:flex;color:#fff;border-bottom:1px solid rgba(255,255,255,.25);padding:15px 0;align-items:center}.bd-modal-wrapper .error-link{color:#3e82e5;font-weight:500}.bd-modal-wrapper .bd-content-modal .scroller{padding-top:0}.bd-toasts{position:fixed;display:flex;top:0;flex-direction:column;align-items:center;justify-content:flex-end;pointer-events:none;z-index:4000}@keyframes bd-toast-up{0%{transform:translateY(0);opacity:0}}.bd-toast{animation:bd-toast-up 300ms ease;transform:translateY(-10px);background:#36393f;padding:10px;border-radius:5px;box-shadow:0 0 0 1px rgba(32,34,37,.6),0 2px 10px 0 rgba(0,0,0,.2);font-weight:500;color:#fff;user-select:text;font-size:14px;opacity:1;margin-top:10px;pointer-events:none;user-select:none}@keyframes bd-toast-down{to{transform:translateY(0);opacity:0}}.bd-toast.closing{animation:bd-toast-down 200ms ease;animation-fill-mode:forwards;opacity:1;transform:translateY(-10px)}.bd-toast.icon{padding-left:30px;background-size:20px 20px;background-repeat:no-repeat;background-position:6px 50%}.bd-toast.toast-info{background-color:#4a90e2}.bd-toast.toast-info.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiLz48L3N2Zz4=)}.bd-toast.toast-success{background-color:#43b581}.bd-toast.toast-success.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiLz48L3N2Zz4=)}.bd-toast.toast-danger,.bd-toast.toast-error{background-color:#f04747}.bd-toast.toast-danger.icon,.bd-toast.toast-error.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+)}.bd-toast.toast-warning,.bd-toast.toast-warn{background-color:#ffa600;color:#fff}.bd-toast.toast-warning.icon,.bd-toast.toast-warn.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPg==)}.bd-minimal .divider-32i8lo{opacity:0}.bd-minimal .large-3ChYtB{max-width:20px;max-height:20px;background-size:100%;margin-right:2px;margin-top:0;border-radius:0}.bd-minimal .content-3dzVd8{border-left:2px solid #ebebeb;padding-left:2px}.bd-minimal .theme-dark .content-3dzVd8{border-left:2px solid #303030}.bd-minimal .username-_4ZSMR{font-size:small}.bd-minimal .container-1YxwTf{padding:5px}.bd-minimal .embed-IeVjo6{padding:2px}.bd-minimal .membersWrap-2h-GB4{min-width:0}.bd-minimal .members-1998pB .small-5Os1Bb{max-width:15px;max-height:15px;background-size:15px 15px}.bd-minimal .members-1998pB .small-5Os1Bb .status-oxiHuE{height:5px;width:5px}.bd-minimal .members-1998pB .member-3W1lQa{padding:5px}.bd-minimal .members-1998pB .memberInner-2CPc3V{transform:scale(.9)}.bd-minimal .members-1998pB .membersGroup-v9BXpm{margin-top:3px;transform:scale(.9)}.bd-minimal.bd-minimal-chan .channels-Ie2l6A{display:none}.bd-minimal .channels-Ie2l6A header span{font-size:12px}.bd-minimal .channels-Ie2l6A{width:160px}.bd-minimal .containerDefault-3GGEv_{transform:scale(.9)}.bd-minimal .content-3at_AU{transform:scale(.9)}.bd-minimal .icon-1_QxNX{width:14px;height:14px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .listItem-2P_4kh{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px;margin:0 12.5px 8px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .wrapper-25eVIn a,.bd-minimal .listItem-2P_4kh .wrapper-25eVIn .icon-27yU2q{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .listItem-2P_4kh .wrapper-25eVIn{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .listItem-2P_4kh svg,.bd-minimal .listItem-2P_4kh foreignObject[mask]{mask:none}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .homeIcon-tEMBK1{width:10px;height:10px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .circleIconButton-jET_ig{height:20px;width:20px}.bd-minimal .circleIconButton-jET_ig svg{height:14px;width:14px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .friendsOnline-_wi_fM{margin-left:-15px;font-size:7px}.bd-minimal #bd-pub-li{height:16px}.bd-minimal #bd-pub-button{font-size:8px;line-height:16px;height:16px}.bd-minimal .wrapper-1Rf91z,.bd-minimal .wrapper-1Rf91z .scrollerWrap-1IAIlv,.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG{width:45px}.bd-minimal .wrapper-1Rf91z .guildSeparator-3s64Iy{margin-left:-15px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .listItem-2P_4kh .wrapper-sa6paO{height:20px;margin-top:0;margin-left:-12.5px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .iconBadge-2wi9r4{width:12px;height:12px;background-size:12px}.bd-minimal .container-2Thooq .avatarSmall-3ACRaI{width:15px;height:15px;background-size:15px 15px}.bd-minimal .container-2Thooq .avatarSmall-3ACRaI .status-oxiHuE{height:5px;width:5px}.bd-minimal .container-2Thooq .accountDetails-3k9g4n{transform:scale(.8)}.bd-minimal .container-2Thooq .button-2b6hmh{height:14px;width:14px;background-size:14px 14px;margin-left:3px}.bd-minimal .container-2Thooq .button-2b6hmh svg{height:14px;width:14px}.bd-dark #bd-qem-favourite-container,.bd-dark #bd-qem-twitch-container{background-color:#353535}.bd-dark #bd-qem{border-bottom:1px solid #464646!important;background:#353535}.bd-dark #bd-qem button{background:#353535;border-left:1px solid #242424;box-shadow:#424242 1px 0 0 0;color:#fff}.bd-dark #bd-qem button.active{background-color:#292929}.bd-dark #bd-qem button:hover{background-color:#303030}.bd-dark #bd-qem-favourite-container,.bd-dark #bd-qem-twitch-container{background-color:#353535}.bd-dark .emojiPicker-3m1S-j{background-color:#353535}.bd-dark .emojiPicker-3m1S-j .category-2U57w6{background-color:#353535}.bd-dark .emojiPicker-3m1S-j .header-1nkwgG .searchBar-2pWH0_{background-color:#2b2b2b}.bd-dark .emojiPicker-3m1S-j .searchBar-2pWH0_ input{color:#fff}.bd-dark .emojiPicker-3m1S-j .searchBar-2pWH0_ input::-webkit-input-placeholder{color:#fff}.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7 .emojiItem-109bjA.selected-39BZ4S{background-color:rgba(123,123,123,.37)}.bd-dark .emojiPicker-3m1S-j .dimmer-3iH-5D.visible-3k45bQ{background-color:rgba(62,62,62,.65)}.bd-dark .emojiPicker-3m1S-j .diversitySelector-tmmMv0 .popout-2nUePc{background:#353535;border-color:#202020}.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-track,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-track-piece,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-track,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-track-piece,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track-piece{background-color:#303030!important;border-color:#303030!important}.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-thumb,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-thumb,.bd-dark .emojiPicker-3g68GS .scroller-3vODG7::-webkit-scrollbar-thumb{border-color:#202020!important;background-color:#202020!important}.bd-dark .theme-light .slide-2pHaq5{background:#36393f}.bd-dark .theme-dark .action-1lSjCi,.bd-dark .theme-light .action-1lSjCi{background:#2f3136}.bd-dark .theme-dark .or-3THJsp,.bd-dark .theme-light .or-3THJsp{background:#2f3136;order:2;height:56px;width:56px;top:103px;line-height:56px;left:calc(50% - 29px);border-radius:50%;border:2px solid #484b52}.bd-dark .create-3jownz{order:1}.bd-dark .join-33Tr-7{order:3}.bd-dark .theme-dark .actionIcon-2IISM_,.bd-dark .theme-light .actionIcon-2IISM_{filter:grayscale(100%) brightness(60%)}.bd-dark .theme-light .footer-2yfCgX{background:#2f3136}.bd-dark .regionSelectModal-12e-57{background:#36393f}.bd-dark .regionSelectModal-12e-57 .regionSelectModalOption-2DSIZ3{background:#2f3136;border:2px solid #484b52}.bd-dark~div #ace_settingsmenu{color:#f6f6f7;background:#36393f;box-shadow:0 0 0 1px rgba(32,34,37,.6),0 2px 10px 0 rgba(0,0,0,.2)}.bd-dark~div #ace_settingsmenu select,.bd-dark~div #ace_settingsmenu input[type=text]{color:#f6f6f7;background:#2f3136;border:1px solid #484b52}.bd-dark~div .ace_closeButton::before{color:#f6f6f7}.bd-chat-badge{vertical-align:bottom;line-height:1.375rem;display:inline-block;height:1.25rem}.bd-member-badge{height:15px;margin-left:4px}.bd-sidebar-header{display:flex;justify-content:space-between}.bd-sidebar-header .bd-changelog-button{height:16px}.bd-sidebar-header .bd-icon{cursor:pointer;fill:#72767d}.bd-sidebar-header .bd-icon:hover{fill:#fff} \ No newline at end of file diff --git a/js/main.js b/js/main.js index b27d72a0..2cd8e0af 100644 --- a/js/main.js +++ b/js/main.js @@ -139,11 +139,11 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /*!**********************************!*\ !*** ./src/builtins/builtins.js ***! \**********************************/ -/*! exports provided: CustomCSS, WindowPrefs, TwentyFourHour, ClassNormalizer, PublicServers, VoiceDisconnect, ColoredText, DarkMode, MinimalMode, VoiceMode, EmoteModule, EmoteMenu, EmoteAutocaps, CopySelector, Debugger, ReactDevTools */ +/*! exports provided: CustomCSS, WindowPrefs, TwentyFourHour, ClassNormalizer, PublicServers, VoiceDisconnect, ColoredText, DarkMode, MinimalMode, VoiceMode, EmoteModule, EmoteMenu, CopySelector, Debugger, ReactDevTools */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _customcss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./customcss */ \"./src/builtins/customcss.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomCSS\", function() { return _customcss__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _windowprefs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./windowprefs */ \"./src/builtins/windowprefs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowPrefs\", function() { return _windowprefs__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _general_24hour__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./general/24hour */ \"./src/builtins/general/24hour.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TwentyFourHour\", function() { return _general_24hour__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _general_classnormalizer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./general/classnormalizer */ \"./src/builtins/general/classnormalizer.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ClassNormalizer\", function() { return _general_classnormalizer__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _general_publicservers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./general/publicservers */ \"./src/builtins/general/publicservers.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PublicServers\", function() { return _general_publicservers__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _general_voicedisconnect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./general/voicedisconnect */ \"./src/builtins/general/voicedisconnect.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VoiceDisconnect\", function() { return _general_voicedisconnect__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _appearance_coloredtext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./appearance/coloredtext */ \"./src/builtins/appearance/coloredtext.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ColoredText\", function() { return _appearance_coloredtext__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _appearance_darkmode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./appearance/darkmode */ \"./src/builtins/appearance/darkmode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DarkMode\", function() { return _appearance_darkmode__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _appearance_minimalmode__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./appearance/minimalmode */ \"./src/builtins/appearance/minimalmode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MinimalMode\", function() { return _appearance_minimalmode__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _appearance_voicemode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./appearance/voicemode */ \"./src/builtins/appearance/voicemode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VoiceMode\", function() { return _appearance_voicemode__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _emotes_emotes__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./emotes/emotes */ \"./src/builtins/emotes/emotes.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteModule\", function() { return _emotes_emotes__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _emotes_emotemenu__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./emotes/emotemenu */ \"./src/builtins/emotes/emotemenu.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteMenu\", function() { return _emotes_emotemenu__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _emotes_emoteautocaps__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./emotes/emoteautocaps */ \"./src/builtins/emotes/emoteautocaps.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteAutocaps\", function() { return _emotes_emoteautocaps__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _developer_copyselector__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./developer/copyselector */ \"./src/builtins/developer/copyselector.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CopySelector\", function() { return _developer_copyselector__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _developer_debugger__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./developer/debugger */ \"./src/builtins/developer/debugger.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Debugger\", function() { return _developer_debugger__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _developer_reactdevtools__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./developer/reactdevtools */ \"./src/builtins/developer/reactdevtools.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReactDevTools\", function() { return _developer_reactdevtools__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n// Export these two first because they add settings/panels\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2J1aWx0aW5zLmpzPzU5YTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQSIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9idWlsdGlucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEV4cG9ydCB0aGVzZSB0d28gZmlyc3QgYmVjYXVzZSB0aGV5IGFkZCBzZXR0aW5ncy9wYW5lbHNcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDdXN0b21DU1N9IGZyb20gXCIuL2N1c3RvbWNzc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgV2luZG93UHJlZnN9IGZyb20gXCIuL3dpbmRvd3ByZWZzXCI7XHJcblxyXG5leHBvcnQge2RlZmF1bHQgYXMgVHdlbnR5Rm91ckhvdXJ9IGZyb20gXCIuL2dlbmVyYWwvMjRob3VyXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDbGFzc05vcm1hbGl6ZXJ9IGZyb20gXCIuL2dlbmVyYWwvY2xhc3Nub3JtYWxpemVyXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBQdWJsaWNTZXJ2ZXJzfSBmcm9tIFwiLi9nZW5lcmFsL3B1YmxpY3NlcnZlcnNcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFZvaWNlRGlzY29ubmVjdH0gZnJvbSBcIi4vZ2VuZXJhbC92b2ljZWRpc2Nvbm5lY3RcIjtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDb2xvcmVkVGV4dH0gZnJvbSBcIi4vYXBwZWFyYW5jZS9jb2xvcmVkdGV4dFwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRGFya01vZGV9IGZyb20gXCIuL2FwcGVhcmFuY2UvZGFya21vZGVcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIE1pbmltYWxNb2RlfSBmcm9tIFwiLi9hcHBlYXJhbmNlL21pbmltYWxtb2RlXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBWb2ljZU1vZGV9IGZyb20gXCIuL2FwcGVhcmFuY2Uvdm9pY2Vtb2RlXCI7XHJcblxyXG5leHBvcnQge2RlZmF1bHQgYXMgRW1vdGVNb2R1bGV9IGZyb20gXCIuL2Vtb3Rlcy9lbW90ZXNcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIEVtb3RlTWVudX0gZnJvbSBcIi4vZW1vdGVzL2Vtb3RlbWVudVwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRW1vdGVBdXRvY2Fwc30gZnJvbSBcIi4vZW1vdGVzL2Vtb3RlYXV0b2NhcHNcIjtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDb3B5U2VsZWN0b3J9IGZyb20gXCIuL2RldmVsb3Blci9jb3B5c2VsZWN0b3JcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIERlYnVnZ2VyfSBmcm9tIFwiLi9kZXZlbG9wZXIvZGVidWdnZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFJlYWN0RGV2VG9vbHN9IGZyb20gXCIuL2RldmVsb3Blci9yZWFjdGRldnRvb2xzXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/builtins.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _customcss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./customcss */ \"./src/builtins/customcss.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomCSS\", function() { return _customcss__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _windowprefs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./windowprefs */ \"./src/builtins/windowprefs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowPrefs\", function() { return _windowprefs__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _general_24hour__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./general/24hour */ \"./src/builtins/general/24hour.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TwentyFourHour\", function() { return _general_24hour__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _general_classnormalizer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./general/classnormalizer */ \"./src/builtins/general/classnormalizer.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ClassNormalizer\", function() { return _general_classnormalizer__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _general_publicservers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./general/publicservers */ \"./src/builtins/general/publicservers.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PublicServers\", function() { return _general_publicservers__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _general_voicedisconnect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./general/voicedisconnect */ \"./src/builtins/general/voicedisconnect.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VoiceDisconnect\", function() { return _general_voicedisconnect__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _appearance_coloredtext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./appearance/coloredtext */ \"./src/builtins/appearance/coloredtext.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ColoredText\", function() { return _appearance_coloredtext__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _appearance_darkmode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./appearance/darkmode */ \"./src/builtins/appearance/darkmode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DarkMode\", function() { return _appearance_darkmode__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _appearance_minimalmode__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./appearance/minimalmode */ \"./src/builtins/appearance/minimalmode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MinimalMode\", function() { return _appearance_minimalmode__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _appearance_voicemode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./appearance/voicemode */ \"./src/builtins/appearance/voicemode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VoiceMode\", function() { return _appearance_voicemode__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _emotes_emotes__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./emotes/emotes */ \"./src/builtins/emotes/emotes.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteModule\", function() { return _emotes_emotes__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _emotes_emotemenu__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./emotes/emotemenu */ \"./src/builtins/emotes/emotemenu.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteMenu\", function() { return _emotes_emotemenu__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _developer_copyselector__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./developer/copyselector */ \"./src/builtins/developer/copyselector.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CopySelector\", function() { return _developer_copyselector__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _developer_debugger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./developer/debugger */ \"./src/builtins/developer/debugger.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Debugger\", function() { return _developer_debugger__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _developer_reactdevtools__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./developer/reactdevtools */ \"./src/builtins/developer/reactdevtools.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReactDevTools\", function() { return _developer_reactdevtools__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n// Export these two first because they add settings/panels\n\n\n\n\n\n\n\n\n\n\n\n // export {default as EmoteAutocaps} from \"./emotes/emoteautocaps\";\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2J1aWx0aW5zLmpzPzU5YTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Q0FFQTs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2J1aWx0aW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhwb3J0IHRoZXNlIHR3byBmaXJzdCBiZWNhdXNlIHRoZXkgYWRkIHNldHRpbmdzL3BhbmVsc1xyXG5cclxuZXhwb3J0IHtkZWZhdWx0IGFzIEN1c3RvbUNTU30gZnJvbSBcIi4vY3VzdG9tY3NzXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBXaW5kb3dQcmVmc30gZnJvbSBcIi4vd2luZG93cHJlZnNcIjtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBUd2VudHlGb3VySG91cn0gZnJvbSBcIi4vZ2VuZXJhbC8yNGhvdXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIENsYXNzTm9ybWFsaXplcn0gZnJvbSBcIi4vZ2VuZXJhbC9jbGFzc25vcm1hbGl6ZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFB1YmxpY1NlcnZlcnN9IGZyb20gXCIuL2dlbmVyYWwvcHVibGljc2VydmVyc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgVm9pY2VEaXNjb25uZWN0fSBmcm9tIFwiLi9nZW5lcmFsL3ZvaWNlZGlzY29ubmVjdFwiO1xyXG5cclxuZXhwb3J0IHtkZWZhdWx0IGFzIENvbG9yZWRUZXh0fSBmcm9tIFwiLi9hcHBlYXJhbmNlL2NvbG9yZWR0ZXh0XCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBEYXJrTW9kZX0gZnJvbSBcIi4vYXBwZWFyYW5jZS9kYXJrbW9kZVwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgTWluaW1hbE1vZGV9IGZyb20gXCIuL2FwcGVhcmFuY2UvbWluaW1hbG1vZGVcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFZvaWNlTW9kZX0gZnJvbSBcIi4vYXBwZWFyYW5jZS92b2ljZW1vZGVcIjtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBFbW90ZU1vZHVsZX0gZnJvbSBcIi4vZW1vdGVzL2Vtb3Rlc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRW1vdGVNZW51fSBmcm9tIFwiLi9lbW90ZXMvZW1vdGVtZW51XCI7XHJcbi8vIGV4cG9ydCB7ZGVmYXVsdCBhcyBFbW90ZUF1dG9jYXBzfSBmcm9tIFwiLi9lbW90ZXMvZW1vdGVhdXRvY2Fwc1wiO1xyXG5cclxuZXhwb3J0IHtkZWZhdWx0IGFzIENvcHlTZWxlY3Rvcn0gZnJvbSBcIi4vZGV2ZWxvcGVyL2NvcHlzZWxlY3RvclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRGVidWdnZXJ9IGZyb20gXCIuL2RldmVsb3Blci9kZWJ1Z2dlclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgUmVhY3REZXZUb29sc30gZnJvbSBcIi4vZGV2ZWxvcGVyL3JlYWN0ZGV2dG9vbHNcIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/builtins.js\n"); /***/ }), @@ -195,18 +195,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ }), -/***/ "./src/builtins/emotes/emoteautocaps.js": -/*!**********************************************!*\ - !*** ./src/builtins/emotes/emoteautocaps.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes/emotes.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteAutocaps extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteAutocapitalize\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"autoCaps\";\n }\n\n enabled() {\n $(\"body\").off(\".bdac\");\n $(\"body\").on(\"keyup.bdac change.bdac paste.bdac\", $(\".channelTextArea-1LDbYG textarea:first\"), () => {\n const text = $(\".channelTextArea-1LDbYG textarea:first\").val();\n if (text == undefined) return;\n const lastWord = text.split(\" \").pop();\n\n if (lastWord.length > 3) {\n if (lastWord == \"danSgame\") return;\n const ret = this.capitalize(lastWord.toLowerCase());\n\n if (ret !== null && ret !== undefined) {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea()[0], text.replace(lastWord, ret));\n }\n }\n });\n }\n\n disabled() {\n $(\"body\").off(\".bdac\");\n }\n\n capitalize(value) {\n const res = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\");\n\n for (const p in res) {\n if (res.hasOwnProperty(p) && value == (p + \"\").toLowerCase()) {\n return p;\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy9lbW90ZWF1dG9jYXBzLmpzPzkwMWQiXSwibmFtZXMiOlsiRW1vdGVBdXRvY2FwcyIsIkJ1aWx0aW4iLCJuYW1lIiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJlbmFibGVkIiwiJCIsIm9mZiIsIm9uIiwidGV4dCIsInZhbCIsInVuZGVmaW5lZCIsImxhc3RXb3JkIiwic3BsaXQiLCJwb3AiLCJsZW5ndGgiLCJyZXQiLCJjYXBpdGFsaXplIiwidG9Mb3dlckNhc2UiLCJVdGlsaXRpZXMiLCJpbnNlcnRUZXh0IiwiZ2V0VGV4dEFyZWEiLCJyZXBsYWNlIiwiZGlzYWJsZWQiLCJ2YWx1ZSIsInJlcyIsIkVtb3RlTW9kdWxlIiwiZ2V0Q2F0ZWdvcnkiLCJwIiwiaGFzT3duUHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBRWUsbUVBQUksTUFBTUEsYUFBTixTQUE0QkMsd0RBQTVCLENBQW9DO0FBQ25ELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8scUJBQVA7QUFBOEI7O0FBQzFDLE1BQUlDLFVBQUosR0FBaUI7QUFBQyxXQUFPLFFBQVA7QUFBaUI7O0FBQ25DLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sU0FBUDtBQUFrQjs7QUFDbEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxVQUFQO0FBQW1COztBQUU3QkMsU0FBTyxHQUFHO0FBQ05DLEtBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUMsR0FBVixDQUFjLE9BQWQ7QUFDQUQsS0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVRSxFQUFWLENBQWEsbUNBQWIsRUFBa0RGLENBQUMsQ0FBQyx3Q0FBRCxDQUFuRCxFQUErRixNQUFNO0FBQ2pHLFlBQU1HLElBQUksR0FBR0gsQ0FBQyxDQUFDLHdDQUFELENBQUQsQ0FBNENJLEdBQTVDLEVBQWI7QUFDQSxVQUFJRCxJQUFJLElBQUlFLFNBQVosRUFBdUI7QUFFdkIsWUFBTUMsUUFBUSxHQUFHSCxJQUFJLENBQUNJLEtBQUwsQ0FBVyxHQUFYLEVBQWdCQyxHQUFoQixFQUFqQjs7QUFDQSxVQUFJRixRQUFRLENBQUNHLE1BQVQsR0FBa0IsQ0FBdEIsRUFBeUI7QUFDckIsWUFBSUgsUUFBUSxJQUFJLFVBQWhCLEVBQTRCO0FBQzVCLGNBQU1JLEdBQUcsR0FBRyxLQUFLQyxVQUFMLENBQWdCTCxRQUFRLENBQUNNLFdBQVQsRUFBaEIsQ0FBWjs7QUFDQSxZQUFJRixHQUFHLEtBQUssSUFBUixJQUFnQkEsR0FBRyxLQUFLTCxTQUE1QixFQUF1QztBQUNuQ1EsMkRBQVMsQ0FBQ0MsVUFBVixDQUFxQkQsaURBQVMsQ0FBQ0UsV0FBVixHQUF3QixDQUF4QixDQUFyQixFQUFpRFosSUFBSSxDQUFDYSxPQUFMLENBQWFWLFFBQWIsRUFBdUJJLEdBQXZCLENBQWpEO0FBQ0g7QUFDSjtBQUNKLEtBWkQ7QUFhSDs7QUFFRE8sVUFBUSxHQUFHO0FBQ1BqQixLQUFDLENBQUMsTUFBRCxDQUFELENBQVVDLEdBQVYsQ0FBYyxPQUFkO0FBQ0g7O0FBRURVLFlBQVUsQ0FBQ08sS0FBRCxFQUFRO0FBQ2QsVUFBTUMsR0FBRyxHQUFHQywrQ0FBVyxDQUFDQyxXQUFaLENBQXdCLGNBQXhCLENBQVo7O0FBQ0EsU0FBSyxNQUFNQyxDQUFYLElBQWdCSCxHQUFoQixFQUFxQjtBQUNqQixVQUFJQSxHQUFHLENBQUNJLGNBQUosQ0FBbUJELENBQW5CLEtBQXlCSixLQUFLLElBQUksQ0FBQ0ksQ0FBQyxHQUFHLEVBQUwsRUFBU1YsV0FBVCxFQUF0QyxFQUE4RDtBQUMxRCxlQUFPVSxDQUFQO0FBQ0g7QUFDSjtBQUNKOztBQWxDa0QsQ0FBeEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9lbW90ZXMvZW1vdGVhdXRvY2Fwcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmltcG9ydCB7VXRpbGl0aWVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlQXV0b2NhcHMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkVtb3RlQXV0b2NhcGl0YWxpemVcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJhdXRvQ2Fwc1wiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgICQoXCJib2R5XCIpLm9mZihcIi5iZGFjXCIpO1xyXG4gICAgICAgICQoXCJib2R5XCIpLm9uKFwia2V5dXAuYmRhYyBjaGFuZ2UuYmRhYyBwYXN0ZS5iZGFjXCIsICQoXCIuY2hhbm5lbFRleHRBcmVhLTFMRGJZRyB0ZXh0YXJlYTpmaXJzdFwiKSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gJChcIi5jaGFubmVsVGV4dEFyZWEtMUxEYllHIHRleHRhcmVhOmZpcnN0XCIpLnZhbCgpO1xyXG4gICAgICAgICAgICBpZiAodGV4dCA9PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RXb3JkID0gdGV4dC5zcGxpdChcIiBcIikucG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChsYXN0V29yZC5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFdvcmQgPT0gXCJkYW5TZ2FtZVwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLmNhcGl0YWxpemUobGFzdFdvcmQudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0ICE9PSBudWxsICYmIHJldCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbGl0aWVzLmluc2VydFRleHQoVXRpbGl0aWVzLmdldFRleHRBcmVhKClbMF0sIHRleHQucmVwbGFjZShsYXN0V29yZCwgcmV0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICAkKFwiYm9keVwiKS5vZmYoXCIuYmRhY1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBjYXBpdGFsaXplKHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gRW1vdGVNb2R1bGUuZ2V0Q2F0ZWdvcnkoXCJUd2l0Y2hHbG9iYWxcIik7XHJcbiAgICAgICAgZm9yIChjb25zdCBwIGluIHJlcykge1xyXG4gICAgICAgICAgICBpZiAocmVzLmhhc093blByb3BlcnR5KHApICYmIHZhbHVlID09IChwICsgXCJcIikudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes/emoteautocaps.js\n"); - -/***/ }), - /***/ "./src/builtins/emotes/emotemenu.js": /*!******************************************!*\ !*** ./src/builtins/emotes/emotemenu.js ***! @@ -215,7 +203,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes/emotes.js\");\n\n\n\nconst headerHTML = `
\n \n \n
`;\nconst twitchEmoteHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\nconst favoritesHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\n\nconst makeEmote = (emote, url, options = {}) => {\n const {\n onContextMenu,\n onClick\n } = options;\n const emoteContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(`
\n \"${emote}\"\n
`);\n if (onContextMenu) emoteContainer.addEventListener(\"contextmenu\", onContextMenu);\n emoteContainer.addEventListener(\"click\", onClick);\n return emoteContainer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteMenu\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emoteMenu\";\n }\n\n get hideEmojisID() {\n return \"hideEmojiMenu\";\n }\n\n get hideEmojis() {\n return this.get(this.hideEmojisID);\n }\n\n constructor() {\n super();\n this.lastTab = \"bd-qem-emojis\";\n this.qmeHeader = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(headerHTML);\n\n for (const button of this.qmeHeader.getElementsByTagName(\"button\")) button.addEventListener(\"click\", this.switchMenu.bind(this));\n\n this.teContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(twitchEmoteHTML);\n this.teContainerInner = this.teContainer.querySelector(\".emote-menu-inner\");\n this.faContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(favoritesHTML);\n this.faContainerInner = this.faContainer.querySelector(\".emote-menu-inner\");\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) this.observe(mutation);\n });\n this.enableHideEmojis = this.enableHideEmojis.bind(this);\n this.disableHideEmojis = this.disableHideEmojis.bind(this);\n this.updateTwitchEmotes = this.updateTwitchEmotes.bind(this);\n }\n\n async enabled() {\n this.log(\"Starting to observe\");\n this.observer.observe(document.getElementById(\"app-mount\"), {\n childList: true,\n subtree: true\n });\n this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis);\n if (this.hideEmojis) this.enableHideEmojis();\n if (_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].emotesLoaded) this.updateTwitchEmotes();\n this.updateFavorites();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].on(\"emotes-loaded\", this.updateTwitchEmotes);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].off(\"emotes-loaded\", this.updateTwitchEmotes);\n this.observer.disconnect();\n this.disableHideEmojis();\n if (this.hideEmojiCancel) this.hideEmojiCancel();\n }\n\n enableHideEmojis() {\n const picker = document.querySelector(\".emojiPicker-3m1S-j\");\n if (picker) picker.classList.add(\"bd-qme-hidden\");\n }\n\n disableHideEmojis() {\n const picker = document.querySelector(\".emojiPicker-3m1S-j\");\n if (picker) picker.classList.remove(\"bd-qme-hidden\");\n }\n\n insertEmote(emote) {\n const ta = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(ta[0], ta.val().slice(-1) == \" \" ? ta.val() + emote : ta.val() + \" \" + emote);\n }\n\n favContext(e) {\n e.stopPropagation();\n const em = e.target.closest(\".emote-container\").children[0];\n const menu = $(`
Remove
`);\n menu.css({\n top: e.pageY - $(\"#bd-qem-favourite-container\").offset().top,\n left: e.pageX - $(\"#bd-qem-favourite-container\").offset().left\n });\n $(em).parent().append(menu);\n menu.on(\"click\", event => {\n event.preventDefault();\n event.stopPropagation();\n $(em).remove();\n _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].removeFavorite($(em).attr(\"title\"));\n this.updateFavorites();\n $(document).off(\"mousedown.emotemenu\");\n });\n $(document).on(\"mousedown.emotemenu\", function (event) {\n if (event.target.id == \"removemenu\") return;\n $(\"#removemenu\").remove();\n $(document).off(\"mousedown.emotemenu\");\n });\n }\n\n switchMenu(e) {\n let id = typeof e == \"string\" ? e : e.target.id;\n if (id == \"bd-qem-emojis\" && this.hideEmojis) id = \"bd-qem-favourite\";\n const twitch = $(\"#bd-qem-twitch\");\n const fav = $(\"#bd-qem-favourite\");\n const emojis = $(\"#bd-qem-emojis\");\n twitch.removeClass(\"active\");\n fav.removeClass(\"active\");\n emojis.removeClass(\"active\");\n $(\".emojiPicker-3m1S-j\").hide();\n $(\"#bd-qem-favourite-container\").hide();\n $(\"#bd-qem-twitch-container\").hide();\n\n switch (id) {\n case \"bd-qem-twitch\":\n twitch.addClass(\"active\");\n $(\"#bd-qem-twitch-container\").show();\n break;\n\n case \"bd-qem-favourite\":\n fav.addClass(\"active\");\n $(\"#bd-qem-favourite-container\").show();\n break;\n\n case \"bd-qem-emojis\":\n emojis.addClass(\"active\");\n $(\".emojiPicker-3m1S-j\").show();\n $(\".emojiPicker-3m1S-j input\").focus();\n break;\n }\n\n if (id) this.lastTab = id;\n }\n\n observe(mutation) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return;\n const node = mutation.addedNodes[0]; // if (!node.classList.contains(\"popout-2iWAc-\") || node.classList.contains(\"popoutLeft-30WmrD\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length) return;\n\n if (!node.classList.contains(\"layer-v9HyYc\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length || node.querySelector(\".emojiPicker-3m1S-j\").parentElement.classList.contains(\"animatorLeft-1EQxU0\")) return;\n const e = $(node);\n if (this.hideEmojis) e.addClass(\"bd-qme-hidden\");else e.removeClass(\"bd-qme-hidden\");\n e.prepend(this.qmeHeader);\n e.append(this.teContainer);\n e.append(this.faContainer);\n this.switchMenu(this.lastTab);\n }\n\n updateTwitchEmotes() {\n while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\")) {\n if (!_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\").hasOwnProperty(emote)) continue;\n const url = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getUrl(\"TwitchGlobal\", emote);\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote)\n });\n this.teContainerInner.append(emoteElement);\n }\n }\n\n updateFavorites() {\n while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].favorites) {\n const url = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].favorites[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote),\n onContextMenu: this.favContext.bind(this)\n });\n this.faContainerInner.append(emoteElement);\n }\n\n _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].saveFavorites();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy9lbW90ZW1lbnUuanM/ZjIyZSJdLCJuYW1lcyI6WyJoZWFkZXJIVE1MIiwidHdpdGNoRW1vdGVIVE1MIiwiZmF2b3JpdGVzSFRNTCIsIm1ha2VFbW90ZSIsImVtb3RlIiwidXJsIiwib3B0aW9ucyIsIm9uQ29udGV4dE1lbnUiLCJvbkNsaWNrIiwiZW1vdGVDb250YWluZXIiLCJVdGlsaXRpZXMiLCJwYXJzZUhUTUwiLCJhZGRFdmVudExpc3RlbmVyIiwiRW1vdGVNZW51IiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImhpZGVFbW9qaXNJRCIsImhpZGVFbW9qaXMiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImxhc3RUYWIiLCJxbWVIZWFkZXIiLCJidXR0b24iLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN3aXRjaE1lbnUiLCJiaW5kIiwidGVDb250YWluZXIiLCJ0ZUNvbnRhaW5lcklubmVyIiwicXVlcnlTZWxlY3RvciIsImZhQ29udGFpbmVyIiwiZmFDb250YWluZXJJbm5lciIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm11dGF0aW9uIiwib2JzZXJ2ZSIsImVuYWJsZUhpZGVFbW9qaXMiLCJkaXNhYmxlSGlkZUVtb2ppcyIsInVwZGF0ZVR3aXRjaEVtb3RlcyIsImVuYWJsZWQiLCJsb2ciLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImhpZGVFbW9qaUNhbmNlbCIsInJlZ2lzdGVyU2V0dGluZyIsIkVtb3RlTW9kdWxlIiwiZW1vdGVzTG9hZGVkIiwidXBkYXRlRmF2b3JpdGVzIiwiRXZlbnRzIiwib24iLCJkaXNhYmxlZCIsIm9mZiIsImRpc2Nvbm5lY3QiLCJwaWNrZXIiLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiLCJpbnNlcnRFbW90ZSIsInRhIiwiZ2V0VGV4dEFyZWEiLCJpbnNlcnRUZXh0IiwidmFsIiwic2xpY2UiLCJmYXZDb250ZXh0IiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImVtIiwidGFyZ2V0IiwiY2xvc2VzdCIsImNoaWxkcmVuIiwibWVudSIsIiQiLCJjc3MiLCJ0b3AiLCJwYWdlWSIsIm9mZnNldCIsImxlZnQiLCJwYWdlWCIsInBhcmVudCIsImFwcGVuZCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJyZW1vdmVGYXZvcml0ZSIsImF0dHIiLCJ0d2l0Y2giLCJmYXYiLCJlbW9qaXMiLCJyZW1vdmVDbGFzcyIsImhpZGUiLCJhZGRDbGFzcyIsInNob3ciLCJmb2N1cyIsImFkZGVkTm9kZXMiLCJsZW5ndGgiLCJFbGVtZW50Iiwibm9kZSIsImNvbnRhaW5zIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInBhcmVudEVsZW1lbnQiLCJwcmVwZW5kIiwiZmlyc3RDaGlsZCIsImdldENhdGVnb3J5IiwiaGFzT3duUHJvcGVydHkiLCJnZXRVcmwiLCJlbW90ZUVsZW1lbnQiLCJmYXZvcml0ZXMiLCJzYXZlRmF2b3JpdGVzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBLE1BQU1BLFVBQVUsR0FBSTs7OztPQUFwQjtBQU1BLE1BQU1DLGVBQWUsR0FBSTs7Ozs7Ozs7T0FBekI7QUFVQSxNQUFNQyxhQUFhLEdBQUk7Ozs7Ozs7O09BQXZCOztBQVVBLE1BQU1DLFNBQVMsR0FBRyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYUMsT0FBTyxHQUFHLEVBQXZCLEtBQThCO0FBQzVDLFFBQU07QUFBQ0MsaUJBQUQ7QUFBZ0JDO0FBQWhCLE1BQTJCRixPQUFqQztBQUNBLFFBQU1HLGNBQWMsR0FBR0MsaURBQVMsQ0FBQ0MsU0FBVixDQUFxQjt1Q0FDVFAsS0FBTSxVQUFTQyxHQUFJLFlBQVdELEtBQU07V0FEaEQsQ0FBdkI7QUFHQSxNQUFJRyxhQUFKLEVBQW1CRSxjQUFjLENBQUNHLGdCQUFmLENBQWdDLGFB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QyxHQUFHLEdBQUc2QywrQ0FBVyxDQUFDMEQsTUFBWixDQUFtQixjQUFuQixFQUFtQ3hHLEtBQW5DLENBQVo7QUFDQSxZQUFNeUcsWUFBWSxHQUFHMUcsU0FBUyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYTtBQUFDRyxlQUFPLEVBQUUsS0FBS3NELFdBQUwsQ0FBaUJsQyxJQUFqQixDQUFzQixJQUF0QixFQUE0QnhCLEtBQTVCO0FBQVYsT0FBYixDQUE5QjtBQUNBLFdBQUswQixnQkFBTCxDQUFzQnNELE1BQXRCLENBQTZCeUIsWUFBN0I7QUFDSDtBQUNKOztBQUVEekQsaUJBQWUsR0FBRztBQUNkLFdBQU8sS0FBS25CLGdCQUFMLENBQXNCd0UsVUFBN0IsRUFBeUMsS0FBS3hFLGdCQUFMLENBQXNCd0UsVUFBdEIsQ0FBaUM1QyxNQUFqQzs7QUFDekMsU0FBSyxNQUFNekQsS0FBWCxJQUFvQjhDLCtDQUFXLENBQUM0RCxTQUFoQyxFQUEyQztBQUN2QyxZQUFNekcsR0FBRyxHQUFHNkMsK0NBQVcsQ0FBQzRELFNBQVosQ0FBc0IxRyxLQUF0QixDQUFaO0FBQ0EsWUFBTXlHLFlBQVksR0FBRzFHLFNBQVMsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWE7QUFBQ0csZUFBTyxFQUFFLEtBQUtzRCxXQUFMLENBQWlCbEMsSUFBakIsQ0FBc0IsSUFBdEIsRUFBNEJ4QixLQUE1QixDQUFWO0FBQThDRyxxQkFBYSxFQUFFLEtBQUs2RCxVQUFMLENBQWdCeEMsSUFBaEIsQ0FBcUIsSUFBckI7QUFBN0QsT0FBYixDQUE5QjtBQUNBLFdBQUtLLGdCQUFMLENBQXNCbUQsTUFBdEIsQ0FBNkJ5QixZQUE3QjtBQUNIOztBQUNEM0QsbURBQVcsQ0FBQzZELGFBQVo7QUFDSDs7QUF6SjhDLENBQXBDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZW1vdGVzL2Vtb3RlbWVudS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtVdGlsaXRpZXMsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuXHJcbmNvbnN0IGhlYWRlckhUTUwgPSBgPGRpdiBpZD1cImJkLXFlbVwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImFjdGl2ZVwiIGlkPVwiYmQtcWVtLXR3aXRjaFwiPlR3aXRjaDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImJkLXFlbS1mYXZvdXJpdGVcIj5GYXZvdXJpdGU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJiZC1xZW0tZW1vamlzXCI+RW1vamlzPC9idXR0b25kPlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgdHdpdGNoRW1vdGVIVE1MID0gYDxkaXYgaWQ9XCJiZC1xZW0tdHdpdGNoLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJXcmFwLTJsSkVrZCBmYWRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyIHNjcm9sbGVyLTJGS0ZQR1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vdGUtbWVudS1pbm5lclwiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IGZhdm9yaXRlc0hUTUwgPSBgPGRpdiBpZD1cImJkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBzY3JvbGxlcldyYXAtMmxKRWtkIGZhZGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXIgc2Nyb2xsZXItMkZLRlBHXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW90ZS1tZW51LWlubmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgbWFrZUVtb3RlID0gKGVtb3RlLCB1cmwsIG9wdGlvbnMgPSB7fSkgPT4ge1xyXG4gICAgY29uc3Qge29uQ29udGV4dE1lbnUsIG9uQ2xpY2t9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IGVtb3RlQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTChgPGRpdiBjbGFzcz1cImVtb3RlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJlbW90ZS1pY29uXCIgYWx0PVwiJHtlbW90ZX1cIiBzcmM9XCIke3VybH1cIiB0aXRsZT1cIiR7ZW1vdGV9XCI+XHJcbiAgICA8L2Rpdj5gKTtcclxuICAgIGlmIChvbkNvbnRleHRNZW51KSBlbW90ZUNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgb25Db250ZXh0TWVudSk7XHJcbiAgICBlbW90ZUNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljayk7XHJcbiAgICByZXR1cm4gZW1vdGVDb250YWluZXI7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vdGVNZW51IGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZU1lbnVcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJlbW90ZU1lbnVcIjt9XHJcbiAgICBnZXQgaGlkZUVtb2ppc0lEKCkge3JldHVybiBcImhpZGVFbW9qaU1lbnVcIjt9XHJcbiAgICBnZXQgaGlkZUVtb2ppcygpIHtyZXR1cm4gdGhpcy5nZXQodGhpcy5oaWRlRW1vamlzSUQpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubGFzdFRhYiA9IFwiYmQtcWVtLWVtb2ppc1wiO1xyXG5cclxuICAgICAgICB0aGlzLnFtZUhlYWRlciA9IFV0aWxpdGllcy5wYXJzZUhUTUwoaGVhZGVySFRNTCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdGhpcy5xbWVIZWFkZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIikpIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5zd2l0Y2hNZW51LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLnRlQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTCh0d2l0Y2hFbW90ZUhUTUwpO1xyXG4gICAgICAgIHRoaXMudGVDb250YWluZXJJbm5lciA9IHRoaXMudGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbW90ZS1tZW51LWlubmVyXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTChmYXZvcml0ZXNIVE1MKTtcclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVySW5uZXIgPSB0aGlzLmZhQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vdGUtbWVudS1pbm5lclwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHRoaXMub2JzZXJ2ZShtdXRhdGlvbik7fSk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVIaWRlRW1vamlzID0gdGhpcy5lbmFibGVIaWRlRW1vamlzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcyA9IHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVR3aXRjaEVtb3RlcyA9IHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICB0aGlzLmxvZyhcIlN0YXJ0aW5nIHRvIG9ic2VydmVcIik7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwLW1vdW50XCIpLCB7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGlkZUVtb2ppQ2FuY2VsID0gdGhpcy5yZWdpc3RlclNldHRpbmcodGhpcy5oaWRlRW1vamlzSUQsIHRoaXMuZW5hYmxlSGlkZUVtb2ppcywgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppcykgdGhpcy5lbmFibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgaWYgKEVtb3RlTW9kdWxlLmVtb3Rlc0xvYWRlZCkgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcImVtb3Rlcy1sb2FkZWRcIiwgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIEV2ZW50cy5vZmYoXCJlbW90ZXMtbG9hZGVkXCIsIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppQ2FuY2VsKSB0aGlzLmhpZGVFbW9qaUNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZUhpZGVFbW9qaXMoKSB7XHJcbiAgICAgICAgY29uc3QgcGlja2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIik7XHJcbiAgICAgICAgaWYgKHBpY2tlcikgcGlja2VyLmNsYXNzTGlzdC5hZGQoXCJiZC1xbWUtaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVIaWRlRW1vamlzKCkge1xyXG4gICAgICAgIGNvbnN0IHBpY2tlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpO1xyXG4gICAgICAgIGlmIChwaWNrZXIpIHBpY2tlci5jbGFzc0xpc3QucmVtb3ZlKFwiYmQtcW1lLWhpZGRlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRFbW90ZShlbW90ZSkge1xyXG4gICAgICAgIGNvbnN0IHRhID0gVXRpbGl0aWVzLmdldFRleHRBcmVhKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLmluc2VydFRleHQodGFbMF0sIHRhLnZhbCgpLnNsaWNlKC0xKSA9PSBcIiBcIiA/IHRhLnZhbCgpICsgZW1vdGUgOiB0YS52YWwoKSArIFwiIFwiICsgZW1vdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZhdkNvbnRleHQoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgZW0gPSBlLnRhcmdldC5jbG9zZXN0KFwiLmVtb3RlLWNvbnRhaW5lclwiKS5jaGlsZHJlblswXTtcclxuICAgICAgICBjb25zdCBtZW51ID0gJChgPGRpdiBpZD1cInJlbW92ZW1lbnVcIiBjbGFzcz1cImJkLWNvbnRleHQtbWVudSBjb250ZXh0LW1lbnUgdGhlbWUtZGFya1wiPlJlbW92ZTwvZGl2PmApO1xyXG4gICAgICAgIG1lbnUuY3NzKHtcclxuICAgICAgICAgICAgdG9wOiBlLnBhZ2VZIC0gJChcIiNiZC1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5vZmZzZXQoKS50b3AsXHJcbiAgICAgICAgICAgIGxlZnQ6IGUucGFnZVggLSAkKFwiI2JkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLm9mZnNldCgpLmxlZnRcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGVtKS5wYXJlbnQoKS5hcHBlbmQobWVudSk7XHJcbiAgICAgICAgbWVudS5vbihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgJChlbSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIEVtb3RlTW9kdWxlLnJlbW92ZUZhdm9yaXRlKCQoZW0pLmF0dHIoXCJ0aXRsZVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJtb3VzZWRvd24uZW1vdGVtZW51XCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuaWQgPT0gXCJyZW1vdmVtZW51XCIpIHJldHVybjtcclxuICAgICAgICAgICAgJChcIiNyZW1vdmVtZW51XCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJtb3VzZWRvd24uZW1vdGVtZW51XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaE1lbnUoZSkge1xyXG4gICAgICAgIGxldCBpZCA9IHR5cGVvZihlKSA9PSBcInN0cmluZ1wiID8gZSA6IGUudGFyZ2V0LmlkO1xyXG4gICAgICAgIGlmIChpZCA9PSBcImJkLXFlbS1lbW9qaXNcIiAmJiB0aGlzLmhpZGVFbW9qaXMpIGlkID0gXCJiZC1xZW0tZmF2b3VyaXRlXCI7XHJcbiAgICAgICAgY29uc3QgdHdpdGNoID0gJChcIiNiZC1xZW0tdHdpdGNoXCIpO1xyXG4gICAgICAgIGNvbnN0IGZhdiA9ICQoXCIjYmQtcWVtLWZhdm91cml0ZVwiKTtcclxuICAgICAgICBjb25zdCBlbW9qaXMgPSAkKFwiI2JkLXFlbS1lbW9qaXNcIik7XHJcbiAgICAgICAgdHdpdGNoLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGZhdi5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICBlbW9qaXMucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkLXFlbS10d2l0Y2gtY29udGFpbmVyXCIpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYmQtcWVtLXR3aXRjaFwiOlxyXG4gICAgICAgICAgICAgICAgdHdpdGNoLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNiZC1xZW0tdHdpdGNoLWNvbnRhaW5lclwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJkLXFlbS1mYXZvdXJpdGVcIjpcclxuICAgICAgICAgICAgICAgIGZhdi5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICQoXCIjYmQtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZC1xZW0tZW1vamlzXCI6XHJcbiAgICAgICAgICAgICAgICBlbW9qaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtaiBpbnB1dFwiKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCkgdGhpcy5sYXN0VGFiID0gaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb2JzZXJ2ZShtdXRhdGlvbikge1xyXG4gICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuICAgICAgICAvLyBpZiAoIW5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwicG9wb3V0LTJpV0FjLVwiKSB8fCBub2RlLmNsYXNzTGlzdC5jb250YWlucyhcInBvcG91dExlZnQtMzBXbXJEXCIpIHx8ICFub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFub2RlLmNsYXNzTGlzdC5jb250YWlucyhcImxheWVyLXY5SHlZY1wiKSB8fCAhbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCB8fCBub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYW5pbWF0b3JMZWZ0LTFFUXhVMFwiKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBlID0gJChub2RlKTtcclxuICAgICAgICBpZiAodGhpcy5oaWRlRW1vamlzKSBlLmFkZENsYXNzKFwiYmQtcW1lLWhpZGRlblwiKTtcclxuICAgICAgICBlbHNlIGUucmVtb3ZlQ2xhc3MoXCJiZC1xbWUtaGlkZGVuXCIpO1xyXG5cclxuICAgICAgICBlLnByZXBlbmQodGhpcy5xbWVIZWFkZXIpO1xyXG4gICAgICAgIGUuYXBwZW5kKHRoaXMudGVDb250YWluZXIpO1xyXG4gICAgICAgIGUuYXBwZW5kKHRoaXMuZmFDb250YWluZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnN3aXRjaE1lbnUodGhpcy5sYXN0VGFiKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVUd2l0Y2hFbW90ZXMoKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMudGVDb250YWluZXJJbm5lci5maXJzdENoaWxkKSB0aGlzLnRlQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZC5yZW1vdmUoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIEVtb3RlTW9kdWxlLmdldENhdGVnb3J5KFwiVHdpdGNoR2xvYmFsXCIpKSB7XHJcbiAgICAgICAgICAgIGlmICghRW1vdGVNb2R1bGUuZ2V0Q2F0ZWdvcnkoXCJUd2l0Y2hHbG9iYWxcIikuaGFzT3duUHJvcGVydHkoZW1vdGUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gRW1vdGVNb2R1bGUuZ2V0VXJsKFwiVHdpdGNoR2xvYmFsXCIsIGVtb3RlKTtcclxuICAgICAgICAgICAgY29uc3QgZW1vdGVFbGVtZW50ID0gbWFrZUVtb3RlKGVtb3RlLCB1cmwsIHtvbkNsaWNrOiB0aGlzLmluc2VydEVtb3RlLmJpbmQodGhpcywgZW1vdGUpfSk7XHJcbiAgICAgICAgICAgIHRoaXMudGVDb250YWluZXJJbm5lci5hcHBlbmQoZW1vdGVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRmF2b3JpdGVzKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmZhQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZCkgdGhpcy5mYUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbW90ZSBpbiBFbW90ZU1vZHVsZS5mYXZvcml0ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gRW1vdGVNb2R1bGUuZmF2b3JpdGVzW2Vtb3RlXTtcclxuICAgICAgICAgICAgY29uc3QgZW1vdGVFbGVtZW50ID0gbWFrZUVtb3RlKGVtb3RlLCB1cmwsIHtvbkNsaWNrOiB0aGlzLmluc2VydEVtb3RlLmJpbmQodGhpcywgZW1vdGUpLCBvbkNvbnRleHRNZW51OiB0aGlzLmZhdkNvbnRleHQuYmluZCh0aGlzKX0pO1xyXG4gICAgICAgICAgICB0aGlzLmZhQ29udGFpbmVySW5uZXIuYXBwZW5kKGVtb3RlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEVtb3RlTW9kdWxlLnNhdmVGYXZvcml0ZXMoKTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes/emotemenu.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes/emotes.js\");\n\n\n\n\nconst headerHTML = `
\n \n \n
`;\nconst twitchEmoteHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\nconst favoritesHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\n\nconst makeEmote = (emote, url, options = {}) => {\n const {\n onContextMenu,\n onClick\n } = options;\n const emoteContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
\n \"${emote}\"\n
`);\n if (onContextMenu) emoteContainer.addEventListener(\"contextmenu\", onContextMenu);\n emoteContainer.addEventListener(\"click\", onClick);\n return emoteContainer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteMenu\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emoteMenu\";\n }\n\n get hideEmojisID() {\n return \"hideEmojiMenu\";\n }\n\n get hideEmojis() {\n return this.get(this.hideEmojisID);\n }\n\n constructor() {\n super();\n this.lastTab = \"bd-qem-emojis\";\n this.qmeHeader = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(headerHTML);\n\n for (const button of this.qmeHeader.getElementsByTagName(\"button\")) button.addEventListener(\"click\", this.switchMenu.bind(this));\n\n this.teContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(twitchEmoteHTML);\n this.teContainerInner = this.teContainer.querySelector(\".emote-menu-inner\");\n this.faContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(favoritesHTML);\n this.faContainerInner = this.faContainer.querySelector(\".emote-menu-inner\");\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) this.observe(mutation);\n });\n this.enableHideEmojis = this.enableHideEmojis.bind(this);\n this.disableHideEmojis = this.disableHideEmojis.bind(this);\n this.updateTwitchEmotes = this.updateTwitchEmotes.bind(this);\n }\n\n async enabled() {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_2__[\"default\"].alert(\"Emote Menu Broken\", \"Emote Menu is currently broken, it is recommended to disable this until it is fixed.\"); // this.log(\"Starting to observe\");\n // this.observer.observe(document.getElementById(\"app-mount\"), {\n // childList: true,\n // subtree: true\n // });\n // this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis);\n // if (this.hideEmojis) this.enableHideEmojis();\n // if (EmoteModule.emotesLoaded) this.updateTwitchEmotes();\n // this.updateFavorites();\n // Events.on(\"emotes-loaded\", this.updateTwitchEmotes);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].off(\"emotes-loaded\", this.updateTwitchEmotes);\n this.observer.disconnect();\n this.disableHideEmojis();\n if (this.hideEmojiCancel) this.hideEmojiCancel();\n }\n\n enableHideEmojis() {\n const picker = document.querySelector(\".emojiPicker-3m1S-j\");\n if (picker) picker.classList.add(\"bd-qme-hidden\");\n }\n\n disableHideEmojis() {\n const picker = document.querySelector(\".emojiPicker-3m1S-j\");\n if (picker) picker.classList.remove(\"bd-qme-hidden\");\n }\n\n insertEmote(emote) {\n const ta = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(ta[0], ta.val().slice(-1) == \" \" ? ta.val() + emote : ta.val() + \" \" + emote);\n }\n\n favContext(e) {\n e.stopPropagation();\n const em = e.target.closest(\".emote-container\").children[0];\n const menu = $(`
Remove
`);\n menu.css({\n top: e.pageY - $(\"#bd-qem-favourite-container\").offset().top,\n left: e.pageX - $(\"#bd-qem-favourite-container\").offset().left\n });\n $(em).parent().append(menu);\n menu.on(\"click\", event => {\n event.preventDefault();\n event.stopPropagation();\n $(em).remove();\n _emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].removeFavorite($(em).attr(\"title\"));\n this.updateFavorites();\n $(document).off(\"mousedown.emotemenu\");\n });\n $(document).on(\"mousedown.emotemenu\", function (event) {\n if (event.target.id == \"removemenu\") return;\n $(\"#removemenu\").remove();\n $(document).off(\"mousedown.emotemenu\");\n });\n }\n\n switchMenu(e) {\n let id = typeof e == \"string\" ? e : e.target.id;\n if (id == \"bd-qem-emojis\" && this.hideEmojis) id = \"bd-qem-favourite\";\n const twitch = $(\"#bd-qem-twitch\");\n const fav = $(\"#bd-qem-favourite\");\n const emojis = $(\"#bd-qem-emojis\");\n twitch.removeClass(\"active\");\n fav.removeClass(\"active\");\n emojis.removeClass(\"active\");\n $(\".emojiPicker-3m1S-j\").hide();\n $(\"#bd-qem-favourite-container\").hide();\n $(\"#bd-qem-twitch-container\").hide();\n\n switch (id) {\n case \"bd-qem-twitch\":\n twitch.addClass(\"active\");\n $(\"#bd-qem-twitch-container\").show();\n break;\n\n case \"bd-qem-favourite\":\n fav.addClass(\"active\");\n $(\"#bd-qem-favourite-container\").show();\n break;\n\n case \"bd-qem-emojis\":\n emojis.addClass(\"active\");\n $(\".emojiPicker-3m1S-j\").show();\n $(\".emojiPicker-3m1S-j input\").focus();\n break;\n }\n\n if (id) this.lastTab = id;\n }\n\n observe(mutation) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return;\n const node = mutation.addedNodes[0]; // if (!node.classList.contains(\"popout-2iWAc-\") || node.classList.contains(\"popoutLeft-30WmrD\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length) return;\n\n if (!node.classList.contains(\"layer-v9HyYc\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length || node.querySelector(\".emojiPicker-3m1S-j\").parentElement.classList.contains(\"animatorLeft-1EQxU0\")) return;\n const e = $(node);\n if (this.hideEmojis) e.addClass(\"bd-qme-hidden\");else e.removeClass(\"bd-qme-hidden\");\n e.prepend(this.qmeHeader);\n e.append(this.teContainer);\n e.append(this.faContainer);\n this.switchMenu(this.lastTab);\n }\n\n updateTwitchEmotes() {\n while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCategory(\"TwitchGlobal\")) {\n if (!_emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCategory(\"TwitchGlobal\").hasOwnProperty(emote)) continue;\n const url = _emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getUrl(\"TwitchGlobal\", emote);\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote)\n });\n this.teContainerInner.append(emoteElement);\n }\n }\n\n updateFavorites() {\n while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].favorites) {\n const url = _emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].favorites[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote),\n onContextMenu: this.favContext.bind(this)\n });\n this.faContainerInner.append(emoteElement);\n }\n\n _emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].saveFavorites();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy9lbW90ZW1lbnUuanM/ZjIyZSJdLCJuYW1lcyI6WyJoZWFkZXJIVE1MIiwidHdpdGNoRW1vdGVIVE1MIiwiZmF2b3JpdGVzSFRNTCIsIm1ha2VFbW90ZSIsImVtb3RlIiwidXJsIiwib3B0aW9ucyIsIm9uQ29udGV4dE1lbnUiLCJvbkNsaWNrIiwiZW1vdGVDb250YWluZXIiLCJET00iLCJjcmVhdGVFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsIkVtb3RlTWVudSIsIkJ1aWx0aW4iLCJuYW1lIiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJoaWRlRW1vamlzSUQiLCJoaWRlRW1vamlzIiwiZ2V0IiwiY29uc3RydWN0b3IiLCJsYXN0VGFiIiwicW1lSGVhZGVyIiwiYnV0dG9uIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzd2l0Y2hNZW51IiwiYmluZCIsInRlQ29udGFpbmVyIiwidGVDb250YWluZXJJbm5lciIsInF1ZXJ5U2VsZWN0b3IiLCJmYUNvbnRhaW5lciIsImZhQ29udGFpbmVySW5uZXIiLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJtdXRhdGlvbiIsIm9ic2VydmUiLCJlbmFibGVIaWRlRW1vamlzIiwiZGlzYWJsZUhpZGVFbW9qaXMiLCJ1cGRhdGVUd2l0Y2hFbW90ZXMiLCJlbmFibGVkIiwiTW9kYWxzIiwiYWxlcnQiLCJkaXNhYmxlZCIsIkV2ZW50cyIsIm9mZiIsImRpc2Nvbm5lY3QiLCJoaWRlRW1vamlDYW5jZWwiLCJwaWNrZXIiLCJkb2N1bWVudCIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsImluc2VydEVtb3RlIiwidGEiLCJVdGlsaXRpZXMiLCJnZXRUZXh0QXJlYSIsImluc2VydFRleHQiLCJ2YWwiLCJzbGljZSIsImZhdkNvbnRleHQiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiZW0iLCJ0YXJnZXQiLCJjbG9zZXN0IiwiY2hpbGRyZW4iLCJtZW51IiwiJCIsImNzcyIsInRvcCIsInBhZ2VZIiwib2Zmc2V0IiwibGVmdCIsInBhZ2VYIiwicGFyZW50IiwiYXBwZW5kIiwib24iLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiRW1vdGVNb2R1bGUiLCJyZW1vdmVGYXZvcml0ZSIsImF0dHIiLCJ1cGRhdGVGYXZvcml0ZXMiLCJ0d2l0Y2giLCJmYXYiLCJlbW9qaXMiLCJyZW1vdmVDbGFzcyIsImhpZGUiLCJhZGRDbGFzcyIsInNob3ciLCJmb2N1cyIsImFkZGVkTm9kZXMiLCJsZW5ndGgiLCJFbGVtZW50Iiwibm9kZSIsImNvbnRhaW5zIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInBhcmVudEVsZW1lbnQiLCJwcmVwZW5kIiwiZmlyc3RDaGlsZCIsImdldENhdGVnb3J5IiwiaGFzT3duUHJvcGVydHkiLCJnZXRVcmwiLCJlbW90ZUVsZW1lbnQiLCJmYXZvcml0ZXMiLCJzYXZlRmF2b3JpdGVzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQSxNQUFNQSxVQUFVLEdBQUk7Ozs7T0FBcEI7QUFNQSxNQUFNQyxlQUFlLEdBQUk7Ozs7Ozs7O09BQXpCO0FBVUEsTUFBTUMsYUFBYSxHQUFJOzs7Ozs7OztPQUF2Qjs7QUFVQSxNQUFNQyxTQUFTLEdBQUcsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWFDLE9BQU8sR0FBRyxFQUF2QixLQUE4QjtBQUM1QyxRQUFNO0FBQUNDLGlCQUFEO0FBQWdCQztBQUFoQixNQUEyQkYsT0FBakM7QUFDQSxRQUFNRyxjQUFjLEdBQUdDLDJDQUFHLENBQUNDLGFBQUosQ0FBbUI7dUNBQ1BQLEtBQU0sVUFBU0MsR0FBSSxZQUFXRCxLQUFNO1dBRGhELENBQXZCO0FBR0EsTUFBSUcsYUFBSixFQUFtQkUsY0FBYyxDQUFDRyxnQkFBZixDQUFnQyxhQUFoQyxFQUErQ0wsYUFBL0M7QUFDbkJFLGdCQUFjLENBQUNHLGdCQUFm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cUUsVUFBdEIsQ0FBaUNoRCxNQUFqQzs7QUFDekMsU0FBSyxNQUFNbEQsS0FBWCxJQUFvQjhFLCtDQUFXLENBQUN5QixTQUFoQyxFQUEyQztBQUN2QyxZQUFNdEcsR0FBRyxHQUFHNkUsK0NBQVcsQ0FBQ3lCLFNBQVosQ0FBc0J2RyxLQUF0QixDQUFaO0FBQ0EsWUFBTXNHLFlBQVksR0FBR3ZHLFNBQVMsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWE7QUFBQ0csZUFBTyxFQUFFLEtBQUsrQyxXQUFMLENBQWlCM0IsSUFBakIsQ0FBc0IsSUFBdEIsRUFBNEJ4QixLQUE1QixDQUFWO0FBQThDRyxxQkFBYSxFQUFFLEtBQUt1RCxVQUFMLENBQWdCbEMsSUFBaEIsQ0FBcUIsSUFBckI7QUFBN0QsT0FBYixDQUE5QjtBQUNBLFdBQUtLLGdCQUFMLENBQXNCNkMsTUFBdEIsQ0FBNkI0QixZQUE3QjtBQUNIOztBQUNEeEIsbURBQVcsQ0FBQzBCLGFBQVo7QUFDSDs7QUExSjhDLENBQXBDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZW1vdGVzL2Vtb3RlbWVudS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtVdGlsaXRpZXMsIEV2ZW50cywgRE9NfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi8uLi91aS9tb2RhbHNcIjtcclxuXHJcbmltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuXHJcbmNvbnN0IGhlYWRlckhUTUwgPSBgPGRpdiBpZD1cImJkLXFlbVwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImFjdGl2ZVwiIGlkPVwiYmQtcWVtLXR3aXRjaFwiPlR3aXRjaDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImJkLXFlbS1mYXZvdXJpdGVcIj5GYXZvdXJpdGU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJiZC1xZW0tZW1vamlzXCI+RW1vamlzPC9idXR0b25kPlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgdHdpdGNoRW1vdGVIVE1MID0gYDxkaXYgaWQ9XCJiZC1xZW0tdHdpdGNoLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJXcmFwLTJsSkVrZCBmYWRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyIHNjcm9sbGVyLTJGS0ZQR1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vdGUtbWVudS1pbm5lclwiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IGZhdm9yaXRlc0hUTUwgPSBgPGRpdiBpZD1cImJkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBzY3JvbGxlcldyYXAtMmxKRWtkIGZhZGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXIgc2Nyb2xsZXItMkZLRlBHXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW90ZS1tZW51LWlubmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgbWFrZUVtb3RlID0gKGVtb3RlLCB1cmwsIG9wdGlvbnMgPSB7fSkgPT4ge1xyXG4gICAgY29uc3Qge29uQ29udGV4dE1lbnUsIG9uQ2xpY2t9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IGVtb3RlQ29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlbW90ZS1jb250YWluZXJcIj5cclxuICAgICAgICA8aW1nIGNsYXNzPVwiZW1vdGUtaWNvblwiIGFsdD1cIiR7ZW1vdGV9XCIgc3JjPVwiJHt1cmx9XCIgdGl0bGU9XCIke2Vtb3RlfVwiPlxyXG4gICAgPC9kaXY+YCk7XHJcbiAgICBpZiAob25Db250ZXh0TWVudSkgZW1vdGVDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIG9uQ29udGV4dE1lbnUpO1xyXG4gICAgZW1vdGVDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2spO1xyXG4gICAgcmV0dXJuIGVtb3RlQ29udGFpbmVyO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlTWVudSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRW1vdGVNZW51XCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwiZW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZW1vdGVNZW51XCI7fVxyXG4gICAgZ2V0IGhpZGVFbW9qaXNJRCgpIHtyZXR1cm4gXCJoaWRlRW1vamlNZW51XCI7fVxyXG4gICAgZ2V0IGhpZGVFbW9qaXMoKSB7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuaGlkZUVtb2ppc0lEKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxhc3RUYWIgPSBcImJkLXFlbS1lbW9qaXNcIjtcclxuXHJcbiAgICAgICAgdGhpcy5xbWVIZWFkZXIgPSBET00uY3JlYXRlRWxlbWVudChoZWFkZXJIVE1MKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiB0aGlzLnFtZUhlYWRlci5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKSkgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnN3aXRjaE1lbnUuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIHRoaXMudGVDb250YWluZXIgPSBET00uY3JlYXRlRWxlbWVudCh0d2l0Y2hFbW90ZUhUTUwpO1xyXG4gICAgICAgIHRoaXMudGVDb250YWluZXJJbm5lciA9IHRoaXMudGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbW90ZS1tZW51LWlubmVyXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoZmF2b3JpdGVzSFRNTCk7XHJcbiAgICAgICAgdGhpcy5mYUNvbnRhaW5lcklubmVyID0gdGhpcy5mYUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmVtb3RlLW1lbnUtaW5uZXJcIik7XHJcblxyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4ge2ZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB0aGlzLm9ic2VydmUobXV0YXRpb24pO30pO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlSGlkZUVtb2ppcyA9IHRoaXMuZW5hYmxlSGlkZUVtb2ppcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMgPSB0aGlzLmRpc2FibGVIaWRlRW1vamlzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMgPSB0aGlzLnVwZGF0ZVR3aXRjaEVtb3Rlcy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFscy5hbGVydChcIkVtb3RlIE1lbnUgQnJva2VuXCIsIFwiRW1vdGUgTWVudSBpcyBjdXJyZW50bHkgYnJva2VuLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkaXNhYmxlIHRoaXMgdW50aWwgaXQgaXMgZml4ZWQuXCIpO1xyXG4gICAgICAgIC8vIHRoaXMubG9nKFwiU3RhcnRpbmcgdG8gb2JzZXJ2ZVwiKTtcclxuICAgICAgICAvLyB0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHAtbW91bnRcIiksIHtcclxuICAgICAgICAvLyAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIC8vICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgLy8gdGhpcy5oaWRlRW1vamlDYW5jZWwgPSB0aGlzLnJlZ2lzdGVyU2V0dGluZyh0aGlzLmhpZGVFbW9qaXNJRCwgdGhpcy5lbmFibGVIaWRlRW1vamlzLCB0aGlzLmRpc2FibGVIaWRlRW1vamlzKTtcclxuICAgICAgICAvLyBpZiAodGhpcy5oaWRlRW1vamlzKSB0aGlzLmVuYWJsZUhpZGVFbW9qaXMoKTtcclxuICAgICAgICAvLyBpZiAoRW1vdGVNb2R1bGUuZW1vdGVzTG9hZGVkKSB0aGlzLnVwZGF0ZVR3aXRjaEVtb3RlcygpO1xyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICAgICAgLy8gRXZlbnRzLm9uKFwiZW1vdGVzLWxvYWRlZFwiLCB0aGlzLnVwZGF0ZVR3aXRjaEVtb3Rlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgRXZlbnRzLm9mZihcImVtb3Rlcy1sb2FkZWRcIiwgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMoKTtcclxuICAgICAgICBpZiAodGhpcy5oaWRlRW1vamlDYW5jZWwpIHRoaXMuaGlkZUVtb2ppQ2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlSGlkZUVtb2ppcygpIHtcclxuICAgICAgICBjb25zdCBwaWNrZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKTtcclxuICAgICAgICBpZiAocGlja2VyKSBwaWNrZXIuY2xhc3NMaXN0LmFkZChcImJkLXFtZS1oaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUhpZGVFbW9qaXMoKSB7XHJcbiAgICAgICAgY29uc3QgcGlja2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIik7XHJcbiAgICAgICAgaWYgKHBpY2tlcikgcGlja2VyLmNsYXNzTGlzdC5yZW1vdmUoXCJiZC1xbWUtaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGluc2VydEVtb3RlKGVtb3RlKSB7XHJcbiAgICAgICAgY29uc3QgdGEgPSBVdGlsaXRpZXMuZ2V0VGV4dEFyZWEoKTtcclxuICAgICAgICBVdGlsaXRpZXMuaW5zZXJ0VGV4dCh0YVswXSwgdGEudmFsKCkuc2xpY2UoLTEpID09IFwiIFwiID8gdGEudmFsKCkgKyBlbW90ZSA6IHRhLnZhbCgpICsgXCIgXCIgKyBlbW90ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmF2Q29udGV4dChlKSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCBlbSA9IGUudGFyZ2V0LmNsb3Nlc3QoXCIuZW1vdGUtY29udGFpbmVyXCIpLmNoaWxkcmVuWzBdO1xyXG4gICAgICAgIGNvbnN0IG1lbnUgPSAkKGA8ZGl2IGlkPVwicmVtb3ZlbWVudVwiIGNsYXNzPVwiYmQtY29udGV4dC1tZW51IGNvbnRleHQtbWVudSB0aGVtZS1kYXJrXCI+UmVtb3ZlPC9kaXY+YCk7XHJcbiAgICAgICAgbWVudS5jc3Moe1xyXG4gICAgICAgICAgICB0b3A6IGUucGFnZVkgLSAkKFwiI2JkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLm9mZnNldCgpLnRvcCxcclxuICAgICAgICAgICAgbGVmdDogZS5wYWdlWCAtICQoXCIjYmQtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikub2Zmc2V0KCkubGVmdFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoZW0pLnBhcmVudCgpLmFwcGVuZChtZW51KTtcclxuICAgICAgICBtZW51Lm9uKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAkKGVtKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgRW1vdGVNb2R1bGUucmVtb3ZlRmF2b3JpdGUoJChlbSkuYXR0cihcInRpdGxlXCIpKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXMoKTtcclxuICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwibW91c2Vkb3duLmVtb3RlbWVudVwiKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGRvY3VtZW50KS5vbihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5pZCA9PSBcInJlbW92ZW1lbnVcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAkKFwiI3JlbW92ZW1lbnVcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoTWVudShlKSB7XHJcbiAgICAgICAgbGV0IGlkID0gdHlwZW9mKGUpID09IFwic3RyaW5nXCIgPyBlIDogZS50YXJnZXQuaWQ7XHJcbiAgICAgICAgaWYgKGlkID09IFwiYmQtcWVtLWVtb2ppc1wiICYmIHRoaXMuaGlkZUVtb2ppcykgaWQgPSBcImJkLXFlbS1mYXZvdXJpdGVcIjtcclxuICAgICAgICBjb25zdCB0d2l0Y2ggPSAkKFwiI2JkLXFlbS10d2l0Y2hcIik7XHJcbiAgICAgICAgY29uc3QgZmF2ID0gJChcIiNiZC1xZW0tZmF2b3VyaXRlXCIpO1xyXG4gICAgICAgIGNvbnN0IGVtb2ppcyA9ICQoXCIjYmQtcWVtLWVtb2ppc1wiKTtcclxuICAgICAgICB0d2l0Y2gucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgZmF2LnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGVtb2ppcy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikuaGlkZSgpO1xyXG4gICAgICAgICQoXCIjYmQtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikuaGlkZSgpO1xyXG4gICAgICAgICQoXCIjYmQtcWVtLXR3aXRjaC1jb250YWluZXJcIikuaGlkZSgpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZC1xZW0tdHdpdGNoXCI6XHJcbiAgICAgICAgICAgICAgICB0d2l0Y2guYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2JkLXFlbS10d2l0Y2gtY29udGFpbmVyXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYmQtcWVtLWZhdm91cml0ZVwiOlxyXG4gICAgICAgICAgICAgICAgZmF2LmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNiZC1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJkLXFlbS1lbW9qaXNcIjpcclxuICAgICAgICAgICAgICAgIGVtb2ppcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qIGlucHV0XCIpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkKSB0aGlzLmxhc3RUYWIgPSBpZDtcclxuICAgIH1cclxuXHJcbiAgICBvYnNlcnZlKG11dGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xyXG4gICAgICAgIC8vIGlmICghbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJwb3BvdXQtMmlXQWMtXCIpIHx8IG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwicG9wb3V0TGVmdC0zMFdtckRcIikgfHwgIW5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImVtb2ppUGlja2VyLTNtMVMtalwiKS5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICBpZiAoIW5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwibGF5ZXItdjlIeVljXCIpIHx8ICFub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoIHx8IG5vZGUucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhbmltYXRvckxlZnQtMUVReFUwXCIpKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGUgPSAkKG5vZGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVFbW9qaXMpIGUuYWRkQ2xhc3MoXCJiZC1xbWUtaGlkZGVuXCIpO1xyXG4gICAgICAgIGVsc2UgZS5yZW1vdmVDbGFzcyhcImJkLXFtZS1oaWRkZW5cIik7XHJcblxyXG4gICAgICAgIGUucHJlcGVuZCh0aGlzLnFtZUhlYWRlcik7XHJcbiAgICAgICAgZS5hcHBlbmQodGhpcy50ZUNvbnRhaW5lcik7XHJcbiAgICAgICAgZS5hcHBlbmQodGhpcy5mYUNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIHRoaXMuc3dpdGNoTWVudSh0aGlzLmxhc3RUYWIpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVR3aXRjaEVtb3RlcygpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy50ZUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQpIHRoaXMudGVDb250YWluZXJJbm5lci5maXJzdENoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gRW1vdGVNb2R1bGUuZ2V0Q2F0ZWdvcnkoXCJUd2l0Y2hHbG9iYWxcIikpIHtcclxuICAgICAgICAgICAgaWYgKCFFbW90ZU1vZHVsZS5nZXRDYXRlZ29yeShcIlR3aXRjaEdsb2JhbFwiKS5oYXNPd25Qcm9wZXJ0eShlbW90ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBFbW90ZU1vZHVsZS5nZXRVcmwoXCJUd2l0Y2hHbG9iYWxcIiwgZW1vdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBlbW90ZUVsZW1lbnQgPSBtYWtlRW1vdGUoZW1vdGUsIHVybCwge29uQ2xpY2s6IHRoaXMuaW5zZXJ0RW1vdGUuYmluZCh0aGlzLCBlbW90ZSl9KTtcclxuICAgICAgICAgICAgdGhpcy50ZUNvbnRhaW5lcklubmVyLmFwcGVuZChlbW90ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGYXZvcml0ZXMoKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuZmFDb250YWluZXJJbm5lci5maXJzdENoaWxkKSB0aGlzLmZhQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZC5yZW1vdmUoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIEVtb3RlTW9kdWxlLmZhdm9yaXRlcykge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBFbW90ZU1vZHVsZS5mYXZvcml0ZXNbZW1vdGVdO1xyXG4gICAgICAgICAgICBjb25zdCBlbW90ZUVsZW1lbnQgPSBtYWtlRW1vdGUoZW1vdGUsIHVybCwge29uQ2xpY2s6IHRoaXMuaW5zZXJ0RW1vdGUuYmluZCh0aGlzLCBlbW90ZSksIG9uQ29udGV4dE1lbnU6IHRoaXMuZmF2Q29udGV4dC5iaW5kKHRoaXMpfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmFDb250YWluZXJJbm5lci5hcHBlbmQoZW1vdGVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgRW1vdGVNb2R1bGUuc2F2ZUZhdm9yaXRlcygpO1xyXG4gICAgfVxyXG5cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/emotes/emotemenu.js\n"); /***/ }), @@ -263,7 +251,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ui/publicservers/menu */ \"./src/ui/publicservers/menu.js\");\n\n\n\nconst LayerStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"pushLayer\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PublicServers extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"PublicServers\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"publicServers\";\n }\n\n enabled() {\n const GuildList = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].find(m => m.default && m.default.displayName == \"NavigableGuilds\");\n const GuildListOld = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].findByDisplayName(\"Guilds\");\n if (!GuildList && !GuildListOld) this.warn(\"Can't find GuildList component\");\n this.guildPatch = this.after(GuildList ? GuildList : GuildListOld.prototype, GuildList ? \"default\" : \"render\", this._appendButton);\n\n this._appendButton();\n }\n\n disabled() {\n this.unpatchAll();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].query(\"#bd-pub-li\").remove();\n }\n\n _appendButton() {\n const wrapper = modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.wrapper.split(\" \")[0];\n const guilds = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].query(`.${wrapper} .scroller-2TZvBN >:first-child`);\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].after(guilds, this.button);\n }\n\n openPublicServers() {\n LayerStack.pushLayer(() => modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React.createElement(_ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n close: LayerStack.popLayer\n }));\n }\n\n get button() {\n const btn = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
`);\n const label = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].PublicServers.button}
`);\n label.addEventListener(\"click\", () => {\n this.openPublicServers();\n });\n btn.append(label);\n return btn; // const btn = $(\"
\", {\n // \"class\": DiscordModules.GuildClasses.listItem,\n // \"id\": \"bd-pub-li\"\n // }).append($(\"
\", {\n // \"class\": \"wrapper-25eVIn \" + DiscordModules.GuildClasses.circleButtonMask,\n // \"text\": Strings.PublicServers.button,\n // \"id\": \"bd-pub-button\",\n // \"click\": () => { this.openPublicServers(); }\n // }));\n // return btn;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2dlbmVyYWwvcHVibGljc2VydmVycy5qcz84YjdlIl0sIm5hbWVzIjpbIkxheWVyU3RhY2siLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJQdWJsaWNTZXJ2ZXJzIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsIkd1aWxkTGlzdCIsImZpbmQiLCJtIiwiZGVmYXVsdCIsImRpc3BsYXlOYW1lIiwiR3VpbGRMaXN0T2xkIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJ3YXJuIiwiZ3VpbGRQYXRjaCIsImFmdGVyIiwicHJvdG90eXBlIiwiX2FwcGVuZEJ1dHRvbiIsImRpc2FibGVkIiwidW5wYXRjaEFsbCIsIkRPTSIsInF1ZXJ5IiwicmVtb3ZlIiwid3JhcHBlciIsIkRpc2NvcmRNb2R1bGVzIiwiR3VpbGRDbGFzc2VzIiwic3BsaXQiLCJndWlsZHMiLCJidXR0b24iLCJvcGVuUHVibGljU2VydmVycyIsInB1c2hMYXllciIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIlB1YmxpY1NlcnZlcnNNZW51IiwiY2xvc2UiLCJwb3BMYXllciIsImJ0biIsImxpc3RJdGVtIiwibGFiZWwiLCJjaXJjbGVCdXR0b25NYXNrIiwiU3RyaW5ncyIsImFkZEV2ZW50TGlzdGVuZXIiLCJhcHBlbmQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxzREFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLENBQW5CO0FBRWUsbUVBQUksTUFBTUMsYUFBTixTQUE0QkMsd0RBQTVCLENBQW9DO0FBQ25ELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFDcEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBRWxDQyxTQUFPLEdBQUc7QUFDTixVQUFNQyxTQUFTLEdBQUdSLHNEQUFjLENBQUNTLElBQWYsQ0FBb0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVQyxXQUFWLElBQXlCLGlCQUEvRCxDQUFsQjtBQUNBLFVBQU1DLFlBQVksR0FBR2Isc0RBQWMsQ0FBQ2MsaUJBQWYsQ0FBaUMsUUFBakMsQ0FBckI7QUFDQSxRQUFJLENBQUNOLFNBQUQsSUFBYyxDQUFDSyxZQUFuQixFQUFpQyxLQUFLRSxJQUFMLENBQVUsZ0NBQVY7QUFDakMsU0FBS0MsVUFBTCxHQUFrQixLQUFLQyxLQUFMLENBQVdULFNBQVMsR0FBR0EsU0FBSCxHQUFlSyxZQUFZLENBQUNLLFNBQWhELEVBQTJEVixTQUFTLEdBQUcsU0FBSCxHQUFlLFFBQW5GLEVBQTZGLEtBQUtXLGFBQWxHLENBQWxCOztBQUNBLFNBQUtBLGFBQUw7QUFDSDs7QUFFREMsVUFBUSxHQUFHO0FBQ1AsU0FBS0MsVUFBTDtBQUNBQywrQ0FBRyxDQUFDQyxLQUFKLENBQVUsWUFBVixFQUF3QkMsTUFBeEI7QUFDSDs7QUFFREwsZUFBYSxHQUFHO0FBQ1osVUFBTU0sT0FBTyxHQUFHQyxzREFBYyxDQUFDQyxZQUFmLENBQTRCRixPQUE1QixDQUFvQ0csS0FBcEMsQ0FBMEMsR0FBMUMsRUFBK0MsQ0FBL0MsQ0FBaEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdQLDJDQUFHLENBQUNDLEtBQUosQ0FBVyxJQUFHRSxPQUFRLGlDQUF0QixDQUFmO0FBQ0FILCtDQUFHLENBQUNMLEtBQUosQ0FBVVksTUFBVixFQUFrQixLQUFLQyxNQUF2QjtBQUNIOztBQUVEQyxtQkFBaUIsR0FBRztBQUNoQmhDLGNBQVUsQ0FBQ2lDLFNBQVgsQ0FBcUIsTUFBTU4sc0RBQWMsQ0FBQ08sS0FBZixDQUFxQkMsYUFBckIsQ0FBbUNDLDhEQUFuQyxFQUFzRDtBQUFDQyxXQUFLLEVBQUVyQyxVQUFVLENBQUNzQztBQUFuQixLQUF0RCxDQUEzQjtBQUNIOztBQUVELE1BQUlQLE1BQUosR0FBYTtBQUNULFVBQU1RLEdBQUcsR0FBR2hCLDJDQUFHLENBQUNZLGFBQUosQ0FBbUIsOEJBQTZCUixzREFBYyxDQUFDQyxZQUFmLENBQTRCWSxRQUFTLElBQXJGLENBQVo7QUFDQSxVQUFNQyxLQUFLLEdBQUdsQiwyQ0FBRyxDQUFDWSxhQUFKLENBQW1CLGtDQUFpQyxvQkFBb0JSLHNEQUFjLENBQUNDLFlBQWYsQ0FBNEJjLGdCQUFpQixLQUFJQywrQ0FBTyxDQUFDeEMsYUFBUixDQUFzQjRCLE1BQU8sUUFBdEosQ0FBZDtBQUNBVSxTQUFLLENBQUNHLGdCQUFOLENBQXVCLE9BQXZCLEVBQWdDLE1BQU07QUFBQyxXQUFLWixpQkFBTDtBQUEwQixLQUFqRTtBQUNBTyxPQUFHLENBQUNNLE1BQUosQ0FBV0osS0FBWDtBQUNBLFdBQU9GLEdBQVAsQ0FMUyxDQU9UO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0g7O0FBOUNrRCxDQUF4QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2dlbmVyYWwvcHVibGljc2VydmVycy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtEaXNjb3JkTW9kdWxlcywgV2VicGFja01vZHVsZXMsIFN0cmluZ3MsIERPTX0gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IFB1YmxpY1NlcnZlcnNNZW51IGZyb20gXCIuLi8uLi91aS9wdWJsaWNzZXJ2ZXJzL21lbnVcIjtcclxuXHJcbmNvbnN0IExheWVyU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaExheWVyXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFB1YmxpY1NlcnZlcnMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlB1YmxpY1NlcnZlcnNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJwdWJsaWNTZXJ2ZXJzXCI7fVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0T2xkID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgdGhpcy53YXJuKFwiQ2FuJ3QgZmluZCBHdWlsZExpc3QgY29tcG9uZW50XCIpO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCA9IHRoaXMuYWZ0ZXIoR3VpbGRMaXN0ID8gR3VpbGRMaXN0IDogR3VpbGRMaXN0T2xkLnByb3RvdHlwZSwgR3VpbGRMaXN0ID8gXCJkZWZhdWx0XCIgOiBcInJlbmRlclwiLCB0aGlzLl9hcHBlbmRCdXR0b24pO1xyXG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIHRoaXMudW5wYXRjaEFsbCgpO1xyXG4gICAgICAgIERPTS5xdWVyeShcIiNiZC1wdWItbGlcIikucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2FwcGVuZEJ1dHRvbigpIHtcclxuICAgICAgICBjb25zdCB3cmFwcGVyID0gRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgLiR7d3JhcHBlcn0gLnNjcm9sbGVyLTJUWnZCTiA+OmZpcnN0LWNoaWxkYCk7XHJcbiAgICAgICAgRE9NLmFmdGVyKGd1aWxkcywgdGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5QdWJsaWNTZXJ2ZXJzKCkge1xyXG4gICAgICAgIExheWVyU3RhY2sucHVzaExheWVyKCgpID0+IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoUHVibGljU2VydmVyc01lbnUsIHtjbG9zZTogTGF5ZXJTdGFjay5wb3BMYXllcn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ0biA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWxpXCIgY2xhc3M9XCIke0Rpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5saXN0SXRlbX1cIj5gKTtcclxuICAgICAgICBjb25zdCBsYWJlbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWJ1dHRvblwiIGNsYXNzPVwiJHtcIndyYXBwZXItMjVlVkluIFwiICsgRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2t9XCI+JHtTdHJpbmdzLlB1YmxpY1NlcnZlcnMuYnV0dG9ufTwvZGl2PmApO1xyXG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5vcGVuUHVibGljU2VydmVycygpO30pO1xyXG4gICAgICAgIGJ0bi5hcHBlbmQobGFiZWwpO1xyXG4gICAgICAgIHJldHVybiBidG47XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IGJ0biA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgIC8vICAgICBcImNsYXNzXCI6IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5saXN0SXRlbSxcclxuICAgICAgICAvLyAgICAgXCJpZFwiOiBcImJkLXB1Yi1saVwiXHJcbiAgICAgICAgLy8gfSkuYXBwZW5kKCQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgIC8vICAgICBcImNsYXNzXCI6IFwid3JhcHBlci0yNWVWSW4gXCIgKyBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMuY2lyY2xlQnV0dG9uTWFzayxcclxuICAgICAgICAvLyAgICAgXCJ0ZXh0XCI6IFN0cmluZ3MuUHVibGljU2VydmVycy5idXR0b24sXHJcbiAgICAgICAgLy8gICAgIFwiaWRcIjogXCJiZC1wdWItYnV0dG9uXCIsXHJcbiAgICAgICAgLy8gICAgIFwiY2xpY2tcIjogKCkgPT4geyB0aGlzLm9wZW5QdWJsaWNTZXJ2ZXJzKCk7IH1cclxuICAgICAgICAvLyB9KSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBidG47XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/general/publicservers.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ui/publicservers/menu */ \"./src/ui/publicservers/menu.js\");\n\n\n\nconst LayerStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"pushLayer\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PublicServers extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"PublicServers\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"publicServers\";\n }\n\n enabled() {\n const GuildList = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].find(m => m.default && m.default.displayName == \"NavigableGuilds\");\n const GuildListOld = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].findByDisplayName(\"Guilds\");\n if (!GuildList && !GuildListOld) this.warn(\"Can't find GuildList component\");\n this.guildPatch = this.after(GuildList ? GuildList : GuildListOld.prototype, GuildList ? \"default\" : \"render\", this._appendButton);\n\n this._appendButton();\n }\n\n disabled() {\n this.unpatchAll();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].query(\"#bd-pub-li\").remove();\n }\n\n _appendButton() {\n const wrapper = modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.wrapper.split(\" \")[0];\n const guilds = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].query(`.${wrapper} .scroller-2TZvBN >:first-child`);\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].after(guilds, this.button);\n }\n\n openPublicServers() {\n LayerStack.pushLayer(() => modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React.createElement(_ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n close: LayerStack.popLayer\n }));\n }\n\n get button() {\n const btn = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
`);\n const label = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].PublicServers.button}
`);\n label.addEventListener(\"click\", () => {\n this.openPublicServers();\n });\n btn.append(label);\n return btn;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2dlbmVyYWwvcHVibGljc2VydmVycy5qcz84YjdlIl0sIm5hbWVzIjpbIkxheWVyU3RhY2siLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJQdWJsaWNTZXJ2ZXJzIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsIkd1aWxkTGlzdCIsImZpbmQiLCJtIiwiZGVmYXVsdCIsImRpc3BsYXlOYW1lIiwiR3VpbGRMaXN0T2xkIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJ3YXJuIiwiZ3VpbGRQYXRjaCIsImFmdGVyIiwicHJvdG90eXBlIiwiX2FwcGVuZEJ1dHRvbiIsImRpc2FibGVkIiwidW5wYXRjaEFsbCIsIkRPTSIsInF1ZXJ5IiwicmVtb3ZlIiwid3JhcHBlciIsIkRpc2NvcmRNb2R1bGVzIiwiR3VpbGRDbGFzc2VzIiwic3BsaXQiLCJndWlsZHMiLCJidXR0b24iLCJvcGVuUHVibGljU2VydmVycyIsInB1c2hMYXllciIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIlB1YmxpY1NlcnZlcnNNZW51IiwiY2xvc2UiLCJwb3BMYXllciIsImJ0biIsImxpc3RJdGVtIiwibGFiZWwiLCJjaXJjbGVCdXR0b25NYXNrIiwiU3RyaW5ncyIsImFkZEV2ZW50TGlzdGVuZXIiLCJhcHBlbmQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxzREFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLENBQW5CO0FBRWUsbUVBQUksTUFBTUMsYUFBTixTQUE0QkMsd0RBQTVCLENBQW9DO0FBQ25ELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFDcEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBRWxDQyxTQUFPLEdBQUc7QUFDTixVQUFNQyxTQUFTLEdBQUdSLHNEQUFjLENBQUNTLElBQWYsQ0FBb0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVQyxXQUFWLElBQXlCLGlCQUEvRCxDQUFsQjtBQUNBLFVBQU1DLFlBQVksR0FBR2Isc0RBQWMsQ0FBQ2MsaUJBQWYsQ0FBaUMsUUFBakMsQ0FBckI7QUFDQSxRQUFJLENBQUNOLFNBQUQsSUFBYyxDQUFDSyxZQUFuQixFQUFpQyxLQUFLRSxJQUFMLENBQVUsZ0NBQVY7QUFDakMsU0FBS0MsVUFBTCxHQUFrQixLQUFLQyxLQUFMLENBQVdULFNBQVMsR0FBR0EsU0FBSCxHQUFlSyxZQUFZLENBQUNLLFNBQWhELEVBQTJEVixTQUFTLEdBQUcsU0FBSCxHQUFlLFFBQW5GLEVBQTZGLEtBQUtXLGFBQWxHLENBQWxCOztBQUNBLFNBQUtBLGFBQUw7QUFDSDs7QUFFREMsVUFBUSxHQUFHO0FBQ1AsU0FBS0MsVUFBTDtBQUNBQywrQ0FBRyxDQUFDQyxLQUFKLENBQVUsWUFBVixFQUF3QkMsTUFBeEI7QUFDSDs7QUFFREwsZUFBYSxHQUFHO0FBQ1osVUFBTU0sT0FBTyxHQUFHQyxzREFBYyxDQUFDQyxZQUFmLENBQTRCRixPQUE1QixDQUFvQ0csS0FBcEMsQ0FBMEMsR0FBMUMsRUFBK0MsQ0FBL0MsQ0FBaEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdQLDJDQUFHLENBQUNDLEtBQUosQ0FBVyxJQUFHRSxPQUFRLGlDQUF0QixDQUFmO0FBQ0FILCtDQUFHLENBQUNMLEtBQUosQ0FBVVksTUFBVixFQUFrQixLQUFLQyxNQUF2QjtBQUNIOztBQUVEQyxtQkFBaUIsR0FBRztBQUNoQmhDLGNBQVUsQ0FBQ2lDLFNBQVgsQ0FBcUIsTUFBTU4sc0RBQWMsQ0FBQ08sS0FBZixDQUFxQkMsYUFBckIsQ0FBbUNDLDhEQUFuQyxFQUFzRDtBQUFDQyxXQUFLLEVBQUVyQyxVQUFVLENBQUNzQztBQUFuQixLQUF0RCxDQUEzQjtBQUNIOztBQUVELE1BQUlQLE1BQUosR0FBYTtBQUNULFVBQU1RLEdBQUcsR0FBR2hCLDJDQUFHLENBQUNZLGFBQUosQ0FBbUIsOEJBQTZCUixzREFBYyxDQUFDQyxZQUFmLENBQTRCWSxRQUFTLElBQXJGLENBQVo7QUFDQSxVQUFNQyxLQUFLLEdBQUdsQiwyQ0FBRyxDQUFDWSxhQUFKLENBQW1CLGtDQUFpQyxvQkFBb0JSLHNEQUFjLENBQUNDLFlBQWYsQ0FBNEJjLGdCQUFpQixLQUFJQywrQ0FBTyxDQUFDeEMsYUFBUixDQUFzQjRCLE1BQU8sUUFBdEosQ0FBZDtBQUNBVSxTQUFLLENBQUNHLGdCQUFOLENBQXVCLE9BQXZCLEVBQWdDLE1BQU07QUFBQyxXQUFLWixpQkFBTDtBQUEwQixLQUFqRTtBQUNBTyxPQUFHLENBQUNNLE1BQUosQ0FBV0osS0FBWDtBQUNBLFdBQU9GLEdBQVA7QUFDSDs7QUFsQ2tELENBQXhDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZ2VuZXJhbC9wdWJsaWNzZXJ2ZXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uLy4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge0Rpc2NvcmRNb2R1bGVzLCBXZWJwYWNrTW9kdWxlcywgU3RyaW5ncywgRE9NfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgUHVibGljU2VydmVyc01lbnUgZnJvbSBcIi4uLy4uL3VpL3B1YmxpY3NlcnZlcnMvbWVudVwiO1xyXG5cclxuY29uc3QgTGF5ZXJTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwdXNoTGF5ZXJcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUHVibGljU2VydmVycyBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiUHVibGljU2VydmVyc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcInB1YmxpY1NlcnZlcnNcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3QgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk5hdmlnYWJsZUd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3RPbGQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBpZiAoIUd1aWxkTGlzdCAmJiAhR3VpbGRMaXN0T2xkKSB0aGlzLndhcm4oXCJDYW4ndCBmaW5kIEd1aWxkTGlzdCBjb21wb25lbnRcIik7XHJcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoID0gdGhpcy5hZnRlcihHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHRoaXMuX2FwcGVuZEJ1dHRvbik7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy51bnBhdGNoQWxsKCk7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKS5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBfYXBwZW5kQnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gRE9NLnF1ZXJ5KGAuJHt3cmFwcGVyfSAuc2Nyb2xsZXItMlRadkJOID46Zmlyc3QtY2hpbGRgKTtcclxuICAgICAgICBET00uYWZ0ZXIoZ3VpbGRzLCB0aGlzLmJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblB1YmxpY1NlcnZlcnMoKSB7XHJcbiAgICAgICAgTGF5ZXJTdGFjay5wdXNoTGF5ZXIoKCkgPT4gRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChQdWJsaWNTZXJ2ZXJzTWVudSwge2Nsb3NlOiBMYXllclN0YWNrLnBvcExheWVyfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b24oKSB7XHJcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7RGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzLmxpc3RJdGVtfVwiPmApO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMuY2lyY2xlQnV0dG9uTWFza31cIj4ke1N0cmluZ3MuUHVibGljU2VydmVycy5idXR0b259PC9kaXY+YCk7XHJcbiAgICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHt0aGlzLm9wZW5QdWJsaWNTZXJ2ZXJzKCk7fSk7XHJcbiAgICAgICAgYnRuLmFwcGVuZChsYWJlbCk7XHJcbiAgICAgICAgcmV0dXJuIGJ0bjtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/general/publicservers.js\n"); /***/ }), @@ -287,7 +275,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class WindowPrefs extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"WindowPrefs\";\n }\n\n get category() {\n return \"window\";\n }\n\n get id() {\n return \"transparency\";\n }\n\n initialize() {\n super.initialize();\n this.prefs = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getData(\"windowprefs\") || {};\n }\n\n enabled() {\n this.setWindowPreference(\"transparent\", true);\n this.setWindowPreference(\"backgroundColor\", \"#00000000\");\n this.showModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].WindowPrefs.enabledInfo);\n }\n\n disabled() {\n this.deleteWindowPreference(\"transparent\");\n this.deleteWindowPreference(\"backgroundColor\");\n this.showModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].WindowPrefs.disabledInfo);\n }\n\n showModal(info) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.additionalInfo, info, {\n confirmText: modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.restartNow,\n cancelText: modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.restartLater,\n onConfirm: () => {\n const app = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n app.relaunch();\n app.exit();\n }\n });\n }\n\n getWindowPreference(key) {\n return this.prefs[key];\n }\n\n setWindowPreference(key, value) {\n this.prefs[key] = value;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setData(\"windowprefs\", this.prefs);\n }\n\n deleteWindowPreference(key) {\n delete this.prefs[key];\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setData(\"windowprefs\", this.prefs);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3dpbmRvd3ByZWZzLmpzP2I0YTciXSwibmFtZXMiOlsiV2luZG93UHJlZnMiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJpbml0aWFsaXplIiwicHJlZnMiLCJEYXRhU3RvcmUiLCJnZXREYXRhIiwiZW5hYmxlZCIsInNldFdpbmRvd1ByZWZlcmVuY2UiLCJzaG93TW9kYWwiLCJTdHJpbmdzIiwiZW5hYmxlZEluZm8iLCJkaXNhYmxlZCIsImRlbGV0ZVdpbmRvd1ByZWZlcmVuY2UiLCJkaXNhYmxlZEluZm8iLCJpbmZvIiwiTW9kYWxzIiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiYWRkaXRpb25hbEluZm8iLCJjb25maXJtVGV4dCIsInJlc3RhcnROb3ciLCJjYW5jZWxUZXh0IiwicmVzdGFydExhdGVyIiwib25Db25maXJtIiwiYXBwIiwicmVxdWlyZSIsInJlbW90ZSIsInJlbGF1bmNoIiwiZXhpdCIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJrZXkiLCJ2YWx1ZSIsInNldERhdGEiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsV0FBTixTQUEwQkMsd0RBQTFCLENBQWtDO0FBQ2pELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFDbEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxRQUFQO0FBQWlCOztBQUNqQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGNBQVA7QUFBdUI7O0FBRWpDQyxZQUFVLEdBQUc7QUFDVCxVQUFNQSxVQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhQyxpREFBUyxDQUFDQyxPQUFWLENBQWtCLGFBQWxCLEtBQW9DLEVBQWpEO0FBQ0g7O0FBRURDLFNBQU8sR0FBRztBQUNOLFNBQUtDLG1CQUFMLENBQXlCLGFBQXpCLEVBQXdDLElBQXhDO0FBQ0EsU0FBS0EsbUJBQUwsQ0FBeUIsaUJBQXpCLEVBQTRDLFdBQTVDO0FBQ0EsU0FBS0MsU0FBTCxDQUFlQywrQ0FBTyxDQUFDWixXQUFSLENBQW9CYSxXQUFuQztBQUNIOztBQUVEQyxVQUFRLEdBQUc7QUFDUCxTQUFLQyxzQkFBTCxDQUE0QixhQUE1QjtBQUNBLFNBQUtBLHNCQUFMLENBQTRCLGlCQUE1QjtBQUNBLFNBQUtKLFNBQUwsQ0FBZUMsK0NBQU8sQ0FBQ1osV0FBUixDQUFvQmdCLFlBQW5DO0FBQ0g7O0FBRURMLFdBQVMsQ0FBQ00sSUFBRCxFQUFPO0FBQ1pDLHNEQUFNLENBQUNDLHFCQUFQLENBQTZCUCwrQ0FBTyxDQUFDTSxNQUFSLENBQWVFLGNBQTVDLEVBQTRESCxJQUE1RCxFQUFrRTtBQUM5REksaUJBQVcsRUFBRVQsK0NBQU8sQ0FBQ00sTUFBUixDQUFlSSxVQURrQztBQUU5REMsZ0JBQVUsRUFBRVgsK0NBQU8sQ0FBQ00sTUFBUixDQUFlTSxZQUZtQztBQUc5REMsZUFBUyxFQUFFLE1BQU07QUFDYixjQUFNQyxHQUFHLEdBQUdDLG1CQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQkMsTUFBcEIsQ0FBMkJGLEdBQXZDOztBQUNBQSxXQUFHLENBQUNHLFFBQUo7QUFDQUgsV0FBRyxDQUFDSSxJQUFKO0FBQ0g7QUFQNkQsS0FBbEU7QUFTSDs7QUFFREMscUJBQW1CLENBQUNDLEdBQUQsRUFBTTtBQUNyQixXQUFPLEtBQUsxQixLQUFMLENBQVcwQixHQUFYLENBQVA7QUFDSDs7QUFFRHRCLHFCQUFtQixDQUFDc0IsR0FBRCxFQUFNQyxLQUFOLEVBQWE7QUFDNUIsU0FBSzNCLEtBQUwsQ0FBVzBCLEdBQVgsSUFBa0JDLEtBQWxCO0FBQ0ExQixxREFBUyxDQUFDMkIsT0FBVixDQUFrQixhQUFsQixFQUFpQyxLQUFLNUIsS0FBdEM7QUFDSDs7QUFFRFMsd0JBQXNCLENBQUNpQixHQUFELEVBQU07QUFDeEIsV0FBTyxLQUFLMUIsS0FBTCxDQUFXMEIsR0FBWCxDQUFQO0FBQ0F6QixxREFBUyxDQUFDMkIsT0FBVixDQUFrQixhQUFsQixFQUFpQyxLQUFLNUIsS0FBdEM7QUFDSDs7QUE5Q2dELENBQXRDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvd2luZG93cHJlZnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL3VpL21vZGFsc1wiO1xyXG5pbXBvcnQge0RhdGFTdG9yZSwgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBXaW5kb3dQcmVmcyBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiV2luZG93UHJlZnNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwid2luZG93XCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcInRyYW5zcGFyZW5jeVwiO31cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICB0aGlzLnByZWZzID0gRGF0YVN0b3JlLmdldERhdGEoXCJ3aW5kb3dwcmVmc1wiKSB8fCB7fTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBcIiMwMDAwMDAwMFwiKTtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbChTdHJpbmdzLldpbmRvd1ByZWZzLmVuYWJsZWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICB0aGlzLmRlbGV0ZVdpbmRvd1ByZWZlcmVuY2UoXCJ0cmFuc3BhcmVudFwiKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZVdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIik7XHJcbiAgICAgICAgdGhpcy5zaG93TW9kYWwoU3RyaW5ncy5XaW5kb3dQcmVmcy5kaXNhYmxlZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNb2RhbChpbmZvKSB7XHJcbiAgICAgICAgTW9kYWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChTdHJpbmdzLk1vZGFscy5hZGRpdGlvbmFsSW5mbywgaW5mbywge1xyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogU3RyaW5ncy5Nb2RhbHMucmVzdGFydE5vdyxcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogU3RyaW5ncy5Nb2RhbHMucmVzdGFydExhdGVyLFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgYXBwLnJlbGF1bmNoKCk7XHJcbiAgICAgICAgICAgICAgICBhcHAuZXhpdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcmVmc1trZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucHJlZnNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXREYXRhKFwid2luZG93cHJlZnNcIiwgdGhpcy5wcmVmcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlV2luZG93UHJlZmVyZW5jZShrZXkpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5wcmVmc1trZXldO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXREYXRhKFwid2luZG93cHJlZnNcIiwgdGhpcy5wcmVmcyk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/windowprefs.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class WindowPrefs extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"WindowPrefs\";\n }\n\n get category() {\n return \"window\";\n }\n\n get id() {\n return \"transparency\";\n }\n\n enabled() {\n this.setWindowPreference(\"transparent\", true);\n this.setWindowPreference(\"backgroundColor\", \"#00000000\");\n this.showModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].WindowPrefs.enabledInfo);\n }\n\n disabled() {\n this.deleteWindowPreference(\"transparent\");\n this.deleteWindowPreference(\"backgroundColor\");\n this.showModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].WindowPrefs.disabledInfo);\n }\n\n showModal(info) {\n if (!this.initialized) return;\n _ui_modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.additionalInfo, info, {\n confirmText: modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.restartNow,\n cancelText: modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.restartLater,\n onConfirm: () => {\n const app = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n app.relaunch();\n app.exit();\n }\n });\n }\n\n getWindowPreference(key) {\n const prefs = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getData(\"windowprefs\") || {};\n return prefs[key];\n }\n\n setWindowPreference(key, value) {\n const prefs = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getData(\"windowprefs\") || {};\n prefs[key] = value;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setData(\"windowprefs\", prefs);\n }\n\n deleteWindowPreference(key) {\n const prefs = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getData(\"windowprefs\") || {};\n delete prefs[key];\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setData(\"windowprefs\", prefs);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3dpbmRvd3ByZWZzLmpzP2I0YTciXSwibmFtZXMiOlsiV2luZG93UHJlZnMiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJlbmFibGVkIiwic2V0V2luZG93UHJlZmVyZW5jZSIsInNob3dNb2RhbCIsIlN0cmluZ3MiLCJlbmFibGVkSW5mbyIsImRpc2FibGVkIiwiZGVsZXRlV2luZG93UHJlZmVyZW5jZSIsImRpc2FibGVkSW5mbyIsImluZm8iLCJpbml0aWFsaXplZCIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsImFkZGl0aW9uYWxJbmZvIiwiY29uZmlybVRleHQiLCJyZXN0YXJ0Tm93IiwiY2FuY2VsVGV4dCIsInJlc3RhcnRMYXRlciIsIm9uQ29uZmlybSIsImFwcCIsInJlcXVpcmUiLCJyZW1vdGUiLCJyZWxhdW5jaCIsImV4aXQiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwia2V5IiwicHJlZnMiLCJEYXRhU3RvcmUiLCJnZXREYXRhIiwidmFsdWUiLCJzZXREYXRhIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLFdBQU4sU0FBMEJDLHdEQUExQixDQUFrQztBQUNqRCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGFBQVA7QUFBc0I7O0FBQ2xDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sUUFBUDtBQUFpQjs7QUFDakMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxjQUFQO0FBQXVCOztBQUVqQ0MsU0FBTyxHQUFHO0FBQ04sU0FBS0MsbUJBQUwsQ0FBeUIsYUFBekIsRUFBd0MsSUFBeEM7QUFDQSxTQUFLQSxtQkFBTCxDQUF5QixpQkFBekIsRUFBNEMsV0FBNUM7QUFDQSxTQUFLQyxTQUFMLENBQWVDLCtDQUFPLENBQUNSLFdBQVIsQ0FBb0JTLFdBQW5DO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQLFNBQUtDLHNCQUFMLENBQTRCLGFBQTVCO0FBQ0EsU0FBS0Esc0JBQUwsQ0FBNEIsaUJBQTVCO0FBQ0EsU0FBS0osU0FBTCxDQUFlQywrQ0FBTyxDQUFDUixXQUFSLENBQW9CWSxZQUFuQztBQUNIOztBQUVETCxXQUFTLENBQUNNLElBQUQsRUFBTztBQUNaLFFBQUksQ0FBQyxLQUFLQyxXQUFWLEVBQXVCO0FBQ3ZCQyxzREFBTSxDQUFDQyxxQkFBUCxDQUE2QlIsK0NBQU8sQ0FBQ08sTUFBUixDQUFlRSxjQUE1QyxFQUE0REosSUFBNUQsRUFBa0U7QUFDOURLLGlCQUFXLEVBQUVWLCtDQUFPLENBQUNPLE1BQVIsQ0FBZUksVUFEa0M7QUFFOURDLGdCQUFVLEVBQUVaLCtDQUFPLENBQUNPLE1BQVIsQ0FBZU0sWUFGbUM7QUFHOURDLGVBQVMsRUFBRSxNQUFNO0FBQ2IsY0FBTUMsR0FBRyxHQUFHQyxtQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0JDLE1BQXBCLENBQTJCRixHQUF2Qzs7QUFDQUEsV0FBRyxDQUFDRyxRQUFKO0FBQ0FILFdBQUcsQ0FBQ0ksSUFBSjtBQUNIO0FBUDZELEtBQWxFO0FBU0g7O0FBRURDLHFCQUFtQixDQUFDQyxHQUFELEVBQU07QUFDckIsVUFBTUMsS0FBSyxHQUFHQyxpREFBUyxDQUFDQyxPQUFWLENBQWtCLGFBQWxCLEtBQW9DLEVBQWxEO0FBQ0EsV0FBT0YsS0FBSyxDQUFDRCxHQUFELENBQVo7QUFDSDs7QUFFRHZCLHFCQUFtQixDQUFDdUIsR0FBRCxFQUFNSSxLQUFOLEVBQWE7QUFDNUIsVUFBTUgsS0FBSyxHQUFHQyxpREFBUyxDQUFDQyxPQUFWLENBQWtCLGFBQWxCLEtBQW9DLEVBQWxEO0FBQ0FGLFNBQUssQ0FBQ0QsR0FBRCxDQUFMLEdBQWFJLEtBQWI7QUFDQUYscURBQVMsQ0FBQ0csT0FBVixDQUFrQixhQUFsQixFQUFpQ0osS0FBakM7QUFDSDs7QUFFRG5CLHdCQUFzQixDQUFDa0IsR0FBRCxFQUFNO0FBQ3hCLFVBQU1DLEtBQUssR0FBR0MsaURBQVMsQ0FBQ0MsT0FBVixDQUFrQixhQUFsQixLQUFvQyxFQUFsRDtBQUNBLFdBQU9GLEtBQUssQ0FBQ0QsR0FBRCxDQUFaO0FBQ0FFLHFEQUFTLENBQUNHLE9BQVYsQ0FBa0IsYUFBbEIsRUFBaUNKLEtBQWpDO0FBQ0g7O0FBN0NnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL3dpbmRvd3ByZWZzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi91aS9tb2RhbHNcIjtcclxuaW1wb3J0IHtEYXRhU3RvcmUsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgV2luZG93UHJlZnMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIldpbmRvd1ByZWZzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcIndpbmRvd1wiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJ0cmFuc3BhcmVuY3lcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICB0aGlzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJ0cmFuc3BhcmVudFwiLCB0cnVlKTtcclxuICAgICAgICB0aGlzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMDAwMDAwMDBcIik7XHJcbiAgICAgICAgdGhpcy5zaG93TW9kYWwoU3RyaW5ncy5XaW5kb3dQcmVmcy5lbmFibGVkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIik7XHJcbiAgICAgICAgdGhpcy5kZWxldGVXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIpO1xyXG4gICAgICAgIHRoaXMuc2hvd01vZGFsKFN0cmluZ3MuV2luZG93UHJlZnMuZGlzYWJsZWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TW9kYWwoaW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkgcmV0dXJuO1xyXG4gICAgICAgIE1vZGFscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoU3RyaW5ncy5Nb2RhbHMuYWRkaXRpb25hbEluZm8sIGluZm8sIHtcclxuICAgICAgICAgICAgY29uZmlybVRleHQ6IFN0cmluZ3MuTW9kYWxzLnJlc3RhcnROb3csXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFN0cmluZ3MuTW9kYWxzLnJlc3RhcnRMYXRlcixcclxuICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcHAgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpO1xyXG4gICAgICAgICAgICAgICAgYXBwLmV4aXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KSB7XHJcbiAgICAgICAgY29uc3QgcHJlZnMgPSBEYXRhU3RvcmUuZ2V0RGF0YShcIndpbmRvd3ByZWZzXCIpIHx8IHt9O1xyXG4gICAgICAgIHJldHVybiBwcmVmc1trZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHByZWZzID0gRGF0YVN0b3JlLmdldERhdGEoXCJ3aW5kb3dwcmVmc1wiKSB8fCB7fTtcclxuICAgICAgICBwcmVmc1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldERhdGEoXCJ3aW5kb3dwcmVmc1wiLCBwcmVmcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlV2luZG93UHJlZmVyZW5jZShrZXkpIHtcclxuICAgICAgICBjb25zdCBwcmVmcyA9IERhdGFTdG9yZS5nZXREYXRhKFwid2luZG93cHJlZnNcIikgfHwge307XHJcbiAgICAgICAgZGVsZXRlIHByZWZzW2tleV07XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldERhdGEoXCJ3aW5kb3dwcmVmc1wiLCBwcmVmcyk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/windowprefs.js\n"); /***/ }), @@ -347,7 +335,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"category\",\n id: \"general\",\n name: \"General\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"download\",\n value: true\n }, {\n type: \"switch\",\n id: \"emoteMenu\",\n value: true\n }, {\n type: \"switch\",\n id: \"hideEmojiMenu\",\n value: false,\n enableWith: \"emoteMenu\"\n }, {\n type: \"switch\",\n id: \"autoCaps\",\n value: false\n }, {\n type: \"switch\",\n id: \"showNames\",\n value: true\n }, {\n type: \"switch\",\n id: \"modifiers\",\n value: true\n }, {\n type: \"switch\",\n id: \"animateOnHover\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"categories\",\n name: \"Categories\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"twitchglobal\",\n value: true\n }, {\n type: \"switch\",\n id: \"twitchsubscriber\",\n value: false\n }, {\n type: \"switch\",\n id: \"frankerfacez\",\n value: true\n }, {\n type: \"switch\",\n id: \"bttv\",\n value: true\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc2V0dGluZ3MvZW1vdGVjb25maWcuanM/ODU5NyJdLCJuYW1lcyI6WyJ0eXBlIiwiaWQiLCJuYW1lIiwiY29sbGFwc2libGUiLCJzZXR0aW5ncyIsInZhbHVlIiwiZW5hYmxlV2l0aCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZSxnRUFDWDtBQUNJQSxNQUFJLEVBQUUsVUFEVjtBQUVJQyxJQUFFLEVBQUUsU0FGUjtBQUdJQyxNQUFJLEVBQUUsU0FIVjtBQUlJQyxhQUFXLEVBQUUsSUFKakI7QUFLSUMsVUFBUSxFQUFFLENBQ047QUFBQ0osUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxVQUFyQjtBQUFpQ0ksU0FBSyxFQUFFO0FBQXhDLEdBRE0sRUFFTjtBQUFDTCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFdBQXJCO0FBQWtDSSxTQUFLLEVBQUU7QUFBekMsR0FGTSxFQUdOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsZUFBckI7QUFBc0NJLFNBQUssRUFBRSxLQUE3QztBQUFvREMsY0FBVSxFQUFFO0FBQWhFLEdBSE0sRUFJTjtBQUFDTixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFVBQXJCO0FBQWlDSSxTQUFLLEVBQUU7QUFBeEMsR0FKTSxFQUtOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsV0FBckI7QUFBa0NJLFNBQUssRUFBRTtBQUF6QyxHQUxNLEVBTU47QUFBQ0wsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxXQUFyQjtBQUFrQ0ksU0FBSyxFQUFFO0FBQXpDLEdBTk0sRUFPTjtBQUFDTCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGdCQUFyQjtBQUF1Q0ksU0FBSyxFQUFFO0FBQTlDLEdBUE07QUFMZCxDQURXLEVBZ0JYO0FBQ0lMLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxZQUZSO0FBR0lDLE1BQUksRUFBRSxZQUhWO0FBSUlDLGFBQVcsRUFBRSxJQUpqQjtBQUtJQyxVQUFRLEVBQUUsQ0FDTjtBQUFDSixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGNBQXJCO0FBQXFDSSxTQUFLLEVBQUU7QUFBNUMsR0FETSxFQUVOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsa0JBQXJCO0FBQXlDSSxTQUFLLEVBQUU7QUFBaEQsR0FGTSxFQUdOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsY0FBckI7QUFBcUNJLFNBQUssRUFBRTtBQUE1QyxHQUhNLEVBSU47QUFBQ0wsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxNQUFyQjtBQUE2QkksU0FBSyxFQUFFO0FBQXBDLEdBSk07QUFMZCxDQWhCVyxDQUFmIiwiZmlsZSI6Ii4vc3JjL2RhdGEvc2V0dGluZ3MvZW1vdGVjb25maWcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBbXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImdlbmVyYWxcIixcclxuICAgICAgICBuYW1lOiBcIkdlbmVyYWxcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZG93bmxvYWRcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZW1vdGVNZW51XCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImhpZGVFbW9qaU1lbnVcIiwgdmFsdWU6IGZhbHNlLCBlbmFibGVXaXRoOiBcImVtb3RlTWVudVwifSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImF1dG9DYXBzXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJzaG93TmFtZXNcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwibW9kaWZpZXJzXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImFuaW1hdGVPbkhvdmVyXCIsIHZhbHVlOiBmYWxzZX1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJjYXRlZ29yaWVzXCIsXHJcbiAgICAgICAgbmFtZTogXCJDYXRlZ29yaWVzXCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcInR3aXRjaGdsb2JhbFwiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJ0d2l0Y2hzdWJzY3JpYmVyXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJmcmFua2VyZmFjZXpcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiYnR0dlwiLCB2YWx1ZTogdHJ1ZX1cclxuICAgICAgICBdXHJcbiAgICB9XHJcbl07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/settings/emoteconfig.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"category\",\n id: \"general\",\n name: \"General\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"download\",\n value: true\n }, {\n type: \"switch\",\n id: \"emoteMenu\",\n value: true\n }, {\n type: \"switch\",\n id: \"hideEmojiMenu\",\n value: false,\n enableWith: \"emoteMenu\"\n }, {\n type: \"switch\",\n id: \"showNames\",\n value: true\n }, {\n type: \"switch\",\n id: \"modifiers\",\n value: true\n }, {\n type: \"switch\",\n id: \"animateOnHover\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"categories\",\n name: \"Categories\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"twitchglobal\",\n value: true\n }, {\n type: \"switch\",\n id: \"twitchsubscriber\",\n value: false\n }, {\n type: \"switch\",\n id: \"frankerfacez\",\n value: true\n }, {\n type: \"switch\",\n id: \"bttv\",\n value: true\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc2V0dGluZ3MvZW1vdGVjb25maWcuanM/ODU5NyJdLCJuYW1lcyI6WyJ0eXBlIiwiaWQiLCJuYW1lIiwiY29sbGFwc2libGUiLCJzZXR0aW5ncyIsInZhbHVlIiwiZW5hYmxlV2l0aCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZSxnRUFDWDtBQUNJQSxNQUFJLEVBQUUsVUFEVjtBQUVJQyxJQUFFLEVBQUUsU0FGUjtBQUdJQyxNQUFJLEVBQUUsU0FIVjtBQUlJQyxhQUFXLEVBQUUsSUFKakI7QUFLSUMsVUFBUSxFQUFFLENBQ047QUFBQ0osUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxVQUFyQjtBQUFpQ0ksU0FBSyxFQUFFO0FBQXhDLEdBRE0sRUFFTjtBQUFDTCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFdBQXJCO0FBQWtDSSxTQUFLLEVBQUU7QUFBekMsR0FGTSxFQUdOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsZUFBckI7QUFBc0NJLFNBQUssRUFBRSxLQUE3QztBQUFvREMsY0FBVSxFQUFFO0FBQWhFLEdBSE0sRUFJTjtBQUFDTixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFdBQXJCO0FBQWtDSSxTQUFLLEVBQUU7QUFBekMsR0FKTSxFQUtOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsV0FBckI7QUFBa0NJLFNBQUssRUFBRTtBQUF6QyxHQUxNLEVBTU47QUFBQ0wsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxnQkFBckI7QUFBdUNJLFNBQUssRUFBRTtBQUE5QyxHQU5NO0FBTGQsQ0FEVyxFQWVYO0FBQ0lMLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxZQUZSO0FBR0lDLE1BQUksRUFBRSxZQUhWO0FBSUlDLGFBQVcsRUFBRSxJQUpqQjtBQUtJQyxVQUFRLEVBQUUsQ0FDTjtBQUFDSixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGNBQXJCO0FBQXFDSSxTQUFLLEVBQUU7QUFBNUMsR0FETSxFQUVOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsa0JBQXJCO0FBQXlDSSxTQUFLLEVBQUU7QUFBaEQsR0FGTSxFQUdOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsY0FBckI7QUFBcUNJLFNBQUssRUFBRTtBQUE1QyxHQUhNLEVBSU47QUFBQ0wsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxNQUFyQjtBQUE2QkksU0FBSyxFQUFFO0FBQXBDLEdBSk07QUFMZCxDQWZXLENBQWYiLCJmaWxlIjoiLi9zcmMvZGF0YS9zZXR0aW5ncy9lbW90ZWNvbmZpZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFtcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgaWQ6IFwiZ2VuZXJhbFwiLFxyXG4gICAgICAgIG5hbWU6IFwiR2VuZXJhbFwiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJkb3dubG9hZFwiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJlbW90ZU1lbnVcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiaGlkZUVtb2ppTWVudVwiLCB2YWx1ZTogZmFsc2UsIGVuYWJsZVdpdGg6IFwiZW1vdGVNZW51XCJ9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwic2hvd05hbWVzXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcIm1vZGlmaWVyc1wiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJhbmltYXRlT25Ib3ZlclwiLCB2YWx1ZTogZmFsc2V9XHJcbiAgICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgaWQ6IFwiY2F0ZWdvcmllc1wiLFxyXG4gICAgICAgIG5hbWU6IFwiQ2F0ZWdvcmllc1wiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJ0d2l0Y2hnbG9iYWxcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidHdpdGNoc3Vic2NyaWJlclwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZnJhbmtlcmZhY2V6XCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImJ0dHZcIiwgdmFsdWU6IHRydWV9XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5dOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/data/settings/emoteconfig.js\n"); /***/ }), @@ -407,7 +395,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _localemanager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localemanager */ \"./src/modules/localemanager.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! builtins */ \"./src/builtins/builtins.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _componentpatcher__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./componentpatcher */ \"./src/modules/componentpatcher.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n\n\n // import EmoteModule from \"./emotes\";\n// import QuickEmoteMenu from \"../builtins/emotemenu\";\n\n\n\n\n\n\n\n\n\n\n\n\nconst GuildClasses = _discordmodules__WEBPACK_IMPORTED_MODULE_11__[\"default\"].GuildClasses;\n\nfunction Core() {}\n\nCore.prototype.setConfig = function (config) {\n Object.assign(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"], config);\n};\n\nCore.prototype.init = async function () {\n _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].initialize();\n await _localemanager__WEBPACK_IMPORTED_MODULE_0__[\"default\"].initialize();\n\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version < data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].minSupportedVersion) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.versionMismatch.format({\n injector: data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version,\n remote: data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion\n }));\n }\n\n if (window.ED) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.incompatibleApp.format({\n app: \"EnhancedDiscord\"\n }));\n }\n\n if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes(\"Patched\")) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.incompatibleApp.format({\n app: \"Powercord\"\n }));\n }\n\n console.log(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"]);\n const latestLocalVersion = data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].updater ? data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].updater.LatestVersion : data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].latestVersion;\n\n if (latestLocalVersion > data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showConfirmationModal(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateAvailable, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateInfo.format({\n version: latestLocalVersion\n }), {\n confirmText: _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateNow,\n cancelText: _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.maybeLater,\n onConfirm: async () => {\n const onUpdateFailed = () => {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateFailed, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.manualUpdate);\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 _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n _settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initialize();\n await this.waitForGuilds();\n _reactcomponents__WEBPACK_IMPORTED_MODULE_9__[\"default\"].initialize();\n _componentpatcher__WEBPACK_IMPORTED_MODULE_12__[\"default\"].initialize();\n\n for (const module in builtins__WEBPACK_IMPORTED_MODULE_7__) builtins__WEBPACK_IMPORTED_MODULE_7__[module].initialize();\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n document.getElementsByClassName(\"bd-loaderv2\")[0].remove(); // Show loading errors\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Collecting Startup Errors\");\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showAddonErrors({\n plugins: pluginErrors,\n themes: themeErrors\n });\n const previousVersion = _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].getBDData(\"version\");\n\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion > previousVersion) {\n this.showChangelogModal(data__WEBPACK_IMPORTED_MODULE_2__[\"Changelog\"]);\n _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].setBDData(\"version\", data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion);\n }\n};\n\nCore.prototype.waitForGuilds = function () {\n let timesChecked = 0;\n return new Promise(resolve => {\n const checkForGuilds = function () {\n timesChecked++;\n if (document.readyState != \"complete\") setTimeout(checkForGuilds, 100);\n const wrapper = GuildClasses.wrapper.split(\" \")[0];\n const guild = GuildClasses.listItem.split(\" \")[0];\n const blob = GuildClasses.blobContainer.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);else if (timesChecked >= 50) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);\n setTimeout(checkForGuilds, 100);\n };\n\n checkForGuilds();\n });\n};\n\nCore.prototype.updateInjector = async function () {\n const injectionPath = _datastore__WEBPACK_IMPORTED_MODULE_10__[\"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 = __webpack_require__(/*! request */ \"request\");\n\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 _logger__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 _logger__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 _logger__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 _logger__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 _logger__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 _logger__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 _logger__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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkd1aWxkQ2xhc3NlcyIsIkRpc2NvcmRNb2R1bGVzIiwiQ29yZSIsInByb3RvdHlwZSIsInNldENvbmZpZyIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsIkNvbmZpZyIsImluaXQiLCJEYXRhU3RvcmUiLCJpbml0aWFsaXplIiwiTG9jYWxlTWFuYWdlciIsInZlcnNpb24iLCJtaW5TdXBwb3J0ZWRWZXJzaW9uIiwiTW9kYWxzIiwiYWxlcnQiLCJTdHJpbmdzIiwiU3RhcnR1cCIsIm5vdFN1cHBvcnRlZCIsInZlcnNpb25NaXNtYXRjaCIsImZvcm1hdCIsImluamVjdG9yIiwicmVtb3RlIiwiYmJkVmVyc2lvbiIsIndpbmRvdyIsIkVEIiwiaW5jb21wYXRpYmxlQXBwIiwiYXBwIiwiV2ViU29ja2V0IiwibmFtZSIsImluY2x1ZGVzIiwiY29uc29sZSIsImxvZyIsImxhdGVzdExvY2FsVmVyc2lvbiIsInVwZGF0ZXIiLCJMYXRlc3RWZXJzaW9uIiwibGF0ZXN0VmVyc2lvbiIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsInVwZGF0ZUF2YWlsYWJsZSIsInVwZGF0ZUluZm8iLCJjb25maXJtVGV4dCIsInVwZGF0ZU5vdyIsImNhbmNlbFRleHQiLCJtYXliZUxhdGVyIiwib25Db25maXJtIiwib25VcGRhdGVGYWlsZWQiLCJ1cGRhdGVGYWlsZWQiLCJtYW51YWxVcGRhdGUiLCJkaWRVcGRhdGUiLCJ1cGRhdGVJbmplY3RvciIsInJlcXVpcmUiLCJyZWxhdW5jaCIsImV4aXQiLCJlcnIiLCJMb2dnZXIiLCJTZXR0aW5ncyIsIkRPTU1hbmFnZXIiLCJ3YWl0Rm9yR3VpbGRzIiwiUmVhY3RDb21wb25lbnRzIiwiQ29tcG9uZW50UGF0Y2hlciIsIm1vZHVsZSIsIkJ1aWx0aW5zIiwicGx1Z2luRXJyb3JzIiwiUGx1Z2luTWFuYWdlciIsInRoZW1lRXJyb3JzIiwiVGhlbWVNYW5hZ2VyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicmVtb3ZlIiwic2hvd0FkZG9uRXJyb3JzIiwicGx1Z2lucyIsInRoZW1lcyIsInByZXZpb3VzVmVyc2lvbiIsImdldEJERGF0YSIsInNob3dDaGFuZ2Vsb2dNb2RhbCIsIkNoYW5nZWxvZyIsInNldEJERGF0YSIsInRpbWVzQ2hlY2tlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2hlY2tGb3JHdWlsZHMiLCJyZWFkeVN0YXRlIiwic2V0VGltZW91dCIsIndyYXBwZXIiLCJzcGxpdCIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJkZWZlckxvYWRlZCIsImluamVjdGlvblBhdGgiLCJmcyIsInBhdGgiLCJybXJmIiwieWF1emwiLCJta2RpcnAiLCJyZXF1ZXN0IiwicGFyZW50UGF0aCIsImZvbGRlck5hbWUiLCJiYXNlbmFtZSIsInppcExpbmsiLCJzYXZlZFppcCIsImV4dHJhY3RlZEZvbGRlciIsInN1Y2Nlc3MiLCJnZXQiLCJ1cmwiLCJlbmNvZGluZyIsImVycm9yIiwicmVzcG9uc2UiLCJib2R5Iiwic3RhdHVzQ29kZSIsImFscmVhZHlFeGlzdHMiLCJyZXMiLCJleGlzdHMiLCJyZW5hbWUiLCJNYXRoIiwicm91bmQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIndyaXRlRmlsZSIsInppcGZpbGUiLCJyIiwib3BlbiIsImxhenlFbnRyaWVzIiwiemlwIiwib24iLCJlbnRyeSIsImZpbGVOYW1lIiwiZW5kc1dpdGgiLCJyZWFkRW50cnkiLCJmdWxsUGF0aCIsInN5bmMiLCJkaXJuYW1lIiwib3BlblJlYWRTdHJlYW0iLCJyZWFkU3RyZWFtIiwicGlwZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwib25jZSIsImJhY2t1cEZvbGRlciIsInVubGluayJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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QixFQUEwQ3ZDLEdBQUcsSUFBSTBCLE9BQU8sQ0FBQyxDQUFDMUIsR0FBRixDQUF4RCxDQUF2QixDQUFoQjs7QUFDQSxNQUFJLENBQUNvRCxPQUFMLEVBQWM7QUFDVm5ELG1EQUFNLENBQUNELEdBQVAsQ0FBVyxnQkFBWCxFQUE2QixzQ0FBN0I7QUFDQSxXQUFPb0QsT0FBUDtBQUNILEdBbkU0QyxDQXFFN0M7OztBQUNBLE1BQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQ1ZuRCxtREFBTSxDQUFDRCxHQUFQLENBQVcsZ0JBQVgsRUFBNkIsNENBQTdCO0FBQ0EsVUFBTSxJQUFJeUIsT0FBSixDQUFZQyxPQUFPLElBQUlnQixJQUFJLENBQUNTLGVBQUQsRUFBa0J6QixPQUFsQixDQUEzQixDQUFOO0FBQ0EsVUFBTSxJQUFJRCxPQUFKLENBQVlDLE9BQU8sSUFBSWMsRUFBRSxDQUFDdUIsTUFBSCxDQUFVd0IsWUFBVixFQUF3QmhELGFBQXhCLEVBQXVDYixPQUF2QyxDQUF2QixDQUFOO0FBQ0EsV0FBTzBCLE9BQVA7QUFDSCxHQTNFNEMsQ0E2RTdDO0FBQ0E7OztBQUNBLFFBQU0sSUFBSTNCLE9BQUosQ0FBWUMsT0FBTyxJQUFJZ0IsSUFBSSxDQUFDNkMsWUFBRCxFQUFlN0QsT0FBZixDQUEzQixDQUFOO0FBQ0EsUUFBTSxJQUFJRCxPQUFKLENBQVlDLE9BQU8sSUFBSWMsRUFBRSxDQUFDZ0QsTUFBSCxDQUFVdEMsUUFBVixFQUFvQnhCLE9BQXBCLENBQXZCLENBQU47QUFFQXpCLGlEQUFNLENBQUN0QixHQUFQLENBQVcsZ0JBQVgsRUFBNkIsbUJBQTdCO0FBQ0EsU0FBT3lFLE9BQVA7QUFDSCxDQXBGRDs7QUFzRmUsbUVBQUl4RyxJQUFKLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb3JlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvY2FsZU1hbmFnZXIgZnJvbSBcIi4vbG9jYWxlbWFuYWdlclwiO1xyXG5cclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IHtDb25maWcsIENoYW5nZWxvZ30gZnJvbSBcImRhdGFcIjtcclxuLy8gaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG4vLyBpbXBvcnQgUXVpY2tFbW90ZU1lbnUgZnJvbSBcIi4uL2J1aWx0aW5zL2Vtb3RlbWVudVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgKiBhcyBCdWlsdGlucyBmcm9tIFwiYnVpbHRpbnNcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vdWkvbW9kYWxzXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgQ29tcG9uZW50UGF0Y2hlciBmcm9tIFwiLi9jb21wb25lbnRwYXRjaGVyXCI7XHJcbmltcG9ydCBTdHJpbmdzIGZyb20gXCIuL3N0cmluZ3NcIjtcclxuXHJcblxyXG5jb25zdCBHdWlsZENsYXNzZXMgPSBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXM7XHJcblxyXG5mdW5jdGlvbiBDb3JlKCkge1xyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgIE9iamVjdC5hc3NpZ24oQ29uZmlnLCBjb25maWcpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBhd2FpdCBMb2NhbGVNYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBpZiAoQ29uZmlnLnZlcnNpb24gPCBDb25maWcubWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIHJldHVybiBNb2RhbHMuYWxlcnQoU3RyaW5ncy5TdGFydHVwLm5vdFN1cHBvcnRlZCwgU3RyaW5ncy5TdGFydHVwLnZlcnNpb25NaXNtYXRjaC5mb3JtYXQoe2luamVjdG9yOiBDb25maWcudmVyc2lvbiwgcmVtb3RlOiBDb25maWcuYmJkVmVyc2lvbn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkVEKSB7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFscy5hbGVydChTdHJpbmdzLlN0YXJ0dXAubm90U3VwcG9ydGVkLCBTdHJpbmdzLlN0YXJ0dXAuaW5jb21wYXRpYmxlQXBwLmZvcm1hdCh7YXBwOiBcIkVuaGFuY2VkRGlzY29yZFwifSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuV2ViU29ja2V0ICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZSAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUuaW5jbHVkZXMoXCJQYXRjaGVkXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFscy5hbGVydChTdHJpbmdzLlN0YXJ0dXAubm90U3VwcG9ydGVkLCBTdHJpbmdzLlN0YXJ0dXAuaW5jb21wYXRpYmxlQXBwLmZvcm1hdCh7YXBwOiBcIlBvd2VyY29yZFwifSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKENvbmZpZyk7XHJcblxyXG4gICAgY29uc3QgbGF0ZXN0TG9jYWxWZXJzaW9uID0gQ29uZmlnLnVwZGF0ZXIgPyBDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogQ29uZmlnLmxhdGVzdFZlcnNpb247XHJcbiAgICBpZiAobGF0ZXN0TG9jYWxWZXJzaW9uID4gQ29uZmlnLnZlcnNpb24pIHtcclxuICAgICAgICBNb2RhbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFN0cmluZ3MuU3RhcnR1cC51cGRhdGVBdmFpbGFibGUsIFN0cmluZ3MuU3RhcnR1cC51cGRhdGVJbmZvLmZvcm1hdCh7dmVyc2lvbjogbGF0ZXN0TG9jYWxWZXJzaW9ufSksIHtcclxuICAgICAgICAgICAgY29uZmlybVRleHQ6IFN0cmluZ3MuU3RhcnR1cC51cGRhdGVOb3csXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFN0cmluZ3MuU3RhcnR1cC5tYXliZUxhdGVyLFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9uVXBkYXRlRmFpbGVkID0gKCkgPT4ge01vZGFscy5hbGVydChTdHJpbmdzLlN0YXJ0dXAudXBkYXRlRmFpbGVkLCBTdHJpbmdzLlN0YXJ0dXAubWFudWFsVXBkYXRlKTt9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5leGl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcclxuICAgIFNldHRpbmdzLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBET01NYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuICAgIGF3YWl0IHRoaXMud2FpdEZvckd1aWxkcygpO1xyXG4gICAgUmVhY3RDb21wb25lbnRzLmluaXRpYWxpemUoKTtcclxuICAgIENvbXBvbmVudFBhdGNoZXIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgaW4gQnVpbHRpbnMpIEJ1aWx0aW5zW21vZHVsZV0uaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgY29uc3QgcGx1Z2luRXJyb3JzID0gUGx1Z2luTWFuYWdlci5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcclxuICAgIGNvbnN0IHRoZW1lRXJyb3JzID0gVGhlbWVNYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIlJlbW92aW5nIExvYWRpbmcgSWNvblwiKTtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcclxuXHJcbiAgICAvLyBTaG93IGxvYWRpbmcgZXJyb3JzXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XHJcbiAgICBNb2RhbHMuc2hvd0FkZG9uRXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMsIHRoZW1lczogdGhlbWVFcnJvcnN9KTtcclxuXHJcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb24gPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwidmVyc2lvblwiKTtcclxuICAgIGlmIChDb25maWcuYmJkVmVyc2lvbiA+IHByZXZpb3VzVmVyc2lvbikge1xyXG4gICAgICAgIHRoaXMuc2hvd0NoYW5nZWxvZ01vZGFsKENoYW5nZWxvZyk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgQ29uZmlnLmJiZFZlcnNpb24pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUud2FpdEZvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGltZXNDaGVja2VkKys7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwiY29tcGxldGVcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUudXBkYXRlSW5qZWN0b3IgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGluamVjdGlvblBhdGggPSBEYXRhU3RvcmUuaW5qZWN0aW9uUGF0aDtcclxuICAgIGlmICghaW5qZWN0aW9uUGF0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG4gICAgY29uc3Qgcm1yZiA9IHJlcXVpcmUoXCJyaW1yYWZcIik7XHJcbiAgICBjb25zdCB5YXV6bCA9IHJlcXVpcmUoXCJ5YXV6bFwiKTtcclxuICAgIGNvbnN0IG1rZGlycCA9IHJlcXVpcmUoXCJta2RpcnBcIik7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XHJcblxyXG4gICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGgucmVzb2x2ZShpbmplY3Rpb25QYXRoLCBcIi4uXCIpO1xyXG4gICAgY29uc3QgZm9sZGVyTmFtZSA9IHBhdGguYmFzZW5hbWUoaW5qZWN0aW9uUGF0aCk7XHJcbiAgICBjb25zdCB6aXBMaW5rID0gXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL2FyY2hpdmUvaW5qZWN0b3IuemlwXCI7XHJcbiAgICBjb25zdCBzYXZlZFppcCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcImluamVjdG9yLnppcFwiKTtcclxuICAgIGNvbnN0IGV4dHJhY3RlZEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcIkJldHRlckRpc2NvcmRBcHAtaW5qZWN0b3JcIik7XHJcblxyXG4gICAgLy8gRG93bmxvYWQgdGhlIGluamVjdG9yIHppcCBmaWxlXHJcbiAgICBMb2dnZXIubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xyXG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcclxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xyXG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcblxyXG4gICAgICAgICAgICBMb2dnZXIubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcclxuXHJcbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXHJcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xyXG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcbiAgICBcclxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXHJcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcclxuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xyXG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcclxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcclxuXHJcbiAgICAgICAgTG9nZ2VyLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRXh0cmFjdGluZyBcIiArIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICAvLyBNYWtlIGFueSBuZWVkZWQgcGFyZW50IGRpcmVjdG9yaWVzXHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIG1rZGlycC5zeW5jKHBhdGguZGlybmFtZShmdWxsUGF0aCkpO1xyXG4gICAgICAgIHppcGZpbGUub3BlblJlYWRTdHJlYW0oZW50cnksIGZ1bmN0aW9uKGVyciwgcmVhZFN0cmVhbSkge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLm9uKFwiZW5kXCIsIGZ1bmN0aW9uKCkge3ppcGZpbGUucmVhZEVudHJ5KCk7fSk7IC8vIEdvIHRvIG5leHQgZmlsZSBhZnRlciB0aGlzXHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ucGlwZShmcy5jcmVhdGVXcml0ZVN0cmVhbShmdWxsUGF0aCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB6aXBmaWxlLnJlYWRFbnRyeSgpOyAvLyBTdGFydCByZWFkaW5nXHJcblxyXG4gICAgLy8gV2FpdCBmb3IgdGhlIGZpbmFsIGZpbGUgdG8gZmluaXNoXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHppcGZpbGUub25jZShcImVuZFwiLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBmaW5hbCBzdGVwXHJcbiAgICBjb25zdCBiYWNrdXBGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgYCR7Zm9sZGVyTmFtZX0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGluamVjdGlvblBhdGgsIGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFJlbmFtZSB0aGUgZXh0cmFjdGVkIGZvbGRlciB0byB3aGF0IGl0IHNob3VsZCBiZVxyXG4gICAgTG9nZ2VyLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xyXG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIExvZ2dlci5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgTG9nZ2VyLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4gcmVzdG9yaW5nIGJhY2t1cHMuXCIpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihleHRyYWN0ZWRGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShiYWNrdXBGb2xkZXIsIGluamVjdGlvblBhdGgsIHJlc29sdmUpKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgZXZlcnl0aGluZyBzaG91bGQgaGF2ZSBnb25lIHNtb290aGx5LlxyXG4gICAgLy8gQ2xlYW51cCB0aGUgYmFja3VwIGZvbGRlciB0aGVuIHJlbW92ZSB0aGUgemlwXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnVubGluayhzYXZlZFppcCwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _localemanager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localemanager */ \"./src/modules/localemanager.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! builtins */ \"./src/builtins/builtins.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _componentpatcher__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./componentpatcher */ \"./src/modules/componentpatcher.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n\n\n // import EmoteModule from \"./emotes\";\n// import QuickEmoteMenu from \"../builtins/emotemenu\";\n\n\n\n\n\n\n\n\n\n\n\n\nconst GuildClasses = _discordmodules__WEBPACK_IMPORTED_MODULE_11__[\"default\"].GuildClasses;\n\nfunction Core() {}\n\nCore.prototype.setConfig = function (config) {\n Object.assign(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"], config);\n};\n\nCore.prototype.init = async function () {\n _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].initialize();\n await _localemanager__WEBPACK_IMPORTED_MODULE_0__[\"default\"].initialize();\n\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version < data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].minSupportedVersion) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.versionMismatch.format({\n injector: data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version,\n remote: data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion\n }));\n }\n\n if (window.ED) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.incompatibleApp.format({\n app: \"EnhancedDiscord\"\n }));\n }\n\n if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes(\"Patched\")) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.incompatibleApp.format({\n app: \"Powercord\"\n }));\n }\n\n const latestLocalVersion = data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].updater ? data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].updater.LatestVersion : data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].latestVersion;\n\n if (latestLocalVersion > data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showConfirmationModal(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateAvailable, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateInfo.format({\n version: latestLocalVersion\n }), {\n confirmText: _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateNow,\n cancelText: _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.maybeLater,\n onConfirm: async () => {\n const onUpdateFailed = () => {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateFailed, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.manualUpdate);\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 _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n _settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initialize();\n await this.waitForGuilds();\n _reactcomponents__WEBPACK_IMPORTED_MODULE_9__[\"default\"].initialize();\n _componentpatcher__WEBPACK_IMPORTED_MODULE_12__[\"default\"].initialize();\n\n for (const module in builtins__WEBPACK_IMPORTED_MODULE_7__) builtins__WEBPACK_IMPORTED_MODULE_7__[module].initialize();\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n document.getElementsByClassName(\"bd-loaderv2\")[0].remove(); // Show loading errors\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Collecting Startup Errors\");\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showAddonErrors({\n plugins: pluginErrors,\n themes: themeErrors\n });\n const previousVersion = _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].getBDData(\"version\");\n\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion > previousVersion) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showChangelogModal(data__WEBPACK_IMPORTED_MODULE_2__[\"Changelog\"]);\n _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].setBDData(\"version\", data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion);\n }\n};\n\nCore.prototype.waitForGuilds = function () {\n let timesChecked = 0;\n return new Promise(resolve => {\n const checkForGuilds = function () {\n timesChecked++;\n if (document.readyState != \"complete\") setTimeout(checkForGuilds, 100);\n const wrapper = GuildClasses.wrapper.split(\" \")[0];\n const guild = GuildClasses.listItem.split(\" \")[0];\n const blob = GuildClasses.blobContainer.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);else if (timesChecked >= 50) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);\n setTimeout(checkForGuilds, 100);\n };\n\n checkForGuilds();\n });\n};\n\nCore.prototype.updateInjector = async function () {\n const injectionPath = _datastore__WEBPACK_IMPORTED_MODULE_10__[\"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 = __webpack_require__(/*! request */ \"request\");\n\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 _logger__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 _logger__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 _logger__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 _logger__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 _logger__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 _logger__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 _logger__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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkd1aWxkQ2xhc3NlcyIsIkRpc2NvcmRNb2R1bGVzIiwiQ29yZSIsInByb3RvdHlwZSIsInNldENvbmZpZyIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsIkNvbmZpZyIsImluaXQiLCJEYXRhU3RvcmUiLCJpbml0aWFsaXplIiwiTG9jYWxlTWFuYWdlciIsInZlcnNpb24iLCJtaW5TdXBwb3J0ZWRWZXJzaW9uIiwiTW9kYWxzIiwiYWxlcnQiLCJTdHJpbmdzIiwiU3RhcnR1cCIsIm5vdFN1cHBvcnRlZCIsInZlcnNpb25NaXNtYXRjaCIsImZvcm1hdCIsImluamVjdG9yIiwicmVtb3RlIiwiYmJkVmVyc2lvbiIsIndpbmRvdyIsIkVEIiwiaW5jb21wYXRpYmxlQXBwIiwiYXBwIiwiV2ViU29ja2V0IiwibmFtZSIsImluY2x1ZGVzIiwibGF0ZXN0TG9jYWxWZXJzaW9uIiwidXBkYXRlciIsIkxhdGVzdFZlcnNpb24iLCJsYXRlc3RWZXJzaW9uIiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwidXBkYXRlQXZhaWxhYmxlIiwidXBkYXRlSW5mbyIsImNvbmZpcm1UZXh0IiwidXBkYXRlTm93IiwiY2FuY2VsVGV4dCIsIm1heWJlTGF0ZXIiLCJvbkNvbmZpcm0iLCJvblVwZGF0ZUZhaWxlZCIsInVwZGF0ZUZhaWxlZCIsIm1hbnVhbFVwZGF0ZSIsImRpZFVwZGF0ZSIsInVwZGF0ZUluamVjdG9yIiwicmVxdWlyZSIsInJlbGF1bmNoIiwiZXhpdCIsImVyciIsIkxvZ2dlciIsImxvZyIsIlNldHRpbmdzIiwiRE9NTWFuYWdlciIsIndhaXRGb3JHdWlsZHMiLCJSZWFjdENvbXBvbmVudHMiLCJDb21wb25lbnRQYXRjaGVyIiwibW9kdWxlIiwiQnVpbHRpbnMiLCJwbHVnaW5FcnJvcnMiLCJQbHVnaW5NYW5hZ2VyIiwidGhlbWVFcnJvcnMiLCJUaGVtZU1hbmFnZXIiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJyZW1vdmUiLCJzaG93QWRkb25FcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwiZ2V0QkREYXRhIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiQ2hhbmdlbG9nIiwic2V0QkREYXRhIiwidGltZXNDaGVja2VkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0Zvckd1aWxkcyIsInJlYWR5U3RhdGUiLCJzZXRUaW1lb3V0Iiwid3JhcHBlciIsInNwbGl0IiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsImRlZmVyTG9hZGVkIiwiaW5qZWN0aW9uUGF0aCIsImZzIiwicGF0aCIsInJtcmYiLCJ5YXV6bCIsIm1rZGlycCIsInJlcXVlc3QiLCJwYXJlbnRQYXRoIiwiZm9sZGVyTmFtZSIsImJhc2VuYW1lIiwiemlwTGluayIsInNhdmVkWmlwIiwiZXh0cmFjdGVkRm9sZGVyIiwic3VjY2VzcyIsImdldCIsInVybCIsImVuY29kaW5nIiwiZXJyb3IiLCJyZXNwb25zZSIsImJvZHkiLCJzdGF0dXNDb2RlIiwiYWxyZWFkeUV4aXN0cyIsInJlcyIsImV4aXN0cyIsInJlbmFtZSIsIk1hdGgiLCJyb3VuZCIsInBlcmZvcm1hbmNlIiwibm93Iiwid3JpdGVGaWxlIiwiemlwZmlsZSIsInIiLCJvcGVuIiwibGF6eUVudHJpZXMiLCJ6aXAiLCJvbiIsImVudHJ5IiwiZmlsZU5hbWUiLCJlbmRzV2l0aCIsInJlYWRFbnRyeSIsImZ1bGxQYXRoIiwic3luYyIsImRpcm5hbWUiLCJvcGVuUmVhZFN0cmVhbSIsInJlYWRTdHJlYW0iLCJwaXBlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJvbmNlIiwiYmFja3VwRm9sZGVyIiwidW5saW5rIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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Q0FBdkIsQ0FBaEI7O0FBQ0EsTUFBSSxDQUFDcUQsT0FBTCxFQUFjO0FBQ1ZwRCxtREFBTSxDQUFDRCxHQUFQLENBQVcsZ0JBQVgsRUFBNkIsc0NBQTdCO0FBQ0EsV0FBT3FELE9BQVA7QUFDSCxHQW5FNEMsQ0FxRTdDOzs7QUFDQSxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNWcEQsbURBQU0sQ0FBQ0QsR0FBUCxDQUFXLGdCQUFYLEVBQTZCLDRDQUE3QjtBQUNBLFVBQU0sSUFBSTBCLE9BQUosQ0FBWUMsT0FBTyxJQUFJZ0IsSUFBSSxDQUFDUyxlQUFELEVBQWtCekIsT0FBbEIsQ0FBM0IsQ0FBTjtBQUNBLFVBQU0sSUFBSUQsT0FBSixDQUFZQyxPQUFPLElBQUljLEVBQUUsQ0FBQ3VCLE1BQUgsQ0FBVXdCLFlBQVYsRUFBd0JoRCxhQUF4QixFQUF1Q2IsT0FBdkMsQ0FBdkIsQ0FBTjtBQUNBLFdBQU8wQixPQUFQO0FBQ0gsR0EzRTRDLENBNkU3QztBQUNBOzs7QUFDQSxRQUFNLElBQUkzQixPQUFKLENBQVlDLE9BQU8sSUFBSWdCLElBQUksQ0FBQzZDLFlBQUQsRUFBZTdELE9BQWYsQ0FBM0IsQ0FBTjtBQUNBLFFBQU0sSUFBSUQsT0FBSixDQUFZQyxPQUFPLElBQUljLEVBQUUsQ0FBQ2dELE1BQUgsQ0FBVXRDLFFBQVYsRUFBb0J4QixPQUFwQixDQUF2QixDQUFOO0FBRUExQixpREFBTSxDQUFDQyxHQUFQLENBQVcsZ0JBQVgsRUFBNkIsbUJBQTdCO0FBQ0EsU0FBT21ELE9BQVA7QUFDSCxDQXBGRDs7QUFzRmUsbUVBQUl2RyxJQUFKLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb3JlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvY2FsZU1hbmFnZXIgZnJvbSBcIi4vbG9jYWxlbWFuYWdlclwiO1xyXG5cclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IHtDb25maWcsIENoYW5nZWxvZ30gZnJvbSBcImRhdGFcIjtcclxuLy8gaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG4vLyBpbXBvcnQgUXVpY2tFbW90ZU1lbnUgZnJvbSBcIi4uL2J1aWx0aW5zL2Vtb3RlbWVudVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgKiBhcyBCdWlsdGlucyBmcm9tIFwiYnVpbHRpbnNcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vdWkvbW9kYWxzXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgQ29tcG9uZW50UGF0Y2hlciBmcm9tIFwiLi9jb21wb25lbnRwYXRjaGVyXCI7XHJcbmltcG9ydCBTdHJpbmdzIGZyb20gXCIuL3N0cmluZ3NcIjtcclxuXHJcblxyXG5jb25zdCBHdWlsZENsYXNzZXMgPSBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXM7XHJcblxyXG5mdW5jdGlvbiBDb3JlKCkge1xyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgIE9iamVjdC5hc3NpZ24oQ29uZmlnLCBjb25maWcpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBhd2FpdCBMb2NhbGVNYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBpZiAoQ29uZmlnLnZlcnNpb24gPCBDb25maWcubWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIHJldHVybiBNb2RhbHMuYWxlcnQoU3RyaW5ncy5TdGFydHVwLm5vdFN1cHBvcnRlZCwgU3RyaW5ncy5TdGFydHVwLnZlcnNpb25NaXNtYXRjaC5mb3JtYXQoe2luamVjdG9yOiBDb25maWcudmVyc2lvbiwgcmVtb3RlOiBDb25maWcuYmJkVmVyc2lvbn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkVEKSB7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFscy5hbGVydChTdHJpbmdzLlN0YXJ0dXAubm90U3VwcG9ydGVkLCBTdHJpbmdzLlN0YXJ0dXAuaW5jb21wYXRpYmxlQXBwLmZvcm1hdCh7YXBwOiBcIkVuaGFuY2VkRGlzY29yZFwifSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuV2ViU29ja2V0ICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZSAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUuaW5jbHVkZXMoXCJQYXRjaGVkXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFscy5hbGVydChTdHJpbmdzLlN0YXJ0dXAubm90U3VwcG9ydGVkLCBTdHJpbmdzLlN0YXJ0dXAuaW5jb21wYXRpYmxlQXBwLmZvcm1hdCh7YXBwOiBcIlBvd2VyY29yZFwifSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhdGVzdExvY2FsVmVyc2lvbiA9IENvbmZpZy51cGRhdGVyID8gQ29uZmlnLnVwZGF0ZXIuTGF0ZXN0VmVyc2lvbiA6IENvbmZpZy5sYXRlc3RWZXJzaW9uO1xyXG4gICAgaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAgICAgTW9kYWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChTdHJpbmdzLlN0YXJ0dXAudXBkYXRlQXZhaWxhYmxlLCBTdHJpbmdzLlN0YXJ0dXAudXBkYXRlSW5mby5mb3JtYXQoe3ZlcnNpb246IGxhdGVzdExvY2FsVmVyc2lvbn0pLCB7XHJcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBTdHJpbmdzLlN0YXJ0dXAudXBkYXRlTm93LFxyXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiBTdHJpbmdzLlN0YXJ0dXAubWF5YmVMYXRlcixcclxuICAgICAgICAgICAgb25Db25maXJtOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwZGF0ZUZhaWxlZCA9ICgpID0+IHtNb2RhbHMuYWxlcnQoU3RyaW5ncy5TdGFydHVwLnVwZGF0ZUZhaWxlZCwgU3RyaW5ncy5TdGFydHVwLm1hbnVhbFVwZGF0ZSk7fTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlkVXBkYXRlID0gYXdhaXQgdGhpcy51cGRhdGVJbmplY3RvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlkVXBkYXRlKSByZXR1cm4gb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHAgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICAgICAgICAgICAgICBhcHAucmVsYXVuY2goKTtcclxuICAgICAgICAgICAgICAgICAgICBhcHAuZXhpdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlRmFpbGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XHJcbiAgICBTZXR0aW5ncy5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgRE9NTWFuYWdlci5pbml0aWFsaXplKCk7XHJcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JHdWlsZHMoKTtcclxuICAgIFJlYWN0Q29tcG9uZW50cy5pbml0aWFsaXplKCk7XHJcbiAgICBDb21wb25lbnRQYXRjaGVyLmluaXRpYWxpemUoKTtcclxuICAgIGZvciAoY29uc3QgbW9kdWxlIGluIEJ1aWx0aW5zKSBCdWlsdGluc1ttb2R1bGVdLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcclxuICAgIGNvbnN0IHBsdWdpbkVycm9ycyA9IFBsdWdpbk1hbmFnZXIuaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBjb25zdCB0aGVtZUVycm9ycyA9IFRoZW1lTWFuYWdlci5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJSZW1vdmluZyBMb2FkaW5nIEljb25cIik7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIilbMF0ucmVtb3ZlKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgTW9kYWxzLnNob3dBZGRvbkVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzLCB0aGVtZXM6IHRoZW1lRXJyb3JzfSk7XHJcblxyXG4gICAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XHJcbiAgICBpZiAoQ29uZmlnLmJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcclxuICAgICAgICBNb2RhbHMuc2hvd0NoYW5nZWxvZ01vZGFsKENoYW5nZWxvZyk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgQ29uZmlnLmJiZFZlcnNpb24pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUud2FpdEZvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGltZXNDaGVja2VkKys7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwiY29tcGxldGVcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUudXBkYXRlSW5qZWN0b3IgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGluamVjdGlvblBhdGggPSBEYXRhU3RvcmUuaW5qZWN0aW9uUGF0aDtcclxuICAgIGlmICghaW5qZWN0aW9uUGF0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG4gICAgY29uc3Qgcm1yZiA9IHJlcXVpcmUoXCJyaW1yYWZcIik7XHJcbiAgICBjb25zdCB5YXV6bCA9IHJlcXVpcmUoXCJ5YXV6bFwiKTtcclxuICAgIGNvbnN0IG1rZGlycCA9IHJlcXVpcmUoXCJta2RpcnBcIik7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XHJcblxyXG4gICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGgucmVzb2x2ZShpbmplY3Rpb25QYXRoLCBcIi4uXCIpO1xyXG4gICAgY29uc3QgZm9sZGVyTmFtZSA9IHBhdGguYmFzZW5hbWUoaW5qZWN0aW9uUGF0aCk7XHJcbiAgICBjb25zdCB6aXBMaW5rID0gXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL2FyY2hpdmUvaW5qZWN0b3IuemlwXCI7XHJcbiAgICBjb25zdCBzYXZlZFppcCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcImluamVjdG9yLnppcFwiKTtcclxuICAgIGNvbnN0IGV4dHJhY3RlZEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcIkJldHRlckRpc2NvcmRBcHAtaW5qZWN0b3JcIik7XHJcblxyXG4gICAgLy8gRG93bmxvYWQgdGhlIGluamVjdG9yIHppcCBmaWxlXHJcbiAgICBMb2dnZXIubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xyXG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcclxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xyXG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcblxyXG4gICAgICAgICAgICBMb2dnZXIubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcclxuXHJcbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXHJcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xyXG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcbiAgICBcclxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXHJcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcclxuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xyXG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcclxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcclxuXHJcbiAgICAgICAgTG9nZ2VyLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRXh0cmFjdGluZyBcIiArIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICAvLyBNYWtlIGFueSBuZWVkZWQgcGFyZW50IGRpcmVjdG9yaWVzXHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIG1rZGlycC5zeW5jKHBhdGguZGlybmFtZShmdWxsUGF0aCkpO1xyXG4gICAgICAgIHppcGZpbGUub3BlblJlYWRTdHJlYW0oZW50cnksIGZ1bmN0aW9uKGVyciwgcmVhZFN0cmVhbSkge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLm9uKFwiZW5kXCIsIGZ1bmN0aW9uKCkge3ppcGZpbGUucmVhZEVudHJ5KCk7fSk7IC8vIEdvIHRvIG5leHQgZmlsZSBhZnRlciB0aGlzXHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ucGlwZShmcy5jcmVhdGVXcml0ZVN0cmVhbShmdWxsUGF0aCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB6aXBmaWxlLnJlYWRFbnRyeSgpOyAvLyBTdGFydCByZWFkaW5nXHJcblxyXG4gICAgLy8gV2FpdCBmb3IgdGhlIGZpbmFsIGZpbGUgdG8gZmluaXNoXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHppcGZpbGUub25jZShcImVuZFwiLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBmaW5hbCBzdGVwXHJcbiAgICBjb25zdCBiYWNrdXBGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgYCR7Zm9sZGVyTmFtZX0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGluamVjdGlvblBhdGgsIGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFJlbmFtZSB0aGUgZXh0cmFjdGVkIGZvbGRlciB0byB3aGF0IGl0IHNob3VsZCBiZVxyXG4gICAgTG9nZ2VyLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xyXG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIExvZ2dlci5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgTG9nZ2VyLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4gcmVzdG9yaW5nIGJhY2t1cHMuXCIpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihleHRyYWN0ZWRGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShiYWNrdXBGb2xkZXIsIGluamVjdGlvblBhdGgsIHJlc29sdmUpKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgZXZlcnl0aGluZyBzaG91bGQgaGF2ZSBnb25lIHNtb290aGx5LlxyXG4gICAgLy8gQ2xlYW51cCB0aGUgYmFja3VwIGZvbGRlciB0aGVuIHJlbW92ZSB0aGUgemlwXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnVubGluayhzYXZlZFppcCwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); /***/ }), @@ -455,7 +443,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 DOMTools; });\n/**\r\n * Copyright 2018 Zachary Rauen\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the \"Software\"),\r\n * to deal in the Software without restriction, including without limitation the\r\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is furnished\r\n * to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\n * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\r\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r\n * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n * \r\n * From: https://github.com/rauenzi/BDPluginLibrary\r\n */\n\n/**\r\n * @interface\r\n * @name Offset\r\n * @property {number} top - Top offset of the target element.\r\n * @property {number} right - Right offset of the target element.\r\n * @property {number} bottom - Bottom offset of the target element.\r\n * @property {number} left - Left offset of the target element.\r\n * @property {number} height - Outer height of the target element.\r\n * @property {number} width - Outer width of the target element.\r\n */\n\n/**\r\n* Function that automatically removes added listener.\r\n* @callback module:DOMTools~CancelListener\r\n*/\nclass DOMTools {\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n /**\r\n * Adds a style to the document.\r\n * @param {string} id - identifier to use as the element id\r\n * @param {string} css - css to add to the document\r\n */\n\n\n static addStyle(id, css) {\n document.head.append(DOMTools.createElement(``));\n }\n /**\r\n * Removes a style from the document.\r\n * @param {string} id - original identifier used\r\n */\n\n\n static removeStyle(id) {\n const element = document.getElementById(id);\n if (element) element.remove();\n }\n /**\r\n * Adds/requires a remote script to be loaded\r\n * @param {string} id - identifier to use for this script\r\n * @param {string} url - url from which to load the script\r\n * @returns {Promise} promise that resolves when the script is loaded\r\n */\n\n\n static addScript(id, url) {\n return new Promise(resolve => {\n const script = document.createElement(\"script\");\n script.id = id;\n script.src = url;\n script.type = \"text/javascript\";\n script.onload = resolve;\n document.head.append(script);\n });\n }\n /**\r\n * Removes a remote script from the document.\r\n * @param {string} id - original identifier used\r\n */\n\n\n static removeScript(id) {\n id = this.escapeID(id);\n const element = document.getElementById(id);\n if (element) element.remove();\n } // https://javascript.info/js-animation\n\n\n static animate({\n timing = _ => _,\n update,\n duration\n }) {\n const start = performance.now();\n requestAnimationFrame(function animate(time) {\n // timeFraction goes from 0 to 1\n let timeFraction = (time - start) / duration;\n if (timeFraction > 1) timeFraction = 1; // calculate the current animation state\n\n const progress = timing(timeFraction);\n update(progress); // draw it\n\n if (timeFraction < 1) {\n requestAnimationFrame(animate);\n }\n });\n }\n /**\r\n * This is my shit version of not having to use `$` from jQuery. Meaning\r\n * that you can pass a selector and it will automatically run {@link module:DOMTools.query}.\r\n * It also means that you can pass a string of html and it will perform and return `parseHTML`.\r\n * @see module:DOMTools.parseHTML\r\n * @see module:DOMTools.query\r\n * @param {string} selector - Selector to query or HTML to parse\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - Either the result of `parseHTML` or `query`\r\n */\n\n\n static Q(selector) {\n const element = this.parseHTML(selector);\n const isHTML = element instanceof NodeList ? Array.from(element).some(n => n.nodeType === 1) : element.nodeType === 1;\n if (isHTML) return element;\n return this.query(selector);\n }\n /**\r\n * Essentially a shorthand for `document.querySelector`. If the `baseElement` is not provided\r\n * `document` is used by default.\r\n * @param {string} selector - Selector to query\r\n * @param {Element} [baseElement] - Element to base the query from\r\n * @returns {(Element|null)} - The found element or null if not found\r\n */\n\n\n static query(selector, baseElement) {\n if (!baseElement) baseElement = document;\n return baseElement.querySelector(selector);\n }\n /**\r\n * Essentially a shorthand for `document.querySelectorAll`. If the `baseElement` is not provided\r\n * `document` is used by default.\r\n * @param {string} selector - Selector to query\r\n * @param {Element} [baseElement] - Element to base the query from\r\n * @returns {Array} - Array of all found elements\r\n */\n\n\n static queryAll(selector, baseElement) {\n if (!baseElement) baseElement = document;\n return baseElement.querySelectorAll(selector);\n }\n /**\r\n * Parses a string of HTML and returns the results. If the second parameter is true,\r\n * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}.\r\n * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node.\r\n * \r\n * If the second parameter is false, then the return value will be the list of parsed\r\n * nodes and there were multiple top level nodes, otherwise the single node is returned.\r\n * @param {string} html - HTML to be parsed\r\n * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment`\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing\r\n */\n\n\n static parseHTML(html, fragment = false) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n const node = template.content.cloneNode(true);\n if (fragment) return node;\n return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0];\n }\n /** Alternate name for {@link module:DOMTools.parseHTML} */\n\n\n static createElement(html, fragment = false) {\n return this.parseHTML(html, fragment);\n }\n /**\r\n * Takes a string of html and escapes it using the brower's own escaping mechanism.\r\n * @param {String} html - html to be escaped\r\n */\n\n\n static escapeHTML(html) {\n const textNode = document.createTextNode(\"\");\n const spanElement = document.createElement(\"span\");\n spanElement.append(textNode);\n textNode.nodeValue = html;\n return spanElement.innerHTML;\n }\n /**\r\n * Adds a list of classes from the target element.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {...string} classes - Names of classes to add\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static addClass(element, ...classes) {\n classes = classes.flat().filter(c => c);\n\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n\n classes = classes.flat().filter(c => c);\n element.classList.add(...classes);\n return element;\n }\n /**\r\n * Removes a list of classes from the target element.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {...string} classes - Names of classes to remove\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static removeClass(element, ...classes) {\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n\n classes = classes.flat().filter(c => c);\n element.classList.remove(...classes);\n return element;\n }\n /**\r\n * When only one argument is present: Toggle class value;\r\n * i.e., if class exists then remove it and return false, if not, then add it and return true.\r\n * When a second argument is present:\r\n * If the second argument evaluates to true, add specified class value, and if it evaluates to false, remove it.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} classname - Name of class to toggle\r\n * @param {boolean} [indicator] - Optional indicator for if the class should be toggled\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static toggleClass(element, classname, indicator) {\n classname = classname.toString().split(\" \").filter(c => c);\n if (typeof indicator !== \"undefined\") classname.forEach(c => element.classList.toggle(c, indicator));else classname.forEach(c => element.classList.toggle(c));\n return element;\n }\n /**\r\n * Checks if an element has a specific class\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} classname - Name of class to check\r\n * @returns {boolean} - `true` if the element has the class, `false` otherwise.\r\n */\n\n\n static hasClass(element, classname) {\n return classname.toString().split(\" \").filter(c => c).every(c => element.classList.contains(c));\n }\n /**\r\n * Replaces one class with another\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} oldName - Name of class to replace\r\n * @param {string} newName - New name for the class\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static replaceClass(element, oldName, newName) {\n element.classList.replace(oldName, newName);\n return element;\n }\n /**\r\n * Appends `thisNode` to `thatNode`\r\n * @param {Node} thisNode - Node to be appended to another node\r\n * @param {Node} thatNode - Node for `thisNode` to be appended to\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static appendTo(thisNode, thatNode) {\n if (typeof thatNode == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.append(thisNode);\n return thisNode;\n }\n /**\r\n * Prepends `thisNode` to `thatNode`\r\n * @param {Node} thisNode - Node to be prepended to another node\r\n * @param {Node} thatNode - Node for `thisNode` to be prepended to\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static prependTo(thisNode, thatNode) {\n if (typeof thatNode == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.prepend(thisNode);\n return thisNode;\n }\n /**\r\n * Insert after a specific element, similar to jQuery's `thisElement.insertAfter(otherElement)`.\r\n * @param {Node} thisNode - The node to insert\r\n * @param {Node} targetNode - Node to insert after in the tree\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static insertAfter(thisNode, targetNode) {\n targetNode.parentNode.insertBefore(thisNode, targetNode.nextSibling);\n return thisNode;\n }\n /**\r\n * Insert after a specific element, similar to jQuery's `thisElement.after(newElement)`.\r\n * @param {Node} thisNode - The node to insert\r\n * @param {Node} newNode - Node to insert after in the tree\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static after(thisNode, newNode) {\n thisNode.parentNode.insertBefore(newNode, thisNode.nextSibling);\n return thisNode;\n }\n /**\r\n * Gets the next sibling element that matches the selector.\r\n * @param {Element} element - Element to get the next sibling of\r\n * @param {string} [selector=\"\"] - Optional selector\r\n * @returns {Element} - The sibling element\r\n */\n\n\n static next(element, selector = \"\") {\n return selector ? element.querySelector(\"+ \" + selector) : element.nextElementSibling;\n }\n /**\r\n * Gets all subsequent siblings.\r\n * @param {Element} element - Element to get next siblings of\r\n * @returns {NodeList} - The list of siblings\r\n */\n\n\n static nextAll(element) {\n return element.querySelectorAll(\"~ *\");\n }\n /**\r\n * Gets the subsequent siblings until an element matches the selector.\r\n * @param {Element} element - Element to get the following siblings of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static nextUntil(element, selector) {\n const next = [];\n\n while (element.nextElementSibling && !element.nextElementSibling.matches(selector)) next.push(element = element.nextElementSibling);\n\n return next;\n }\n /**\r\n * Gets the previous sibling element that matches the selector.\r\n * @param {Element} element - Element to get the previous sibling of\r\n * @param {string} [selector=\"\"] - Optional selector\r\n * @returns {Element} - The sibling element\r\n */\n\n\n static previous(element, selector = \"\") {\n const previous = element.previousElementSibling;\n if (selector) return previous && previous.matches(selector) ? previous : null;\n return previous;\n }\n /**\r\n * Gets all preceeding siblings.\r\n * @param {Element} element - Element to get preceeding siblings of\r\n * @returns {NodeList} - The list of siblings\r\n */\n\n\n static previousAll(element) {\n const previous = [];\n\n while (element.previousElementSibling) previous.push(element = element.previousElementSibling);\n\n return previous;\n }\n /**\r\n * Gets the preceeding siblings until an element matches the selector.\r\n * @param {Element} element - Element to get the preceeding siblings of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static previousUntil(element, selector) {\n const previous = [];\n\n while (element.previousElementSibling && !element.previousElementSibling.matches(selector)) previous.push(element = element.previousElementSibling);\n\n return previous;\n }\n /**\r\n * Find which index in children a certain node is. Similar to jQuery's `$.index()`\r\n * @param {HTMLElement} node - The node to find its index in parent\r\n * @returns {number} Index of the node\r\n */\n\n\n static indexInParent(node) {\n const children = node.parentNode.childNodes;\n let num = 0;\n\n for (let i = 0; i < children.length; i++) {\n if (children[i] == node) return num;\n if (children[i].nodeType == 1) num++;\n }\n\n return -1;\n }\n /** Shorthand for {@link module:DOMTools.indexInParent} */\n\n\n static index(node) {\n return this.indexInParent(node);\n }\n /**\r\n * Gets the parent of the element if it matches the selector,\r\n * otherwise returns null.\r\n * @param {Element} element - Element to get parent of\r\n * @param {string} [selector=\"\"] - Selector to match parent\r\n * @returns {(Element|null)} - The sibling element or null\r\n */\n\n\n static parent(element, selector = \"\") {\n return !selector || element.parentElement.matches(selector) ? element.parentElement : null;\n }\n /**\r\n * Gets all children of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all children of\r\n * @param {string} selector - Selector to match the children to\r\n * @returns {Array} - The list of children\r\n */\n\n\n static findChild(element, selector) {\n return element.querySelector(\":scope > \" + selector);\n }\n /**\r\n * Gets all children of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all children of\r\n * @param {string} selector - Selector to match the children to\r\n * @returns {Array} - The list of children\r\n */\n\n\n static findChildren(element, selector) {\n return element.querySelectorAll(\":scope > \" + selector);\n }\n /**\r\n * Gets all ancestors of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all parents of\r\n * @param {string} [selector=\"\"] - Selector to match the parents to\r\n * @returns {Array} - The list of parents\r\n */\n\n\n static parents(element, selector = \"\") {\n const parents = [];\n if (selector) while (element.parentElement && element.parentElement.closest(selector)) parents.push(element = element.parentElement.closest(selector));else while (element.parentElement) parents.push(element = element.parentElement);\n return parents;\n }\n /**\r\n * Gets the ancestors until an element matches the selector.\r\n * @param {Element} element - Element to get the ancestors of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of parents\r\n */\n\n\n static parentsUntil(element, selector) {\n const parents = [];\n\n while (element.parentElement && !element.parentElement.matches(selector)) parents.push(element = element.parentElement);\n\n return parents;\n }\n /**\r\n * Gets all siblings of the element that match the selector.\r\n * @param {Element} element - Element to get all siblings of\r\n * @param {string} [selector=\"*\"] - Selector to match the siblings to\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static siblings(element, selector = \"*\") {\n return Array.from(element.parentElement.children).filter(e => e != element && e.matches(selector));\n }\n /**\r\n * Sets or gets css styles for a specific element. If `value` is provided\r\n * then it sets the style and returns the element to allow for chaining,\r\n * otherwise returns the style. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} attribute - Attribute to get or set\r\n * @param {string} [value] - Value to set for attribute\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static css(element, attribute, value) {\n if (typeof value == \"undefined\") return global.getComputedStyle(element)[attribute];\n element.style[attribute] = value;\n return element;\n }\n /**\r\n * Sets or gets the width for a specific element. If `value` is provided\r\n * then it sets the width and returns the element to allow for chaining,\r\n * otherwise returns the width. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} [value] - Width to set\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static width(element, value) {\n if (typeof value == \"undefined\") return parseInt(getComputedStyle(element).width);\n element.style.width = value;\n return element;\n }\n /**\r\n * Sets or gets the height for a specific element. If `value` is provided\r\n * then it sets the height and returns the element to allow for chaining,\r\n * otherwise returns the height. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} [value] - Height to set\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static height(element, value) {\n if (typeof value == \"undefined\") return parseInt(getComputedStyle(element).height);\n element.style.height = value;\n return element;\n }\n /**\r\n * Sets the inner text of an element if given a value, otherwise returns it.\r\n * @param {Element} element - Element to set the text of\r\n * @param {string} [text] - Content to set\r\n * @returns {string} - Either the string set by this call or the current text content of the node.\r\n */\n\n\n static text(element, text) {\n if (typeof text == \"undefined\") return element.textContent;\n return element.textContent = text;\n }\n /**\r\n * Returns the innerWidth of the element.\r\n * @param {Element} element - Element to retrieve inner width of\r\n * @return {number} - The inner width of the element.\r\n */\n\n\n static innerWidth(element) {\n return element.clientWidth;\n }\n /**\r\n * Returns the innerHeight of the element.\r\n * @param {Element} element - Element to retrieve inner height of\r\n * @return {number} - The inner height of the element.\r\n */\n\n\n static innerHeight(element) {\n return element.clientHeight;\n }\n /**\r\n * Returns the outerWidth of the element.\r\n * @param {Element} element - Element to retrieve outer width of\r\n * @return {number} - The outer width of the element.\r\n */\n\n\n static outerWidth(element) {\n return element.offsetWidth;\n }\n /**\r\n * Returns the outerHeight of the element.\r\n * @param {Element} element - Element to retrieve outer height of\r\n * @return {number} - The outer height of the element.\r\n */\n\n\n static outerHeight(element) {\n return element.offsetHeight;\n }\n /**\r\n * Gets the offset of the element in the page.\r\n * @param {Element} element - Element to get offset of\r\n * @return {Offset} - The offset of the element\r\n */\n\n\n static offset(element) {\n return element.getBoundingClientRect();\n }\n\n static get listeners() {\n return this._listeners || (this._listeners = {});\n }\n /**\r\n * This is similar to jQuery's `on` function and can *hopefully* be used in the same way.\r\n * \r\n * Rather than attempt to explain, I'll show some example usages.\r\n * \r\n * The following will add a click listener (in the `myPlugin` namespace) to `element`.\r\n * `DOMTools.on(element, \"click.myPlugin\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (in the `myPlugin` namespace) to `element` that only fires when the target is a `.block` element.\r\n * `DOMTools.on(element, \"click.myPlugin\", \".block\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (without namespace) to `element`.\r\n * `DOMTools.on(element, \"click\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (without namespace) to `element` that only fires once.\r\n * `const cancel = DOMTools.on(element, \"click\", () => {console.log(\"fired!\"); cancel();});`\r\n * \r\n * @param {Element} element - Element to add listener to\r\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} delegate - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\r\n */\n\n\n static on(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function (event) {\n if (event.target.matches(delegate)) {\n callback(event);\n }\n };\n element.addEventListener(type, eventFunc);\n\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n\n return cancel;\n }\n /**\r\n * Functionality for this method matches {@link module:DOMTools.on} but automatically cancels itself\r\n * and removes the listener upon the first firing of the desired event.\r\n * \r\n * @param {Element} element - Element to add listener to\r\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} delegate - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\r\n */\n\n\n static once(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? function (event) {\n callback(event);\n element.removeEventListener(type, eventFunc);\n } : function (event) {\n if (!event.target.matches(delegate)) return;\n callback(event);\n element.removeEventListener(type, eventFunc);\n };\n element.addEventListener(type, eventFunc);\n\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n\n return cancel;\n }\n\n static __offAll(event, element) {\n const [type, namespace] = event.split(\".\");\n\n let matchFilter = listener => listener.event == type,\n defaultFilter = _ => _;\n\n if (element) matchFilter = l => l.event == type && l.element == element, defaultFilter = l => l.element == element;\n const listeners = this.listeners[namespace] || [];\n const list = type ? listeners.filter(matchFilter) : listeners.filter(defaultFilter);\n\n for (let c = 0; c < list.length; c++) list[c].cancel();\n }\n /**\r\n * This is similar to jQuery's `off` function and can *hopefully* be used in the same way.\r\n * \r\n * Rather than attempt to explain, I'll show some example usages.\r\n * \r\n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element`.\r\n * `DOMTools.off(element, \"click.myPlugin\", onClick);`\r\n * \r\n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element` that only fired when the target is a `.block` element.\r\n * `DOMTools.off(element, \"click.myPlugin\", \".block\", onClick);`\r\n * \r\n * The following will remove a click listener (without namespace) from `element`.\r\n * `DOMTools.off(element, \"click\", onClick);`\r\n * \r\n * The following will remove all listeners in namespace `myPlugin` from `element`.\r\n * `DOMTools.off(element, \".myPlugin\");`\r\n * \r\n * The following will remove all click listeners in namespace `myPlugin` from *all elements*.\r\n * `DOMTools.off(\"click.myPlugin\");`\r\n * \r\n * The following will remove all listeners in namespace `myPlugin` from *all elements*.\r\n * `DOMTools.off(\".myPlugin\");`\r\n * \r\n * @param {(Element|string)} element - Element to remove listener from\r\n * @param {string} [event] - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} [delegate] - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {Element} - The original element to allow for chaining\r\n */\n\n\n static off(element, event, delegate, callback) {\n if (typeof element == \"string\") return this.__offAll(element);\n const [type, namespace] = event.split(\".\");\n if (namespace) return this.__offAll(event, element);\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function (event) {\n if (event.target.matches(delegate)) {\n callback(event);\n }\n };\n element.removeEventListener(type, eventFunc);\n return element;\n }\n /**\r\n * Adds a listener for when the node is added/removed from the document body.\r\n * The listener is automatically removed upon firing.\r\n * @param {HTMLElement} node - node to wait for\r\n * @param {callable} callback - function to be performed on event\r\n * @param {boolean} onMount - determines if it should fire on Mount or on Unmount\r\n */\n\n\n static onMountChange(node, callback, onMount = true) {\n const wrappedCallback = () => {\n this.observer.unsubscribe(wrappedCallback);\n callback();\n };\n\n this.observer.subscribe(wrappedCallback, mutation => {\n const nodes = Array.from(onMount ? mutation.addedNodes : mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n return directMatch || parentMatch;\n });\n return node;\n }\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `true` */\n\n\n static onMount(node, callback) {\n return this.onMountChange(node, callback);\n }\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `false` */\n\n\n static onUnmount(node, callback) {\n return this.onMountChange(node, callback, false);\n }\n /** Alias for {@link module:DOMTools.onMount} */\n\n\n static onAdded(node, callback) {\n return this.onMount(node, callback);\n }\n /** Alias for {@link module:DOMTools.onUnmount} */\n\n\n static onRemoved(node, callback) {\n return this.onUnmount(node, callback, false);\n }\n /**\r\n * Helper function which combines multiple elements into one parent element\r\n * @param {Array} elements - array of elements to put into a single parent\r\n */\n\n\n static wrap(elements) {\n const domWrapper = this.parseHTML(`
`);\n\n for (let e = 0; e < elements.length; e++) domWrapper.appendChild(elements[e]);\n\n return domWrapper;\n }\n /**\r\n * Resolves the node to an HTMLElement. This is mainly used by library modules.\r\n * @param {(jQuery|Element)} node - node to resolve\r\n */\n\n\n static resolveElement(node) {\n if (!(node instanceof jQuery) && !(node instanceof Element)) return undefined;\n return node instanceof jQuery ? node[0] : node;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZG9tdG9vbHMuanM/MTNkZCJdLCJuYW1lcyI6WyJET01Ub29scyIsImVzY2FwZUlEIiwiaWQiLCJyZXBsYWNlIiwiYWRkU3R5bGUiLCJjc3MiLCJkb2N1bWVudCIsImhlYWQiLCJhcHBlbmQiLCJjcmVhdGVFbGVtZW50IiwicmVtb3ZlU3R5bGUiLCJlbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmUiLCJhZGRTY3JpcHQiLCJ1cmwiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNjcmlwdCIsInNyYyIsInR5cGUiLCJvbmxvYWQiLCJyZW1vdmVTY3JpcHQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwic3RhcnQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRpbWUiLCJ0aW1lRnJhY3Rpb24iLCJwcm9ncmVzcyIsIlEiLCJzZWxlY3RvciIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0IiwiQXJyYXkiLCJmcm9tIiwic29tZSIsIm4iLCJub2RlVHlwZSIsInF1ZXJ5IiwiYmFzZUVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlBbGwiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJpbm5lckhUTUwiLCJub2RlIiwiY29udGVudCIsImNsb25lTm9kZSIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJjbGFzc2VzIiwiZmxhdCIsImZpbHRlciIsImMiLCJ0b1N0cmluZyIsInNwbGl0IiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsImNsYXNzbmFtZSIsImluZGljYXRvciIsImZvckVhY2giLCJ0b2dnbGUiLCJoYXNDbGFzcyIsImV2ZXJ5IiwiY29udGFpbnMiLCJyZXBsYWNlQ2xhc3MiLCJvbGROYW1lIiwibmV3TmFtZSIsImFwcGVuZFRvIiwidGhpc05vZGUiLCJ0aGF0Tm9kZSIsInByZXBlbmRUbyIsInByZXBlbmQiLCJpbnNlcnRBZnRlciIsInRhcmdldE5vZGUiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJhZnRlciIsIm5ld05vZGUiLCJuZXh0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwibmV4dEFsbCIsIm5leHRVbnRpbCIsIm1hdGNoZXMiLCJwdXNoIiwicHJldmlvdXMiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNBbGwiLCJwcmV2aW91c1VudGlsIiwiaW5kZXhJblBhcmVudCIsImNoaWxkcmVuIiwibnVtIiwiaSIsImluZGV4IiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsImZpbmRDaGlsZCIsImZpbmRDaGlsZHJlbiIsInBhcmVudHMiLCJjbG9zZXN0IiwicGFyZW50c1VudGlsIiwic2libGluZ3MiLCJlIiwiYXR0cmlidXRlIiwidmFsdWUiLCJnbG9iYWwiLCJnZXRDb21wdXRlZFN0eWxlIiwic3R5bGUiLCJ3aWR0aCIsInBhcnNlSW50IiwiaGVpZ2h0IiwidGV4dCIsInRleHRDb250ZW50IiwiaW5uZXJXaWR0aCIsImNsaWVudFdpZHRoIiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJvdXRlcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJvdXRlckhlaWdodCIsIm9mZnNldEhlaWdodCIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJvbiIsImV2ZW50IiwiZGVsZWdhdGUiLCJjYWxsYmFjayIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwidGFyZ2V0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNhbmNlbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJuZXdDYW5jZWwiLCJzcGxpY2UiLCJmaW5kSW5kZXgiLCJsIiwib25jZSIsIl9fb2ZmQWxsIiwibWF0Y2hGaWx0ZXIiLCJsaXN0ZW5lciIsImRlZmF1bHRGaWx0ZXIiLCJsaXN0Iiwib2ZmIiwib25Nb3VudENoYW5nZSIsIm9uTW91bnQiLCJ3cmFwcGVkQ2FsbGJhY2siLCJvYnNlcnZlciIsInVuc3Vic2NyaWJlIiwic3Vic2NyaWJlIiwibXV0YXRpb24iLCJub2RlcyIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJkaXJlY3RNYXRjaCIsImluZGV4T2YiLCJwYXJlbnRNYXRjaCIsIm9uVW5tb3VudCIsIm9uQWRkZWQiLCJvblJlbW92ZWQiLCJ3cmFwIiwiZWxlbWVudHMiLCJkb21XcmFwcGVyIiwiYXBwZW5kQ2hpbGQiLCJyZXNvbHZlRWxlbWVudCIsImpRdWVyeSIsIkVsZW1lbnQiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkE7Ozs7Ozs7Ozs7O0FBV0M7Ozs7QUFLYyxNQUFNQSxRQUFOLENBQWU7QUFFMUIsU0FBT0MsUUFBUCxDQUFnQkMsRUFBaEIsRUFBb0I7QUFDaEIsV0FBT0EsRUFBRSxDQUFDQyxPQUFILENBQVcsb0JBQVgsRUFBaUMsR0FBakMsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLSCxTQUFPQyxRQUFQLENBQWdCRixFQUFoQixFQUFvQkcsR0FBcEIsRUFBeUI7QUFDeEJDLFlBQVEsQ0FBQ0MsSUFBVCxDQUFjQyxNQUFkLENBQXFCUixRQUFRLENBQUNTLGFBQVQsQ0FBd0IsY0FBYVAsRUFBRyxLQUFJRyxHQUFJLFVBQWhELENBQXJCO0FBQ0E7QUFFRDs7Ozs7O0FBSUEsU0FBT0ssV0FBUCxDQUFtQlIsRUFBbkIsRUFBdUI7QUFDdEIsVUFBTVMsT0FBTyxHQUFHTCxRQUFRLENBQUNNLGNBQVQsQ0FBd0JWLEVBQXhCLENBQWhCO0FBQ0EsUUFBSVMsT0FBSixFQUFhQSxPQUFPLENBQUNFLE1BQVI7QUFDYjtBQUVE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QXVCRixRQUFRLENBQUM5RCxDQUFELENBQS9COztBQUMxQyxXQUFPK0QsVUFBUDtBQUNIO0FBRUQ7Ozs7OztBQUlBLFNBQU9FLGNBQVAsQ0FBc0JuSSxJQUF0QixFQUE0QjtBQUN4QixRQUFJLEVBQUVBLElBQUksWUFBWW9JLE1BQWxCLEtBQTZCLEVBQUVwSSxJQUFJLFlBQVlxSSxPQUFsQixDQUFqQyxFQUE2RCxPQUFPQyxTQUFQO0FBQzdELFdBQU90SSxJQUFJLFlBQVlvSSxNQUFoQixHQUF5QnBJLElBQUksQ0FBQyxDQUFELENBQTdCLEdBQW1DQSxJQUExQztBQUNIOztBQXhzQnlCIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvZG9tdG9vbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29weXJpZ2h0IDIwMTggWmFjaGFyeSBSYXVlblxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcclxuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXHJcbiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXHJcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWRcclxuICogdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELFxyXG4gKiBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQVxyXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXHJcbiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxyXG4gKiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkVcclxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcbiAqIFxyXG4gKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CRFBsdWdpbkxpYnJhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQGludGVyZmFjZVxyXG4gKiBAbmFtZSBPZmZzZXRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRvcCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIC0gQm90dG9tIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gT3V0ZXIgd2lkdGggb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKi9cclxuXHJcbiAvKipcclxuICogRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWRkZWQgbGlzdGVuZXIuXHJcbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcclxuICovXHJcbiBcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEFkZHMgYSBzdHlsZSB0byB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgYXMgdGhlIGVsZW1lbnQgaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU3R5bGUoaWQsIGNzcykge1xyXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMvcmVxdWlyZXMgYSByZW1vdGUgc2NyaXB0IHRvIGJlIGxvYWRlZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGZvciB0aGlzIHNjcmlwdFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjcmlwdCBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XHJcblx0XHRcdHNjcmlwdC5zcmMgPSB1cmw7XHJcblx0XHRcdHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcclxuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHNjcmlwdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcclxuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cclxuICAgIHN0YXRpYyBhbmltYXRlKHt0aW1pbmcgPSBfID0+IF8sIHVwZGF0ZSwgZHVyYXRpb259KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xyXG4gICAgICAgICAgLy8gdGltZUZyYWN0aW9uIGdvZXMgZnJvbSAwIHRvIDFcclxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA+IDEpIHRpbWVGcmFjdGlvbiA9IDE7XHJcbiAgICAgIFxyXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1pbmcodGltZUZyYWN0aW9uKTtcclxuICAgICAgXHJcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XHJcbiAgICAgIFxyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA8IDEpIHtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBteSBzaGl0IHZlcnNpb24gb2Ygbm90IGhhdmluZyB0byB1c2UgYCRgIGZyb20galF1ZXJ5LiBNZWFuaW5nXHJcbiAgICAgKiB0aGF0IHlvdSBjYW4gcGFzcyBhIHNlbGVjdG9yIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucXVlcnl9LlxyXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTFxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucXVlcnlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gRWl0aGVyIHRoZSByZXN1bHQgb2YgYHBhcnNlSFRNTGAgb3IgYHF1ZXJ5YFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSFRNTChzZWxlY3Rvcik7XHJcbiAgICAgICAgY29uc3QgaXNIVE1MID0gZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0ID8gQXJyYXkuZnJvbShlbGVtZW50KS5zb21lKG4gPT4gbi5ub2RlVHlwZSA9PT0gMSkgOiBlbGVtZW50Lm5vZGVUeXBlID09PSAxO1xyXG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5KHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBBcnJheSBvZiBhbGwgZm91bmQgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5QWxsKHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXHJcbiAgICAgKiB0aGUgcGFyc2VkIEhUTUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGRvY3VtZW50IGZyYWdtZW50IHtAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50fS5cclxuICAgICAqIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpc3Qgb2YgZWxlbWVudHMgYXQgdGhlIHRvcCBsZXZlbCwgdGhleSBjYW4gdGhlbiBiZSBhcHBlbmRlZCBhbGwgYXQgb25jZSB0byBhbm90aGVyIG5vZGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcclxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xyXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXHJcbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7cmV0dXJuIHRoaXMucGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50KTt9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBzdHJpbmcgb2YgaHRtbCBhbmQgZXNjYXBlcyBpdCB1c2luZyB0aGUgYnJvd2VyJ3Mgb3duIGVzY2FwaW5nIG1lY2hhbmlzbS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gaHRtbCB0byBiZSBlc2NhcGVkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlc2NhcGVIVE1MKGh0bWwpIHtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgc3BhbkVsZW1lbnQuYXBwZW5kKHRleHROb2RlKTtcclxuICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gcmVtb3ZlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcmVzZW50OiBUb2dnbGUgY2xhc3MgdmFsdWU7XHJcbiAgICAgKiBpLmUuLCBpZiBjbGFzcyBleGlzdHMgdGhlbiByZW1vdmUgaXQgYW5kIHJldHVybiBmYWxzZSwgaWYgbm90LCB0aGVuIGFkZCBpdCBhbmQgcmV0dXJuIHRydWUuXHJcbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGV2YWx1YXRlcyB0byB0cnVlLCBhZGQgc3BlY2lmaWVkIGNsYXNzIHZhbHVlLCBhbmQgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCByZW1vdmUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmRpY2F0b3JdIC0gT3B0aW9uYWwgaW5kaWNhdG9yIGZvciBpZiB0aGUgY2xhc3Mgc2hvdWxkIGJlIHRvZ2dsZWRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvZ2dsZUNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSwgaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgY2xhc3NuYW1lID0gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XHJcbiAgICAgICAgZWxzZSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUpIHtcclxuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgb25lIGNsYXNzIHdpdGggYW5vdGhlclxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIGZvciB0aGUgY2xhc3NcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlcGxhY2VDbGFzcyhlbGVtZW50LCBvbGROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZShvbGROYW1lLCBuZXdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBhcHBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgcHJlcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJlcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUucHJlcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldE5vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluc2VydEFmdGVyKHRoaXNOb2RlLCB0YXJnZXROb2RlKSB7XHJcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuYWZ0ZXIobmV3RWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZnRlcih0aGlzTm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgICAgIHRoaXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXNOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIisgXCIgKyBzZWxlY3RvcikgOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHN1YnNlcXVlbnQgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ+ICpcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdWJzZXF1ZW50IHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHByZWNlZWRpbmcgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIHdoaWNoIGluZGV4IGluIGNoaWxkcmVuIGEgY2VydGFpbiBub2RlIGlzLiBTaW1pbGFyIHRvIGpRdWVyeSdzIGAkLmluZGV4KClgXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIG5vZGUgdG8gZmluZCBpdHMgaW5kZXggaW4gcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5kZXhJblBhcmVudChub2RlKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICBsZXQgbnVtID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgPT0gMSkgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXHJcbiAgICBzdGF0aWMgaW5kZXgobm9kZSkge3JldHVybiB0aGlzLmluZGV4SW5QYXJlbnQobm9kZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgbnVsbC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHBhcmVudFxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBzaWJsaW5nIGVsZW1lbnQgb3IgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiAhc2VsZWN0b3IgfHwgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGQoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgYW5jZXN0b3JzIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBwYXJlbnRzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xyXG4gICAgICAgIGVsc2Ugd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgYW5jZXN0b3JzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCIqXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHNpYmxpbmdzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNpYmxpbmdzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCIqXCIpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyBjc3Mgc3R5bGVzIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgc3R5bGUgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlIC0gQXR0cmlidXRlIHRvIGdldCBvciBzZXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWwuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVthdHRyaWJ1dGVdO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbYXR0cmlidXRlXSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSB3aWR0aCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHdpZHRoIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBXaWR0aCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3aWR0aChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIGhlaWdodCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGVpZ2h0LiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIEhlaWdodCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoZWlnaHQoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQgaWYgZ2l2ZW4gYSB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIENvbnRlbnQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVpdGhlciB0aGUgc3RyaW5nIHNldCBieSB0aGlzIGNhbGwgb3IgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBub2RlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdGV4dChlbGVtZW50LCB0ZXh0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0ZXh0KSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgcGFnZS5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG9mZnNldCBvZlxyXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZnNldChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIG9uY2UuXHJcbiAgICAgKiBgY29uc3QgY2FuY2VsID0gRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJmaXJlZCFcIik7IGNhbmNlbCgpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb24oZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kIG1hdGNoZXMge0BsaW5rIG1vZHVsZTpET01Ub29scy5vbn0gYnV0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyBpdHNlbGZcclxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uY2UoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBsZXQgbWF0Y2hGaWx0ZXIgPSBsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PSB0eXBlLCBkZWZhdWx0RmlsdGVyID0gXyA9PiBfO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBtYXRjaEZpbHRlciA9IGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50LCBkZWZhdWx0RmlsdGVyID0gbCA9PiBsLmVsZW1lbnQgPT0gZWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB0eXBlID8gbGlzdGVuZXJzLmZpbHRlcihtYXRjaEZpbHRlcikgOiBsaXN0ZW5lcnMuZmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbGlzdC5sZW5ndGg7IGMrKykgbGlzdFtjXS5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZWQgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGNsaWNrIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcImNsaWNrLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBlbGVtZW50IC0gRWxlbWVudCB0byByZW1vdmUgbGlzdGVuZXIgZnJvbVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudF0gLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIG9yaWdpbmFsIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmYoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZWxlbWVudCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHRoaXMuX19vZmZBbGwoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkgcmV0dXJuIHRoaXMuX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgbm9kZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGJvZHkuXHJcbiAgICAgKiBUaGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHVwb24gZmlyaW5nLlxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uTW91bnQgLSBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBmaXJlIG9uIE1vdW50IG9yIG9uIFVubW91bnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIG9uTW91bnQgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG9uTW91bnQgPyBtdXRhdGlvbi5hZGRlZE5vZGVzIDogbXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xyXG4gICAgc3RhdGljIG9uVW5tb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cclxuICAgIHN0YXRpYyBvbkFkZGVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnQobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb21iaW5lcyBtdWx0aXBsZSBlbGVtZW50cyBpbnRvIG9uZSBwYXJlbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheTxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gYXJyYXkgb2YgZWxlbWVudHMgdG8gcHV0IGludG8gYSBzaW5nbGUgcGFyZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3cmFwKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZG9tV3JhcHBlciA9IHRoaXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiZG9tLXdyYXBwZXJcIj48L2Rpdj5gKTtcclxuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcclxuICAgICAgICByZXR1cm4gZG9tV3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc29sdmVzIHRoZSBub2RlIHRvIGFuIEhUTUxFbGVtZW50LiBUaGlzIGlzIG1haW5seSB1c2VkIGJ5IGxpYnJhcnkgbW9kdWxlcy5cclxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVzb2x2ZUVsZW1lbnQobm9kZSkge1xyXG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/domtools.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DOMTools; });\n/**\r\n * Copyright 2018 Zachary Rauen\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the \"Software\"),\r\n * to deal in the Software without restriction, including without limitation the\r\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is furnished\r\n * to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\n * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\r\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r\n * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n * \r\n * From: https://github.com/rauenzi/BDPluginLibrary\r\n */\n\n/**\r\n * @interface\r\n * @name Offset\r\n * @property {number} top - Top offset of the target element.\r\n * @property {number} right - Right offset of the target element.\r\n * @property {number} bottom - Bottom offset of the target element.\r\n * @property {number} left - Left offset of the target element.\r\n * @property {number} height - Outer height of the target element.\r\n * @property {number} width - Outer width of the target element.\r\n */\n\n/**\r\n* Function that automatically removes added listener.\r\n* @callback module:DOMTools~CancelListener\r\n*/\nclass DOMTools {\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n /**\r\n * Adds a style to the document.\r\n * @param {string} id - identifier to use as the element id\r\n * @param {string} css - css to add to the document\r\n */\n\n\n static addStyle(id, css) {\n document.head.append(DOMTools.createElement(``));\n }\n /**\r\n * Removes a style from the document.\r\n * @param {string} id - original identifier used\r\n */\n\n\n static removeStyle(id) {\n const element = document.getElementById(id);\n if (element) element.remove();\n }\n /**\r\n * Adds/requires a remote script to be loaded\r\n * @param {string} id - identifier to use for this script\r\n * @param {string} url - url from which to load the script\r\n * @returns {Promise} promise that resolves when the script is loaded\r\n */\n\n\n static addScript(id, url) {\n return new Promise(resolve => {\n const script = document.createElement(\"script\");\n script.id = id;\n script.src = url;\n script.type = \"text/javascript\";\n script.onload = resolve;\n document.head.append(script);\n });\n }\n /**\r\n * Removes a remote script from the document.\r\n * @param {string} id - original identifier used\r\n */\n\n\n static removeScript(id) {\n id = this.escapeID(id);\n const element = document.getElementById(id);\n if (element) element.remove();\n } // https://javascript.info/js-animation\n\n\n static animate({\n timing = _ => _,\n update,\n duration\n }) {\n const start = performance.now();\n requestAnimationFrame(function animate(time) {\n // timeFraction goes from 0 to 1\n let timeFraction = (time - start) / duration;\n if (timeFraction > 1) timeFraction = 1; // calculate the current animation state\n\n const progress = timing(timeFraction);\n update(progress); // draw it\n\n if (timeFraction < 1) {\n requestAnimationFrame(animate);\n }\n });\n }\n /**\r\n * This is my shit version of not having to use `$` from jQuery. Meaning\r\n * that you can pass a selector and it will automatically run {@link module:DOMTools.query}.\r\n * It also means that you can pass a string of html and it will perform and return `parseHTML`.\r\n * @see module:DOMTools.parseHTML\r\n * @see module:DOMTools.query\r\n * @param {string} selector - Selector to query or HTML to parse\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - Either the result of `parseHTML` or `query`\r\n */\n\n\n static Q(selector) {\n const element = this.parseHTML(selector);\n const isHTML = element instanceof NodeList ? Array.from(element).some(n => n.nodeType === 1) : element.nodeType === 1;\n if (isHTML) return element;\n return this.query(selector);\n }\n /**\r\n * Essentially a shorthand for `document.querySelector`. If the `baseElement` is not provided\r\n * `document` is used by default.\r\n * @param {string} selector - Selector to query\r\n * @param {Element} [baseElement] - Element to base the query from\r\n * @returns {(Element|null)} - The found element or null if not found\r\n */\n\n\n static query(selector, baseElement) {\n if (!baseElement) baseElement = document;\n return baseElement.querySelector(selector);\n }\n /**\r\n * Essentially a shorthand for `document.querySelectorAll`. If the `baseElement` is not provided\r\n * `document` is used by default.\r\n * @param {string} selector - Selector to query\r\n * @param {Element} [baseElement] - Element to base the query from\r\n * @returns {Array} - Array of all found elements\r\n */\n\n\n static queryAll(selector, baseElement) {\n if (!baseElement) baseElement = document;\n return baseElement.querySelectorAll(selector);\n }\n /**\r\n * Parses a string of HTML and returns the results. If the second parameter is true,\r\n * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}.\r\n * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node.\r\n * \r\n * If the second parameter is false, then the return value will be the list of parsed\r\n * nodes and there were multiple top level nodes, otherwise the single node is returned.\r\n * @param {string} html - HTML to be parsed\r\n * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment`\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing\r\n */\n\n\n static parseHTML(html, fragment = false) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n const node = template.content.cloneNode(true);\n if (fragment) return node;\n return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0];\n }\n /** Alternate name for {@link module:DOMTools.parseHTML} */\n\n\n static createElement(html, fragment = false) {\n return this.parseHTML(html, fragment);\n }\n /**\r\n * Takes a string of html and escapes it using the brower's own escaping mechanism.\r\n * @param {String} html - html to be escaped\r\n */\n\n\n static escapeHTML(html) {\n const textNode = document.createTextNode(\"\");\n const spanElement = document.createElement(\"span\");\n spanElement.append(textNode);\n textNode.nodeValue = html;\n return spanElement.innerHTML;\n }\n /**\r\n * Adds a list of classes from the target element.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {...string} classes - Names of classes to add\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static addClass(element, ...classes) {\n classes = classes.flat().filter(c => c);\n\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n\n classes = classes.flat().filter(c => c);\n element.classList.add(...classes);\n return element;\n }\n /**\r\n * Removes a list of classes from the target element.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {...string} classes - Names of classes to remove\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static removeClass(element, ...classes) {\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n\n classes = classes.flat().filter(c => c);\n element.classList.remove(...classes);\n return element;\n }\n /**\r\n * When only one argument is present: Toggle class value;\r\n * i.e., if class exists then remove it and return false, if not, then add it and return true.\r\n * When a second argument is present:\r\n * If the second argument evaluates to true, add specified class value, and if it evaluates to false, remove it.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} classname - Name of class to toggle\r\n * @param {boolean} [indicator] - Optional indicator for if the class should be toggled\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static toggleClass(element, classname, indicator) {\n classname = classname.toString().split(\" \").filter(c => c);\n if (typeof indicator !== \"undefined\") classname.forEach(c => element.classList.toggle(c, indicator));else classname.forEach(c => element.classList.toggle(c));\n return element;\n }\n /**\r\n * Checks if an element has a specific class\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} classname - Name of class to check\r\n * @returns {boolean} - `true` if the element has the class, `false` otherwise.\r\n */\n\n\n static hasClass(element, classname) {\n return classname.toString().split(\" \").filter(c => c).every(c => element.classList.contains(c));\n }\n /**\r\n * Replaces one class with another\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} oldName - Name of class to replace\r\n * @param {string} newName - New name for the class\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static replaceClass(element, oldName, newName) {\n element.classList.replace(oldName, newName);\n return element;\n }\n /**\r\n * Appends `thisNode` to `thatNode`\r\n * @param {Node} thisNode - Node to be appended to another node\r\n * @param {Node} thatNode - Node for `thisNode` to be appended to\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static appendTo(thisNode, thatNode) {\n if (typeof thatNode == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.append(thisNode);\n return thisNode;\n }\n /**\r\n * Prepends `thisNode` to `thatNode`\r\n * @param {Node} thisNode - Node to be prepended to another node\r\n * @param {Node} thatNode - Node for `thisNode` to be prepended to\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static prependTo(thisNode, thatNode) {\n if (typeof thatNode == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.prepend(thisNode);\n return thisNode;\n }\n /**\r\n * Insert after a specific element, similar to jQuery's `thisElement.insertAfter(otherElement)`.\r\n * @param {Node} thisNode - The node to insert\r\n * @param {Node} targetNode - Node to insert after in the tree\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static insertAfter(thisNode, targetNode) {\n targetNode.parentNode.insertBefore(thisNode, targetNode.nextSibling);\n return thisNode;\n }\n /**\r\n * Insert after a specific element, similar to jQuery's `thisElement.after(newElement)`.\r\n * @param {Node} thisNode - The node to insert\r\n * @param {Node} newNode - Node to insert after in the tree\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static after(thisNode, newNode) {\n thisNode.parentNode.insertBefore(newNode, thisNode.nextSibling);\n return thisNode;\n }\n /**\r\n * Gets the next sibling element that matches the selector.\r\n * @param {Element} element - Element to get the next sibling of\r\n * @param {string} [selector=\"\"] - Optional selector\r\n * @returns {Element} - The sibling element\r\n */\n\n\n static next(element, selector = \"\") {\n return selector ? element.querySelector(\"+ \" + selector) : element.nextElementSibling;\n }\n /**\r\n * Gets all subsequent siblings.\r\n * @param {Element} element - Element to get next siblings of\r\n * @returns {NodeList} - The list of siblings\r\n */\n\n\n static nextAll(element) {\n return element.querySelectorAll(\"~ *\");\n }\n /**\r\n * Gets the subsequent siblings until an element matches the selector.\r\n * @param {Element} element - Element to get the following siblings of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static nextUntil(element, selector) {\n const next = [];\n\n while (element.nextElementSibling && !element.nextElementSibling.matches(selector)) next.push(element = element.nextElementSibling);\n\n return next;\n }\n /**\r\n * Gets the previous sibling element that matches the selector.\r\n * @param {Element} element - Element to get the previous sibling of\r\n * @param {string} [selector=\"\"] - Optional selector\r\n * @returns {Element} - The sibling element\r\n */\n\n\n static previous(element, selector = \"\") {\n const previous = element.previousElementSibling;\n if (selector) return previous && previous.matches(selector) ? previous : null;\n return previous;\n }\n /**\r\n * Gets all preceeding siblings.\r\n * @param {Element} element - Element to get preceeding siblings of\r\n * @returns {NodeList} - The list of siblings\r\n */\n\n\n static previousAll(element) {\n const previous = [];\n\n while (element.previousElementSibling) previous.push(element = element.previousElementSibling);\n\n return previous;\n }\n /**\r\n * Gets the preceeding siblings until an element matches the selector.\r\n * @param {Element} element - Element to get the preceeding siblings of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static previousUntil(element, selector) {\n const previous = [];\n\n while (element.previousElementSibling && !element.previousElementSibling.matches(selector)) previous.push(element = element.previousElementSibling);\n\n return previous;\n }\n /**\r\n * Find which index in children a certain node is. Similar to jQuery's `$.index()`\r\n * @param {HTMLElement} node - The node to find its index in parent\r\n * @returns {number} Index of the node\r\n */\n\n\n static indexInParent(node) {\n const children = node.parentNode.childNodes;\n let num = 0;\n\n for (let i = 0; i < children.length; i++) {\n if (children[i] == node) return num;\n if (children[i].nodeType == 1) num++;\n }\n\n return -1;\n }\n /** Shorthand for {@link module:DOMTools.indexInParent} */\n\n\n static index(node) {\n return this.indexInParent(node);\n }\n /**\r\n * Gets the parent of the element if it matches the selector,\r\n * otherwise returns null.\r\n * @param {Element} element - Element to get parent of\r\n * @param {string} [selector=\"\"] - Selector to match parent\r\n * @returns {(Element|null)} - The sibling element or null\r\n */\n\n\n static parent(element, selector = \"\") {\n return !selector || element.parentElement.matches(selector) ? element.parentElement : null;\n }\n /**\r\n * Gets all children of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all children of\r\n * @param {string} selector - Selector to match the children to\r\n * @returns {Array} - The list of children\r\n */\n\n\n static findChild(element, selector) {\n return element.querySelector(\":scope > \" + selector);\n }\n /**\r\n * Gets all children of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all children of\r\n * @param {string} selector - Selector to match the children to\r\n * @returns {Array} - The list of children\r\n */\n\n\n static findChildren(element, selector) {\n return element.querySelectorAll(\":scope > \" + selector);\n }\n /**\r\n * Gets all ancestors of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all parents of\r\n * @param {string} [selector=\"\"] - Selector to match the parents to\r\n * @returns {Array} - The list of parents\r\n */\n\n\n static parents(element, selector = \"\") {\n const parents = [];\n if (selector) while (element.parentElement && element.parentElement.closest(selector)) parents.push(element = element.parentElement.closest(selector));else while (element.parentElement) parents.push(element = element.parentElement);\n return parents;\n }\n /**\r\n * Gets the ancestors until an element matches the selector.\r\n * @param {Element} element - Element to get the ancestors of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of parents\r\n */\n\n\n static parentsUntil(element, selector) {\n const parents = [];\n\n while (element.parentElement && !element.parentElement.matches(selector)) parents.push(element = element.parentElement);\n\n return parents;\n }\n /**\r\n * Gets all siblings of the element that match the selector.\r\n * @param {Element} element - Element to get all siblings of\r\n * @param {string} [selector=\"*\"] - Selector to match the siblings to\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static siblings(element, selector = \"*\") {\n return Array.from(element.parentElement.children).filter(e => e != element && e.matches(selector));\n }\n /**\r\n * Sets or gets css styles for a specific element. If `value` is provided\r\n * then it sets the style and returns the element to allow for chaining,\r\n * otherwise returns the style. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} attribute - Attribute to get or set\r\n * @param {string} [value] - Value to set for attribute\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static css(element, attribute, value) {\n if (typeof value == \"undefined\") return global.getComputedStyle(element)[attribute];\n element.style[attribute] = value;\n return element;\n }\n /**\r\n * Sets or gets the width for a specific element. If `value` is provided\r\n * then it sets the width and returns the element to allow for chaining,\r\n * otherwise returns the width. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} [value] - Width to set\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static width(element, value) {\n if (typeof value == \"undefined\") return parseInt(getComputedStyle(element).width);\n element.style.width = value;\n return element;\n }\n /**\r\n * Sets or gets the height for a specific element. If `value` is provided\r\n * then it sets the height and returns the element to allow for chaining,\r\n * otherwise returns the height. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} [value] - Height to set\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static height(element, value) {\n if (typeof value == \"undefined\") return parseInt(getComputedStyle(element).height);\n element.style.height = value;\n return element;\n }\n /**\r\n * Sets the inner text of an element if given a value, otherwise returns it.\r\n * @param {Element} element - Element to set the text of\r\n * @param {string} [text] - Content to set\r\n * @returns {string} - Either the string set by this call or the current text content of the node.\r\n */\n\n\n static text(element, text) {\n if (typeof text == \"undefined\") return element.textContent;\n return element.textContent = text;\n }\n /**\r\n * Returns the innerWidth of the element.\r\n * @param {Element} element - Element to retrieve inner width of\r\n * @return {number} - The inner width of the element.\r\n */\n\n\n static innerWidth(element) {\n return element.clientWidth;\n }\n /**\r\n * Returns the innerHeight of the element.\r\n * @param {Element} element - Element to retrieve inner height of\r\n * @return {number} - The inner height of the element.\r\n */\n\n\n static innerHeight(element) {\n return element.clientHeight;\n }\n /**\r\n * Returns the outerWidth of the element.\r\n * @param {Element} element - Element to retrieve outer width of\r\n * @return {number} - The outer width of the element.\r\n */\n\n\n static outerWidth(element) {\n return element.offsetWidth;\n }\n /**\r\n * Returns the outerHeight of the element.\r\n * @param {Element} element - Element to retrieve outer height of\r\n * @return {number} - The outer height of the element.\r\n */\n\n\n static outerHeight(element) {\n return element.offsetHeight;\n }\n /**\r\n * Gets the offset of the element in the page.\r\n * @param {Element} element - Element to get offset of\r\n * @return {Offset} - The offset of the element\r\n */\n\n\n static offset(element) {\n return element.getBoundingClientRect();\n }\n\n static get listeners() {\n return this._listeners || (this._listeners = {});\n }\n /**\r\n * This is similar to jQuery's `on` function and can *hopefully* be used in the same way.\r\n * \r\n * Rather than attempt to explain, I'll show some example usages.\r\n * \r\n * The following will add a click listener (in the `myPlugin` namespace) to `element`.\r\n * `DOMTools.on(element, \"click.myPlugin\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (in the `myPlugin` namespace) to `element` that only fires when the target is a `.block` element.\r\n * `DOMTools.on(element, \"click.myPlugin\", \".block\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (without namespace) to `element`.\r\n * `DOMTools.on(element, \"click\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (without namespace) to `element` that only fires once.\r\n * `const cancel = DOMTools.on(element, \"click\", () => {console.log(\"fired!\"); cancel();});`\r\n * \r\n * @param {Element} element - Element to add listener to\r\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} delegate - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\r\n */\n\n\n static on(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function (ev) {\n if (ev.target.matches(delegate)) {\n callback(ev);\n }\n };\n element.addEventListener(type, eventFunc);\n\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n\n return cancel;\n }\n /**\r\n * Functionality for this method matches {@link module:DOMTools.on} but automatically cancels itself\r\n * and removes the listener upon the first firing of the desired event.\r\n * \r\n * @param {Element} element - Element to add listener to\r\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} delegate - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\r\n */\n\n\n static once(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? function (ev) {\n callback(ev);\n element.removeEventListener(type, eventFunc);\n } : function (ev) {\n if (!ev.target.matches(delegate)) return;\n callback(ev);\n element.removeEventListener(type, eventFunc);\n };\n element.addEventListener(type, eventFunc);\n\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n\n return cancel;\n }\n\n static __offAll(event, element) {\n const [type, namespace] = event.split(\".\");\n\n let matchFilter = listener => listener.event == type,\n defaultFilter = _ => _;\n\n if (element) matchFilter = l => l.event == type && l.element == element, defaultFilter = l => l.element == element;\n const listeners = this.listeners[namespace] || [];\n const list = type ? listeners.filter(matchFilter) : listeners.filter(defaultFilter);\n\n for (let c = 0; c < list.length; c++) list[c].cancel();\n }\n /**\r\n * This is similar to jQuery's `off` function and can *hopefully* be used in the same way.\r\n * \r\n * Rather than attempt to explain, I'll show some example usages.\r\n * \r\n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element`.\r\n * `DOMTools.off(element, \"click.myPlugin\", onClick);`\r\n * \r\n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element` that only fired when the target is a `.block` element.\r\n * `DOMTools.off(element, \"click.myPlugin\", \".block\", onClick);`\r\n * \r\n * The following will remove a click listener (without namespace) from `element`.\r\n * `DOMTools.off(element, \"click\", onClick);`\r\n * \r\n * The following will remove all listeners in namespace `myPlugin` from `element`.\r\n * `DOMTools.off(element, \".myPlugin\");`\r\n * \r\n * The following will remove all click listeners in namespace `myPlugin` from *all elements*.\r\n * `DOMTools.off(\"click.myPlugin\");`\r\n * \r\n * The following will remove all listeners in namespace `myPlugin` from *all elements*.\r\n * `DOMTools.off(\".myPlugin\");`\r\n * \r\n * @param {(Element|string)} element - Element to remove listener from\r\n * @param {string} [event] - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} [delegate] - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {Element} - The original element to allow for chaining\r\n */\n\n\n static off(element, event, delegate, callback) {\n if (typeof element == \"string\") return this.__offAll(element);\n const [type, namespace] = event.split(\".\");\n if (namespace) return this.__offAll(event, element);\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function (ev) {\n if (ev.target.matches(delegate)) {\n callback(ev);\n }\n };\n element.removeEventListener(type, eventFunc);\n return element;\n }\n /**\r\n * Adds a listener for when the node is added/removed from the document body.\r\n * The listener is automatically removed upon firing.\r\n * @param {HTMLElement} node - node to wait for\r\n * @param {callable} callback - function to be performed on event\r\n * @param {boolean} onMount - determines if it should fire on Mount or on Unmount\r\n */\n\n\n static onMountChange(node, callback, onMount = true) {\n const wrappedCallback = () => {\n this.observer.unsubscribe(wrappedCallback);\n callback();\n };\n\n this.observer.subscribe(wrappedCallback, mutation => {\n const nodes = Array.from(onMount ? mutation.addedNodes : mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n return directMatch || parentMatch;\n });\n return node;\n }\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `true` */\n\n\n static onMount(node, callback) {\n return this.onMountChange(node, callback);\n }\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `false` */\n\n\n static onUnmount(node, callback) {\n return this.onMountChange(node, callback, false);\n }\n /** Alias for {@link module:DOMTools.onMount} */\n\n\n static onAdded(node, callback) {\n return this.onMount(node, callback);\n }\n /** Alias for {@link module:DOMTools.onUnmount} */\n\n\n static onRemoved(node, callback) {\n return this.onUnmount(node, callback, false);\n }\n /**\r\n * Helper function which combines multiple elements into one parent element\r\n * @param {Array} elements - array of elements to put into a single parent\r\n */\n\n\n static wrap(elements) {\n const domWrapper = this.parseHTML(`
`);\n\n for (let e = 0; e < elements.length; e++) domWrapper.appendChild(elements[e]);\n\n return domWrapper;\n }\n /**\r\n * Resolves the node to an HTMLElement. This is mainly used by library modules.\r\n * @param {(jQuery|Element)} node - node to resolve\r\n */\n\n\n static resolveElement(node) {\n if (!(node instanceof jQuery) && !(node instanceof Element)) return undefined;\n return node instanceof jQuery ? node[0] : node;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZG9tdG9vbHMuanM/MTNkZCJdLCJuYW1lcyI6WyJET01Ub29scyIsImVzY2FwZUlEIiwiaWQiLCJyZXBsYWNlIiwiYWRkU3R5bGUiLCJjc3MiLCJkb2N1bWVudCIsImhlYWQiLCJhcHBlbmQiLCJjcmVhdGVFbGVtZW50IiwicmVtb3ZlU3R5bGUiLCJlbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmUiLCJhZGRTY3JpcHQiLCJ1cmwiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNjcmlwdCIsInNyYyIsInR5cGUiLCJvbmxvYWQiLCJyZW1vdmVTY3JpcHQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwic3RhcnQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRpbWUiLCJ0aW1lRnJhY3Rpb24iLCJwcm9ncmVzcyIsIlEiLCJzZWxlY3RvciIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0IiwiQXJyYXkiLCJmcm9tIiwic29tZSIsIm4iLCJub2RlVHlwZSIsInF1ZXJ5IiwiYmFzZUVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlBbGwiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJpbm5lckhUTUwiLCJub2RlIiwiY29udGVudCIsImNsb25lTm9kZSIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJjbGFzc2VzIiwiZmxhdCIsImZpbHRlciIsImMiLCJ0b1N0cmluZyIsInNwbGl0IiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsImNsYXNzbmFtZSIsImluZGljYXRvciIsImZvckVhY2giLCJ0b2dnbGUiLCJoYXNDbGFzcyIsImV2ZXJ5IiwiY29udGFpbnMiLCJyZXBsYWNlQ2xhc3MiLCJvbGROYW1lIiwibmV3TmFtZSIsImFwcGVuZFRvIiwidGhpc05vZGUiLCJ0aGF0Tm9kZSIsInByZXBlbmRUbyIsInByZXBlbmQiLCJpbnNlcnRBZnRlciIsInRhcmdldE5vZGUiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJhZnRlciIsIm5ld05vZGUiLCJuZXh0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwibmV4dEFsbCIsIm5leHRVbnRpbCIsIm1hdGNoZXMiLCJwdXNoIiwicHJldmlvdXMiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNBbGwiLCJwcmV2aW91c1VudGlsIiwiaW5kZXhJblBhcmVudCIsImNoaWxkcmVuIiwibnVtIiwiaSIsImluZGV4IiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsImZpbmRDaGlsZCIsImZpbmRDaGlsZHJlbiIsInBhcmVudHMiLCJjbG9zZXN0IiwicGFyZW50c1VudGlsIiwic2libGluZ3MiLCJlIiwiYXR0cmlidXRlIiwidmFsdWUiLCJnbG9iYWwiLCJnZXRDb21wdXRlZFN0eWxlIiwic3R5bGUiLCJ3aWR0aCIsInBhcnNlSW50IiwiaGVpZ2h0IiwidGV4dCIsInRleHRDb250ZW50IiwiaW5uZXJXaWR0aCIsImNsaWVudFdpZHRoIiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJvdXRlcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJvdXRlckhlaWdodCIsIm9mZnNldEhlaWdodCIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJvbiIsImV2ZW50IiwiZGVsZWdhdGUiLCJjYWxsYmFjayIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwiZXYiLCJ0YXJnZXQiLCJhZGRFdmVudExpc3RlbmVyIiwiY2FuY2VsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm5ld0NhbmNlbCIsInNwbGljZSIsImZpbmRJbmRleCIsImwiLCJvbmNlIiwiX19vZmZBbGwiLCJtYXRjaEZpbHRlciIsImxpc3RlbmVyIiwiZGVmYXVsdEZpbHRlciIsImxpc3QiLCJvZmYiLCJvbk1vdW50Q2hhbmdlIiwib25Nb3VudCIsIndyYXBwZWRDYWxsYmFjayIsIm9ic2VydmVyIiwidW5zdWJzY3JpYmUiLCJzdWJzY3JpYmUiLCJtdXRhdGlvbiIsIm5vZGVzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsImRpcmVjdE1hdGNoIiwiaW5kZXhPZiIsInBhcmVudE1hdGNoIiwib25Vbm1vdW50Iiwib25BZGRlZCIsIm9uUmVtb3ZlZCIsIndyYXAiLCJlbGVtZW50cyIsImRvbVdyYXBwZXIiLCJhcHBlbmRDaGlsZCIsInJlc29sdmVFbGVtZW50IiwialF1ZXJ5IiwiRWxlbWVudCIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTs7Ozs7Ozs7Ozs7QUFXQzs7OztBQUtjLE1BQU1BLFFBQU4sQ0FBZTtBQUUxQixTQUFPQyxRQUFQLENBQWdCQyxFQUFoQixFQUFvQjtBQUNoQixXQUFPQSxFQUFFLENBQUNDLE9BQUgsQ0FBVyxvQkFBWCxFQUFpQyxHQUFqQyxDQUFQO0FBQ0g7QUFFRDs7Ozs7OztBQUtILFNBQU9DLFFBQVAsQ0FBZ0JGLEVBQWhCLEVBQW9CRyxHQUFwQixFQUF5QjtBQUN4QkMsWUFBUSxDQUFDQyxJQUFULENBQWNDLE1BQWQsQ0FBcUJSLFFBQVEsQ0FBQ1MsYUFBVCxDQUF3QixjQUFhUCxFQUFHLEtBQUlHLEdBQUksVUFBaEQsQ0FBckI7QUFDQTtBQUVEOzs7Ozs7QUFJQSxTQUFPSyxXQUFQLENBQW1CUixFQUFuQixFQUF1QjtBQUN0QixVQUFNUyxPQUFPLEdBQUdMLFFBQVEsQ0FBQ00sY0FBVCxDQUF3QlYsRUFBeEIsQ0FBaEI7QUFDQSxRQUFJUyxPQUFKLEVBQWFBLE9BQU8sQ0FBQ0UsTUFBUjtBQUNi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Q0FBdUJGLFFBQVEsQ0FBQy9ELENBQUQsQ0FBL0I7O0FBQzFDLFdBQU9nRSxVQUFQO0FBQ0g7QUFFRDs7Ozs7O0FBSUEsU0FBT0UsY0FBUCxDQUFzQnBJLElBQXRCLEVBQTRCO0FBQ3hCLFFBQUksRUFBRUEsSUFBSSxZQUFZcUksTUFBbEIsS0FBNkIsRUFBRXJJLElBQUksWUFBWXNJLE9BQWxCLENBQWpDLEVBQTZELE9BQU9DLFNBQVA7QUFDN0QsV0FBT3ZJLElBQUksWUFBWXFJLE1BQWhCLEdBQXlCckksSUFBSSxDQUFDLENBQUQsQ0FBN0IsR0FBbUNBLElBQTFDO0FBQ0g7O0FBeHNCeUIiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9kb210b29scy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb3B5cmlnaHQgMjAxOCBaYWNoYXJ5IFJhdWVuXHJcbiAqXHJcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xyXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcclxuICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcclxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcclxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZFxyXG4gKiB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XHJcbiAqXHJcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxyXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxyXG4gKlxyXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsXHJcbiAqIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBXHJcbiAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFRcclxuICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GXHJcbiAqIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRVxyXG4gKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cclxuICogXHJcbiAqIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JEUGx1Z2luTGlicmFyeVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBuYW1lIE9mZnNldFxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wIC0gVG9wIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByaWdodCAtIFJpZ2h0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBib3R0b20gLSBCb3R0b20gb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlZnQgLSBMZWZ0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBPdXRlciBoZWlnaHQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGggLSBPdXRlciB3aWR0aCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqL1xyXG5cclxuIC8qKlxyXG4gKiBGdW5jdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBhZGRlZCBsaXN0ZW5lci5cclxuICogQGNhbGxiYWNrIG1vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lclxyXG4gKi9cclxuIFxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01Ub29scyB7XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcblx0ICogQWRkcyBhIHN0eWxlIHRvIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBhcyB0aGUgZWxlbWVudCBpZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjc3MgLSBjc3MgdG8gYWRkIHRvIHRoZSBkb2N1bWVudFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBhZGRTdHlsZShpZCwgY3NzKSB7XHJcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChET01Ub29scy5jcmVhdGVFbGVtZW50KGA8c3R5bGUgaWQ9XCIke2lkfVwiPiR7Y3NzfTwvc3R5bGU+YCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhIHN0eWxlIGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTdHlsZShpZCkge1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkcy9yZXF1aXJlcyBhIHJlbW90ZSBzY3JpcHQgdG8gYmUgbG9hZGVkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgZm9yIHRoaXMgc2NyaXB0XHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBmcm9tIHdoaWNoIHRvIGxvYWQgdGhlIHNjcmlwdFxyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2NyaXB0IGlzIGxvYWRlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBhZGRTY3JpcHQoaWQsIHVybCkge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG5cdFx0XHRjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xyXG5cdFx0XHRzY3JpcHQuaWQgPSBpZDtcclxuXHRcdFx0c2NyaXB0LnNyYyA9IHVybDtcclxuXHRcdFx0c2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xyXG5cdFx0XHRzY3JpcHQub25sb2FkID0gcmVzb2x2ZTtcclxuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoc2NyaXB0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhIHJlbW90ZSBzY3JpcHQgZnJvbSB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXHJcblx0ICovXHJcblx0c3RhdGljIHJlbW92ZVNjcmlwdChpZCkge1xyXG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XHJcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIGh0dHBzOi8vamF2YXNjcmlwdC5pbmZvL2pzLWFuaW1hdGlvblxyXG4gICAgc3RhdGljIGFuaW1hdGUoe3RpbWluZyA9IF8gPT4gXywgdXBkYXRlLCBkdXJhdGlvbn0pIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgICBcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XHJcbiAgICAgICAgICAvLyB0aW1lRnJhY3Rpb24gZ29lcyBmcm9tIDAgdG8gMVxyXG4gICAgICAgICAgbGV0IHRpbWVGcmFjdGlvbiA9ICh0aW1lIC0gc3RhcnQpIC8gZHVyYXRpb247XHJcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uID4gMSkgdGltZUZyYWN0aW9uID0gMTtcclxuICAgICAgXHJcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlXHJcbiAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IHRpbWluZyh0aW1lRnJhY3Rpb24pO1xyXG4gICAgICBcclxuICAgICAgICAgIHVwZGF0ZShwcm9ncmVzcyk7IC8vIGRyYXcgaXRcclxuICAgICAgXHJcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uIDwgMSkge1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIG15IHNoaXQgdmVyc2lvbiBvZiBub3QgaGF2aW5nIHRvIHVzZSBgJGAgZnJvbSBqUXVlcnkuIE1lYW5pbmdcclxuICAgICAqIHRoYXQgeW91IGNhbiBwYXNzIGEgc2VsZWN0b3IgYW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBydW4ge0BsaW5rIG1vZHVsZTpET01Ub29scy5xdWVyeX0uXHJcbiAgICAgKiBJdCBhbHNvIG1lYW5zIHRoYXQgeW91IGNhbiBwYXNzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGl0IHdpbGwgcGVyZm9ybSBhbmQgcmV0dXJuIGBwYXJzZUhUTUxgLlxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MXHJcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5xdWVyeVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnkgb3IgSFRNTCB0byBwYXJzZVxyXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBFaXRoZXIgdGhlIHJlc3VsdCBvZiBgcGFyc2VIVE1MYCBvciBgcXVlcnlgXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBRKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGFyc2VIVE1MKHNlbGVjdG9yKTtcclxuICAgICAgICBjb25zdCBpc0hUTUwgPSBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QgPyBBcnJheS5mcm9tKGVsZW1lbnQpLnNvbWUobiA9PiBuLm5vZGVUeXBlID09PSAxKSA6IGVsZW1lbnQubm9kZVR5cGUgPT09IDE7XHJcbiAgICAgICAgaWYgKGlzSFRNTCkgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgZm91bmQgZWxlbWVudCBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcXVlcnkoc2VsZWN0b3IsIGJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFiYXNlRWxlbWVudCkgYmFzZUVsZW1lbnQgPSBkb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGxgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcclxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIEFycmF5IG9mIGFsbCBmb3VuZCBlbGVtZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcXVlcnlBbGwoc2VsZWN0b3IsIGJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFiYXNlRWxlbWVudCkgYmFzZUVsZW1lbnQgPSBkb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgb2YgSFRNTCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cy4gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSxcclxuICAgICAqIHRoZSBwYXJzZWQgSFRNTCB3aWxsIGJlIHJldHVybmVkIGFzIGEgZG9jdW1lbnQgZnJhZ21lbnQge0BzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50RnJhZ21lbnR9LlxyXG4gICAgICogVGhpcyBpcyBleHRyZW1lbHkgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbGlzdCBvZiBlbGVtZW50cyBhdCB0aGUgdG9wIGxldmVsLCB0aGV5IGNhbiB0aGVuIGJlIGFwcGVuZGVkIGFsbCBhdCBvbmNlIHRvIGFub3RoZXIgbm9kZS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgZmFsc2UsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBsaXN0IG9mIHBhcnNlZFxyXG4gICAgICogbm9kZXMgYW5kIHRoZXJlIHdlcmUgbXVsdGlwbGUgdG9wIGxldmVsIG5vZGVzLCBvdGhlcndpc2UgdGhlIHNpbmdsZSBub2RlIGlzIHJldHVybmVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBIVE1MIHRvIGJlIHBhcnNlZFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJhZ21lbnQ9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdGhlIHJldHVybiBzaG91bGQgYmUgdGhlIHJhdyBgRG9jdW1lbnRGcmFnbWVudGBcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gVGhlIHJlc3VsdCBvZiBIVE1MIHBhcnNpbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcnNlSFRNTChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XHJcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgICBjb25zdCBub2RlID0gdGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGZyYWdtZW50KSByZXR1cm4gbm9kZTtcclxuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDEgPyBub2RlLmNoaWxkTm9kZXMgOiBub2RlLmNoaWxkTm9kZXNbMF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFsdGVybmF0ZSBuYW1lIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTH0gKi9cclxuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtyZXR1cm4gdGhpcy5wYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQpO31cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHN0cmluZyBvZiBodG1sIGFuZCBlc2NhcGVzIGl0IHVzaW5nIHRoZSBicm93ZXIncyBvd24gZXNjYXBpbmcgbWVjaGFuaXNtLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBodG1sIHRvIGJlIGVzY2FwZWRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVzY2FwZUhUTUwoaHRtbCkge1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XHJcbiAgICAgICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcclxuICAgICAgICBzcGFuRWxlbWVudC5hcHBlbmQodGV4dE5vZGUpO1xyXG4gICAgICAgIHRleHROb2RlLm5vZGVWYWx1ZSA9IGh0bWw7XHJcbiAgICAgICAgcmV0dXJuIHNwYW5FbGVtZW50LmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIGFkZFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWRkQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3Nlcyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byByZW1vdmVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlbW92ZUNsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByZXNlbnQ6IFRvZ2dsZSBjbGFzcyB2YWx1ZTtcclxuICAgICAqIGkuZS4sIGlmIGNsYXNzIGV4aXN0cyB0aGVuIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGZhbHNlLCBpZiBub3QsIHRoZW4gYWRkIGl0IGFuZCByZXR1cm4gdHJ1ZS5cclxuICAgICAqIFdoZW4gYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudDpcclxuICAgICAqIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgZXZhbHVhdGVzIHRvIHRydWUsIGFkZCBzcGVjaWZpZWQgY2xhc3MgdmFsdWUsIGFuZCBpZiBpdCBldmFsdWF0ZXMgdG8gZmFsc2UsIHJlbW92ZSBpdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byB0b2dnbGVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luZGljYXRvcl0gLSBPcHRpb25hbCBpbmRpY2F0b3IgZm9yIGlmIHRoZSBjbGFzcyBzaG91bGQgYmUgdG9nZ2xlZFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9nZ2xlQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lLCBpbmRpY2F0b3IpIHtcclxuICAgICAgICBjbGFzc25hbWUgPSBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZihpbmRpY2F0b3IpICE9PSBcInVuZGVmaW5lZFwiKSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjLCBpbmRpY2F0b3IpKTtcclxuICAgICAgICBlbHNlIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGhhcyBhIHNwZWNpZmljIGNsYXNzXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzLCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSkge1xyXG4gICAgICAgIHJldHVybiBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYykuZXZlcnkoYyA9PiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBsYWNlcyBvbmUgY2xhc3Mgd2l0aCBhbm90aGVyXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHJlcGxhY2VcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgZm9yIHRoZSBjbGFzc1xyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVwbGFjZUNsYXNzKGVsZW1lbnQsIG9sZE5hbWUsIG5ld05hbWUpIHtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKG9sZE5hbWUsIG5ld05hbWUpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIGFwcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgYXBwZW5kZWQgdG9cclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xyXG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHRoYXROb2RlLmFwcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBwcmVwZW5kZWQgdG8gYW5vdGhlciBub2RlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBwcmVwZW5kZWQgdG9cclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmVwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5wcmVwZW5kKHRoaXNOb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5pbnNlcnRBZnRlcihvdGhlckVsZW1lbnQpYC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5zZXJ0QWZ0ZXIodGhpc05vZGUsIHRhcmdldE5vZGUpIHtcclxuICAgICAgICB0YXJnZXROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNOb2RlLCB0YXJnZXROb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5hZnRlcihuZXdFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5ld05vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFmdGVyKHRoaXNOb2RlLCBuZXdOb2RlKSB7XHJcbiAgICAgICAgdGhpc05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgdGhpc05vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG5leHQgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgbmV4dCBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiKyBcIiArIHNlbGVjdG9yKSA6IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc3Vic2VxdWVudCBzaWJsaW5ncy5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG5leHQgc2libGluZ3Mgb2ZcclxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dEFsbChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIn4gKlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHN1YnNlcXVlbnQgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBmb2xsb3dpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dFVudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IFtdOyBcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBuZXh0LnB1c2goZWxlbWVudCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSByZXR1cm4gcHJldmlvdXMgJiYgcHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikgPyBwcmV2aW91cyA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgcHJlY2VlZGluZyBzaWJsaW5ncy5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107XHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgd2hpY2ggaW5kZXggaW4gY2hpbGRyZW4gYSBjZXJ0YWluIG5vZGUgaXMuIFNpbWlsYXIgdG8galF1ZXJ5J3MgYCQuaW5kZXgoKWBcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBUaGUgbm9kZSB0byBmaW5kIGl0cyBpbmRleCBpbiBwYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IEluZGV4IG9mIHRoZSBub2RlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbmRleEluUGFyZW50KG5vZGUpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGxldCBudW0gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldID09IG5vZGUpIHJldHVybiBudW07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5ub2RlVHlwZSA9PSAxKSBudW0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMuaW5kZXhJblBhcmVudH0gKi9cclxuICAgIHN0YXRpYyBpbmRleChub2RlKSB7cmV0dXJuIHRoaXMuaW5kZXhJblBhcmVudChub2RlKTt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgaWYgaXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyBudWxsLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcGFyZW50IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIHNpYmxpbmcgZWxlbWVudCBvciBudWxsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuICFzZWxlY3RvciB8fCBlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikgPyBlbGVtZW50LnBhcmVudEVsZW1lbnQgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRDaGlsZChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBhbmNlc3RvcnMgb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBwYXJlbnRzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBhcmVudHMgdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICBpZiAoc2VsZWN0b3IpIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSk7XHJcbiAgICAgICAgZWxzZSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBhbmNlc3RvcnMgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBhbmNlc3RvcnMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnRzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiAhZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBzaWJsaW5ncyBvZiB0aGUgZWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIipcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgc2libGluZ3MgdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc2libGluZ3MoZWxlbWVudCwgc2VsZWN0b3IgPSBcIipcIikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGUgPT4gZSAhPSBlbGVtZW50ICYmIGUubWF0Y2hlcyhzZWxlY3RvcikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIGNzcyBzdHlsZXMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBzdHlsZSBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgc3R5bGUuICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBBdHRyaWJ1dGUgdG8gZ2V0IG9yIHNldFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBWYWx1ZSB0byBzZXQgZm9yIGF0dHJpYnV0ZVxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNzcyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpW2F0dHJpYnV0ZV07XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZVthdHRyaWJ1dGVdID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIHdpZHRoIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgd2lkdGggYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHdpZHRoLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFdpZHRoIHRvIHNldFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHdpZHRoKGVsZW1lbnQsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkud2lkdGgpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgaGVpZ2h0IGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgaGVpZ2h0IGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBoZWlnaHQuICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gSGVpZ2h0IHRvIHNldFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGhlaWdodChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodCk7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGlubmVyIHRleHQgb2YgYW4gZWxlbWVudCBpZiBnaXZlbiBhIHZhbHVlLCBvdGhlcndpc2UgcmV0dXJucyBpdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSB0ZXh0IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RleHRdIC0gQ29udGVudCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRWl0aGVyIHRoZSBzdHJpbmcgc2V0IGJ5IHRoaXMgY2FsbCBvciB0aGUgY3VycmVudCB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGUuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0ZXh0KGVsZW1lbnQsIHRleHQpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRleHQpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50O1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGlubmVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIHdpZHRoIG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5uZXJXaWR0aChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lckhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgaGVpZ2h0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVySGVpZ2h0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIG91dGVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IGluIHRoZSBwYWdlLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgb2Zmc2V0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtPZmZzZXR9IC0gVGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb2Zmc2V0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxpc3RlbmVycygpIHsgcmV0dXJuIHRoaXMuX2xpc3RlbmVycyB8fCAodGhpcy5fbGlzdGVuZXJzID0ge30pOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9uYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxyXG4gICAgICogXHJcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgb25jZS5cclxuICAgICAqIGBjb25zdCBjYW5jZWwgPSBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImZpcmVkIVwiKTsgY2FuY2VsKCk7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXYpIHtcclxuICAgICAgICAgICAgaWYgKGV2LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBtZXRob2QgbWF0Y2hlcyB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9ufSBidXQgYXV0b21hdGljYWxseSBjYW5jZWxzIGl0c2VsZlxyXG4gICAgICogYW5kIHJlbW92ZXMgdGhlIGxpc3RlbmVyIHVwb24gdGhlIGZpcnN0IGZpcmluZyBvZiB0aGUgZGVzaXJlZCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb25jZShlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGZ1bmN0aW9uKGV2KSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfSA6IGZ1bmN0aW9uKGV2KSB7XHJcbiAgICAgICAgICAgIGlmICghZXYudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBfX29mZkFsbChldmVudCwgZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGxldCBtYXRjaEZpbHRlciA9IGxpc3RlbmVyID0+IGxpc3RlbmVyLmV2ZW50ID09IHR5cGUsIGRlZmF1bHRGaWx0ZXIgPSBfID0+IF87XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIG1hdGNoRmlsdGVyID0gbCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQsIGRlZmF1bHRGaWx0ZXIgPSBsID0+IGwuZWxlbWVudCA9PSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gfHwgW107XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHR5cGUgPyBsaXN0ZW5lcnMuZmlsdGVyKG1hdGNoRmlsdGVyKSA6IGxpc3RlbmVycy5maWx0ZXIoZGVmYXVsdEZpbHRlcik7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBsaXN0Lmxlbmd0aDsgYysrKSBsaXN0W2NdLmNhbmNlbCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb2ZmYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxyXG4gICAgICogXHJcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlZCB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2tcIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgY2xpY2sgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiY2xpY2subXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cclxuICAgICAqIGBET01Ub29scy5vZmYoXCIubXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geyhFbGVtZW50fHN0cmluZyl9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJlbW92ZSBsaXN0ZW5lciBmcm9tXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V2ZW50XSAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IFtkZWxlZ2F0ZV0gLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgb3JpZ2luYWwgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihlbGVtZW50KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gdGhpcy5fX29mZkFsbChlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSByZXR1cm4gdGhpcy5fX29mZkFsbChldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2KSB7XHJcbiAgICAgICAgICAgIGlmIChldi50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIGZvciB3aGVuIHRoZSBub2RlIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQgYm9keS5cclxuICAgICAqIFRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdXBvbiBmaXJpbmcuXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gbm9kZSB0byB3YWl0IGZvclxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZXZlbnRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25Nb3VudCAtIGRldGVybWluZXMgaWYgaXQgc2hvdWxkIGZpcmUgb24gTW91bnQgb3Igb24gVW5tb3VudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgb25Nb3VudCA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIudW5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjaywgbXV0YXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20ob25Nb3VudCA/IG11dGF0aW9uLmFkZGVkTm9kZXMgOiBtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG4gICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2g7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgdHJ1ZWAgKi9cclxuICAgIHN0YXRpYyBvbk1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgZmFsc2VgICovXHJcbiAgICBzdGF0aWMgb25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxyXG5cclxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50fSAqL1xyXG4gICAgc3RhdGljIG9uQWRkZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudChub2RlLCBjYWxsYmFjayk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Vbm1vdW50fSAqL1xyXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vblVubW91bnQobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNvbWJpbmVzIG11bHRpcGxlIGVsZW1lbnRzIGludG8gb25lIHBhcmVudCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PEhUTUxFbGVtZW50Pn0gZWxlbWVudHMgLSBhcnJheSBvZiBlbGVtZW50cyB0byBwdXQgaW50byBhIHNpbmdsZSBwYXJlbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHdyYXAoZWxlbWVudHMpIHtcclxuICAgICAgICBjb25zdCBkb21XcmFwcGVyID0gdGhpcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJkb20td3JhcHBlclwiPjwvZGl2PmApO1xyXG4gICAgICAgIGZvciAobGV0IGUgPSAwOyBlIDwgZWxlbWVudHMubGVuZ3RoOyBlKyspIGRvbVdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudHNbZV0pO1xyXG4gICAgICAgIHJldHVybiBkb21XcmFwcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb2x2ZXMgdGhlIG5vZGUgdG8gYW4gSFRNTEVsZW1lbnQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgYnkgbGlicmFyeSBtb2R1bGVzLlxyXG4gICAgICogQHBhcmFtIHsoalF1ZXJ5fEVsZW1lbnQpfSBub2RlIC0gbm9kZSB0byByZXNvbHZlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZXNvbHZlRWxlbWVudChub2RlKSB7XHJcbiAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/domtools.js\n"); /***/ }), @@ -527,7 +515,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 _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n\n\n\n\n\n\n\n\n\nconst BdApi = {\n get React() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React;\n },\n\n get ReactDOM() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ReactDOM;\n },\n\n get WindowConfigFile() {\n if (this._windowConfigFile) return this._windowConfigFile;\n\n const electron = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n const path = __webpack_require__(/*! path */ \"path\");\n\n const base = electron.getAppPath();\n const roamingBase = electron.getPath(\"userData\");\n const roamingLocation = path.resolve(roamingBase, electron.getVersion(), \"modules\", \"discord_desktop_core\", \"injector\", \"config.json\");\n const location = path.resolve(base, \"..\", \"app\", \"config.json\");\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null;\n if (!realLocation) return this._windowConfigFile = null;\n return this._windowConfigFile = realLocation;\n }\n\n};\n\nBdApi.getAllWindowPreferences = function () {\n if (!this.WindowConfigFile) return {};\n return require(this.WindowConfigFile);\n};\n\nBdApi.getWindowPreference = function (key) {\n if (!this.WindowConfigFile) return undefined;\n return this.getAllWindowPreferences()[key];\n};\n\nBdApi.setWindowPreference = function (key, value) {\n if (!this.WindowConfigFile) return;\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const prefs = this.getAllWindowPreferences();\n prefs[key] = value;\n delete __webpack_require__.c[this.WindowConfigFile];\n fs.writeFileSync(this.WindowConfigFile, JSON.stringify(prefs, null, 4));\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.injectCSS = function (id, css) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectStyle(id, css);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.clearCSS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeStyle(id);\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.linkJS = function (id, url) {\n return _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectScript(id, url);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.unlinkJS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeScript(id);\n};\n/**\r\n * Shows a generic but very customizable modal.\r\n * @param {string} title - title of the modal\r\n * @param {string} content - a string of text to display in the modal\r\n */\n\n\nBdApi.alert = function (title, content) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].alert(title, content);\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. Everything is wrapped in Discord's `TextElement` 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 */\n\n\nBdApi.showConfirmationModal = function (title, content, options = {}) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].showConfirmationModal(title, content, options);\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=true] 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=3000] Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\r\n * @param {boolean} [options.forceShow=false] Whether to force showing the toast and ignore the bd setting\r\n */\n\n\nBdApi.showToast = function (content, options = {}) {\n _ui_toasts__WEBPACK_IMPORTED_MODULE_5__[\"default\"].show(content, options);\n}; // Finds module\n\n\nBdApi.findModule = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter);\n}; // Finds module\n\n\nBdApi.findAllModules = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter, false);\n}; // Finds module\n\n\nBdApi.findModuleByProps = function (...props) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(...props);\n};\n\nBdApi.findModuleByPrototypes = function (...protos) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(...protos);\n};\n\nBdApi.findModuleByDisplayName = function (name) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(name);\n}; // Gets react instance\n\n\nBdApi.getInternalInstance = function (node) {\n if (!(node instanceof window.jQuery) && !(node instanceof Element)) return undefined;\n if (node instanceof jQuery) node = node[0];\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getReactInstance(node);\n}; // Gets data\n\n\nBdApi.loadData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getPluginData(pluginName, key);\n};\n\nBdApi.getData = BdApi.loadData; // Sets data\n\nBdApi.saveData = function (pluginName, key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setPluginData(pluginName, key, data);\n};\n\nBdApi.setData = BdApi.saveData; // Deletes data\n\nBdApi.deleteData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].deletePluginData(pluginName, key);\n}; // Patches other functions\n\n\nBdApi.monkeyPatch = function (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.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 = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n } else {\n if (before) _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n\n if (once) cancel();\n return data.returnValue;\n };\n\n what[methodName].__monkeyPatched = true;\n if (!what[methodName].__originalMethod) what[methodName].__originalMethod = origMethod;\n what[methodName].displayName = \"patched \" + (what[methodName].displayName || methodName);\n return cancel;\n}; // Event when element is removed\n\n\nBdApi.onRemoved = function (node, callback) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].onRemoved(node, callback);\n}; // Wraps function in try..catch\n\n\nBdApi.suppressErrors = function (method, message) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(method, message);\n}; // Tests for valid JSON\n\n\nBdApi.testJSON = function (data) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(data);\n}; //Get another plugin\n//name = name of plugin\n\n\nBdApi.getPlugin = function (name) {\n return _pluginmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"].addonList.find(a => a.name == name);\n};\n\nBdApi.isPluginEnabled = function (name) {\n const plugin = this.getPlugin(name);\n if (!plugin) return false;\n return _pluginmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"].isEnabled(plugin.id);\n};\n\nBdApi.isThemeEnabled = function (name) {\n const theme = _thememanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addonList.find(a => a.name == name);\n if (!theme) return false;\n return _thememanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isEnabled(theme.id);\n};\n\nBdApi.isSettingEnabled = function (name) {\n return null;\n};\n\nBdApi.enableSetting = function (id) {\n return settingsPanel.onChange(id, true);\n};\n\nBdApi.disableSetting = function (id) {\n return settingsPanel.onChange(id, false);\n};\n\nBdApi.toggleSetting = function (id) {\n return settingsPanel.onChange(id, !settingsCookie[id]);\n}; // Gets data\n\n\nBdApi.getBDData = function (key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getBDData(key);\n}; // Sets data\n\n\nBdApi.setBDData = function (key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setBDData(key, data);\n}; // const makeAddonAPI = (cookie, list, manager) => new class AddonAPI {\n// get folder() {return manager.folder;}\n// isEnabled(name) {\n// return !!cookie[name];\n// }\n// enable(name) {\n// return manager.enable(name);\n// }\n// disable(name) {\n// return manager.disable(name);\n// }\n// toggle(name) {\n// if (cookie[name]) this.disable(name);\n// else this.enable(name);\n// }\n// reload(name) {\n// return manager.reload(name);\n// }\n// get(name) {\n// if (list.hasOwnProperty(name)) {\n// if (list[name].plugin) return list[name].plugin;\n// return list[name];\n// }\n// return null;\n// }\n// getAll() {\n// return Object.keys(list).map(k => this.get(k)).filter(a => a);\n// }\n// };\n// BdApi.Plugins = makeAddonAPI(pluginCookie, bdplugins, pluginModule);\n// BdApi.Themes = makeAddonAPI(themeCookie, bdthemes, themeModule);\n\n\nBdApi.Plugins = BdApi.Themes = new class AddonAPI {\n get folder() {\n return \"\";\n }\n\n isEnabled(name) {\n return null;\n }\n\n enable(name) {\n return null;\n }\n\n disable(name) {\n return null;\n }\n\n toggle(name) {\n return null;\n }\n\n reload(name) {\n return null;\n }\n\n get(name) {\n return null;\n }\n\n getAll() {\n return [];\n }\n\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (BdApi);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2luYXBpLmpzPzZhOTMiXSwibmFtZXMiOlsiQmRBcGkiLCJSZWFjdCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3RET00iLCJXaW5kb3dDb25maWdGaWxlIiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJlbGVjdHJvbiIsInJlcXVpcmUiLCJyZW1vdGUiLCJhcHAiLCJwYXRoIiwiYmFzZSIsImdldEFwcFBhdGgiLCJyb2FtaW5nQmFzZSIsImdldFBhdGgiLCJyb2FtaW5nTG9jYXRpb24iLCJyZXNvbHZlIiwiZ2V0VmVyc2lvbiIsImxvY2F0aW9uIiwiZnMiLCJyZWFsTG9jYXRpb24iLCJleGlzdHNTeW5jIiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJrZXkiLCJ1bmRlZmluZWQiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwidmFsdWUiLCJwcmVmcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwiaW5qZWN0Q1NTIiwiaWQiLCJjc3MiLCJET01NYW5hZ2VyIiwiaW5qZWN0U3R5bGUiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwidXJsIiwiaW5qZWN0U2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJhbGVydCIsInRpdGxlIiwiY29udGVudCIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsIm9wdGlvbnMiLCJzaG93VG9hc3QiLCJUb2FzdHMiLCJzaG93IiwiZmluZE1vZHVsZSIsImZpbHRlciIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0TW9kdWxlIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kTW9kdWxlQnlQcm9wcyIsInByb3BzIiwiZ2V0QnlQcm9wcyIsImZpbmRNb2R1bGVCeVByb3RvdHlwZXMiLCJwcm90b3MiLCJnZXRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsIm5hbWUiLCJnZXRCeURpc3BsYXlOYW1lIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZSIsIm5vZGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJFbGVtZW50IiwiVXRpbGl0aWVzIiwiZ2V0UmVhY3RJbnN0YW5jZSIsImxvYWREYXRhIiwicGx1Z2luTmFtZSIsIkRhdGFTdG9yZSIsImdldFBsdWdpbkRhdGEiLCJnZXREYXRhIiwic2F2ZURhdGEiLCJkYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIm1vbmtleVBhdGNoIiwid2hhdCIsIm1ldGhvZE5hbWUiLCJiZWZvcmUiLCJhZnRlciIsImluc3RlYWQiLCJvbmNlIiwic2lsZW50IiwiZm9yY2UiLCJkaXNwbGF5TmFtZSIsImNvbnN0cnVjdG9yIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwib3JpZ01ldGhvZCIsImNhbmNlbCIsInRoaXNPYmplY3QiLCJtZXRob2RBcmd1bWVudHMiLCJhcmd1bWVudHMiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwicmV0dXJuVmFsdWUiLCJhcHBseSIsInRlbXBSZXQiLCJzdXBwcmVzc0Vycm9ycyIsIl9fbW9ua2V5UGF0Y2hlZCIsIl9fb3JpZ2luYWxNZXRob2QiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJ0ZXN0SlNPTiIsImdldFBsdWdpbiIsIlBsdWdpbk1hbmFnZXIiLCJhZGRvbkxpc3QiLCJmaW5kIiwiYSIsImlzUGx1Z2luRW5hYmxlZCIsInBsdWdpbiIsImlzRW5hYmxlZCIsImlzVGhlbWVFbmFibGVkIiwidGhlbWUiLCJUaGVtZU1hbmFnZXIiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsInNldHRpbmdzUGFuZWwiLCJvbkNoYW5nZSIsImRpc2FibGVTZXR0aW5nIiwidG9nZ2xlU2V0dGluZyIsInNldHRpbmdzQ29va2llIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkFkZG9uQVBJIiwiZm9sZGVyIiwiZW5hYmxlIiwiZGlzYWJsZSIsInRvZ2dsZSIsInJlbG9hZCIsImdldCIsImdldEFsbCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxLQUFLLEdBQUc7QUFDVixNQUFJQyxLQUFKLEdBQVk7QUFBRSxXQUFPQyx1REFBYyxDQUFDRCxLQUF0QjtBQUE4QixHQURsQzs7QUFFVixNQUFJRSxRQUFKLEdBQWU7QUFBRSxXQUFPRCx1REFBYyxDQUFDQyxRQUF0QjtBQUFpQyxHQUZ4Qzs7QUFHVixNQUFJQyxnQkFBSixHQUF1QjtBQUNuQixRQUFJLEtBQUtDLGlCQUFULEVBQTRCLE9BQU8sS0FBS0EsaUJBQVo7O0FBQzVCLFVBQU1DLFFBQVEsR0FBR0MsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CQyxNQUFwQixDQUEyQkMsR0FBNUM7O0FBQ0EsVUFBTUMsSUFBSSxHQUFHSCxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLFVBQU1JLElBQUksR0FBR0wsUUFBUSxDQUFDTSxVQUFULEVBQWI7QUFDQSxVQUFNQyxXQUFXLEdBQUdQLFFBQVEsQ0FBQ1EsT0FBVCxDQUFpQixVQUFqQixDQUFwQjtBQUNBLFVBQU1DLGVBQWUsR0FBR0wsSUFBSSxDQUFDTSxPQUFMLENBQWFILFdBQWIsRUFBMEJQLFFBQVEsQ0FBQ1csVUFBVCxFQUExQixFQUFpRCxTQUFqRCxFQUE0RCxzQkFBNUQsRUFBb0YsVUFBcEYsRUFBZ0csYUFBaEcsQ0FBeEI7QUFDQSxVQUFNQyxRQUFRLEdBQUdSLElBQUksQ0FBQ00sT0FBTCxDQUFhTCxJQUFiLEVBQW1CLElBQW5CLEVBQXlCLEtBQXpCLEVBQWdDLGFBQWhDLENBQWpCOztBQUNBLFVBQU1RLEVB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFFQWpGLEtBQUssQ0FBQzJJLE9BQU4sR0FBZ0IzSSxLQUFLLENBQUM0SSxNQUFOLEdBQWUsSUFBSSxNQUFNQyxRQUFOLENBQWU7QUFFOUMsTUFBSUMsTUFBSixHQUFhO0FBQUMsV0FBTyxFQUFQO0FBQVc7O0FBRXpCaEIsV0FBUyxDQUFDNUQsSUFBRCxFQUFPO0FBQ1osV0FBTyxJQUFQO0FBQ0g7O0FBRUQ2RSxRQUFNLENBQUM3RSxJQUFELEVBQU87QUFDVCxXQUFPLElBQVA7QUFDSDs7QUFFRDhFLFNBQU8sQ0FBQzlFLElBQUQsRUFBTztBQUNWLFdBQU8sSUFBUDtBQUNIOztBQUVEK0UsUUFBTSxDQUFDL0UsSUFBRCxFQUFPO0FBQ1QsV0FBTyxJQUFQO0FBQ0g7O0FBRURnRixRQUFNLENBQUNoRixJQUFELEVBQU87QUFDVCxXQUFPLElBQVA7QUFDSDs7QUFFRGlGLEtBQUcsQ0FBQ2pGLElBQUQsRUFBTztBQUNOLFdBQU8sSUFBUDtBQUNIOztBQUVEa0YsUUFBTSxHQUFHO0FBQ0wsV0FBTyxFQUFQO0FBQ0g7O0FBOUI2QyxDQUFuQixFQUEvQjtBQWlDZXBKLG9FQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvcGx1Z2luYXBpLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3VpL3RvYXN0c1wiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi91aS9tb2RhbHNcIjtcclxuaW1wb3J0IFBsdWdpbk1hbmFnZXIgZnJvbSBcIi4vcGx1Z2lubWFuYWdlclwiO1xyXG5pbXBvcnQgVGhlbWVNYW5hZ2VyIGZyb20gXCIuL3RoZW1lbWFuYWdlclwiO1xyXG5cclxuY29uc3QgQmRBcGkgPSB7XHJcbiAgICBnZXQgUmVhY3QoKSB7IHJldHVybiBEaXNjb3JkTW9kdWxlcy5SZWFjdDsgfSxcclxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIERpc2NvcmRNb2R1bGVzLlJlYWN0RE9NOyB9LFxyXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUpIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlO1xyXG4gICAgICAgIGNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG4gICAgICAgIGNvbnN0IGJhc2UgPSBlbGVjdHJvbi5nZXRBcHBQYXRoKCk7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0Jhc2UgPSBlbGVjdHJvbi5nZXRQYXRoKFwidXNlckRhdGFcIik7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0xvY2F0aW9uID0gcGF0aC5yZXNvbHZlKHJvYW1pbmdCYXNlLCBlbGVjdHJvbi5nZXRWZXJzaW9uKCksIFwibW9kdWxlc1wiLCBcImRpc2NvcmRfZGVza3RvcF9jb3JlXCIsIFwiaW5qZWN0b3JcIiwgXCJjb25maWcuanNvblwiKTtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShiYXNlLCBcIi4uXCIsIFwiYXBwXCIsIFwiY29uZmlnLmpzb25cIik7XHJcbiAgICAgICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxufTtcclxuXHJcbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHt9O1xyXG4gICAgcmV0dXJuIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHRoaXMuV2luZG93Q29uZmlnRmlsZSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB0aGlzLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKClba2V5XTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICBjb25zdCBwcmVmcyA9IHRoaXMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxuICAgIHByZWZzW2tleV0gPSB2YWx1ZTtcclxuICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW3RoaXMuV2luZG93Q29uZmlnRmlsZV07XHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuV2luZG93Q29uZmlnRmlsZSwgSlNPTi5zdHJpbmdpZnkocHJlZnMsIG51bGwsIDQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NTWFuYWdlci5pbmplY3RTdHlsZShpZCwgY3NzKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS5jbGVhckNTUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NTWFuYWdlci5yZW1vdmVTdHlsZShpZCk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcclxuICAgIHJldHVybiBET01NYW5hZ2VyLmluamVjdFNjcmlwdChpZCwgdXJsKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NTWFuYWdlci5yZW1vdmVTY3JpcHQoaWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgbW9kYWwuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIGEgc3RyaW5nIG9mIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgbW9kYWxcclxuICovXHJcbkJkQXBpLmFsZXJ0ID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICBNb2RhbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeXRoaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBUZXh0RWxlbWVudGAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBNb2RhbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvYXN0LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudHlwZT1cIlwiXSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaWNvbj10cnVlXSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aW1lb3V0PTMwMDBdIEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZVNob3c9ZmFsc2VdIFdoZXRoZXIgdG8gZm9yY2Ugc2hvd2luZyB0aGUgdG9hc3QgYW5kIGlnbm9yZSB0aGUgYmQgc2V0dGluZ1xyXG4gKi9cclxuQmRBcGkuc2hvd1RvYXN0ID0gZnVuY3Rpb24oY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBUb2FzdHMuc2hvdyhjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUoZmlsdGVyLCBmYWxzZSk7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvcHMgPSBmdW5jdGlvbiguLi5wcm9wcykge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoLi4ucHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvdG90eXBlcyguLi5wcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5sb2FkRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXREYXRhID0gQmRBcGkubG9hZERhdGE7XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2F2ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0RGF0YSA9IEJkQXBpLnNhdmVEYXRhO1xyXG5cclxuLy8gRGVsZXRlcyBkYXRhXHJcbkJkQXBpLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuLy8gUGF0Y2hlcyBvdGhlciBmdW5jdGlvbnNcclxuQmRBcGkubW9ua2V5UGF0Y2ggPSBmdW5jdGlvbih3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmVmb3JlLCBhZnRlciwgaW5zdGVhZCwgb25jZSA9IGZhbHNlLCBzaWxlbnQgPSBmYWxzZSwgZm9yY2UgPSBmYWxzZX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XHJcbiAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcclxuICAgICAgICBlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcclxuICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcclxuICAgIH07XHJcbiAgICB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcclxuICAgICAgICAgICAgbWV0aG9kQXJndW1lbnRzOiBhcmd1bWVudHMsXHJcbiAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXHJcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxyXG4gICAgICAgICAgICBjYWxsT3JpZ2luYWxNZXRob2Q6ICgpID0+IGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLm9yaWdpbmFsTWV0aG9kLmFwcGx5KGRhdGEudGhpc09iamVjdCwgZGF0YS5tZXRob2RBcmd1bWVudHMpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaW5zdGVhZCkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wUmV0ID0gVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGluc3RlYWQsIFwiYGluc3RlYWRgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xyXG4gICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyhhZnRlciwgXCJgYWZ0ZXJgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcclxuICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgIH07XHJcbiAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XHJcbiAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCkgd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ01ldGhvZDtcclxuICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBcInBhdGNoZWQgXCIgKyAod2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCBtZXRob2ROYW1lKTtcclxuICAgIHJldHVybiBjYW5jZWw7XHJcbn07XHJcbi8vIEV2ZW50IHdoZW4gZWxlbWVudCBpcyByZW1vdmVkXHJcbkJkQXBpLm9uUmVtb3ZlZCA9IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gVXRpbGl0aWVzLm9uUmVtb3ZlZChub2RlLCBjYWxsYmFjayk7XHJcbn07XHJcblxyXG4vLyBXcmFwcyBmdW5jdGlvbiBpbiB0cnkuLmNhdGNoXHJcbkJkQXBpLnN1cHByZXNzRXJyb3JzID0gZnVuY3Rpb24obWV0aG9kLCBtZXNzYWdlKSB7XHJcbiAgICByZXR1cm4gVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlsaXRpZXMudGVzdEpTT04oZGF0YSk7XHJcbn07XHJcblxyXG4vL0dldCBhbm90aGVyIHBsdWdpblxyXG4vL25hbWUgPSBuYW1lIG9mIHBsdWdpblxyXG5CZEFwaS5nZXRQbHVnaW4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgcmV0dXJuIFBsdWdpbk1hbmFnZXIuYWRkb25MaXN0LmZpbmQoYSA9PiBhLm5hbWUgPT0gbmFtZSk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1BsdWdpbkVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCBwbHVnaW4gPSB0aGlzLmdldFBsdWdpbihuYW1lKTtcclxuICAgIGlmICghcGx1Z2luKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gUGx1Z2luTWFuYWdlci5pc0VuYWJsZWQocGx1Z2luLmlkKTtcclxufTtcclxuXHJcbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgY29uc3QgdGhlbWUgPSBUaGVtZU1hbmFnZXIuYWRkb25MaXN0LmZpbmQoYSA9PiBhLm5hbWUgPT0gbmFtZSk7XHJcbiAgICBpZiAoIXRoZW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gVGhlbWVNYW5hZ2VyLmlzRW5hYmxlZCh0aGVtZS5pZCk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5CZEFwaS5lbmFibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCB0cnVlKTtcclxufTtcclxuXHJcbkJkQXBpLmRpc2FibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCBmYWxzZSk7XHJcbn07XHJcblxyXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCAhc2V0dGluZ3NDb29raWVbaWRdKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XHJcbn07XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuLy8gY29uc3QgbWFrZUFkZG9uQVBJID0gKGNvb2tpZSwgbGlzdCwgbWFuYWdlcikgPT4gbmV3IGNsYXNzIEFkZG9uQVBJIHtcclxuXHJcbi8vICAgICBnZXQgZm9sZGVyKCkge3JldHVybiBtYW5hZ2VyLmZvbGRlcjt9XHJcblxyXG4vLyAgICAgaXNFbmFibGVkKG5hbWUpIHtcclxuLy8gICAgICAgICByZXR1cm4gISFjb29raWVbbmFtZV07XHJcbi8vICAgICB9XHJcblxyXG4vLyAgICAgZW5hYmxlKG5hbWUpIHtcclxuLy8gICAgICAgICByZXR1cm4gbWFuYWdlci5lbmFibGUobmFtZSk7XHJcbi8vICAgICB9XHJcblxyXG4vLyAgICAgZGlzYWJsZShuYW1lKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIG1hbmFnZXIuZGlzYWJsZShuYW1lKTtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICB0b2dnbGUobmFtZSkge1xyXG4vLyAgICAgICAgIGlmIChjb29raWVbbmFtZV0pIHRoaXMuZGlzYWJsZShuYW1lKTtcclxuLy8gICAgICAgICBlbHNlIHRoaXMuZW5hYmxlKG5hbWUpO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIHJlbG9hZChuYW1lKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIG1hbmFnZXIucmVsb2FkKG5hbWUpO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIGdldChuYW1lKSB7XHJcbi8vICAgICAgICAgaWYgKGxpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuLy8gICAgICAgICAgICAgaWYgKGxpc3RbbmFtZV0ucGx1Z2luKSByZXR1cm4gbGlzdFtuYW1lXS5wbHVnaW47XHJcbi8vICAgICAgICAgICAgIHJldHVybiBsaXN0W25hbWVdO1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgICByZXR1cm4gbnVsbDtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICBnZXRBbGwoKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGxpc3QpLm1hcChrID0+IHRoaXMuZ2V0KGspKS5maWx0ZXIoYSA9PiBhKTtcclxuLy8gICAgIH1cclxuLy8gfTtcclxuXHJcbi8vIEJkQXBpLlBsdWdpbnMgPSBtYWtlQWRkb25BUEkocGx1Z2luQ29va2llLCBiZHBsdWdpbnMsIHBsdWdpbk1vZHVsZSk7XHJcbi8vIEJkQXBpLlRoZW1lcyA9IG1ha2VBZGRvbkFQSSh0aGVtZUNvb2tpZSwgYmR0aGVtZXMsIHRoZW1lTW9kdWxlKTtcclxuXHJcbkJkQXBpLlBsdWdpbnMgPSBCZEFwaS5UaGVtZXMgPSBuZXcgY2xhc3MgQWRkb25BUEkge1xyXG5cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIFwiXCI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/pluginapi.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nconst BdApi = {\n get React() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_3__[\"default\"].React;\n },\n\n get ReactDOM() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ReactDOM;\n },\n\n get WindowConfigFile() {\n return \"\";\n },\n\n get settings() {\n return _settingsmanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"].collections;\n },\n\n get emotes() {\n return {};\n },\n\n get version() {\n return data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].version;\n }\n\n};\n\nBdApi.getAllWindowPreferences = function () {\n return _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getData(\"windowprefs\") || {};\n};\n\nBdApi.getWindowPreference = function (key) {\n return this.getAllWindowPreferences()[key];\n};\n\nBdApi.setWindowPreference = function (key, value) {\n const prefs = this.getAllWindowPreferences();\n prefs[key] = value;\n return _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setData(\"windowprefs\", prefs);\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.injectCSS = function (id, css) {\n _dommanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].injectStyle(id, css);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.clearCSS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].removeStyle(id);\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.linkJS = function (id, url) {\n return _dommanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].injectScript(id, url);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.unlinkJS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].removeScript(id);\n};\n/**\r\n * Shows a generic but very customizable modal.\r\n * @param {string} title - title of the modal\r\n * @param {string} content - a string of text to display in the modal\r\n */\n\n\nBdApi.alert = function (title, content) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_7__[\"default\"].alert(title, content);\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. Everything is wrapped in Discord's `TextElement` 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 */\n\n\nBdApi.showConfirmationModal = function (title, content, options = {}) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_7__[\"default\"].showConfirmationModal(title, content, options);\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=true] 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=3000] Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\r\n * @param {boolean} [options.forceShow=false] Whether to force showing the toast and ignore the bd setting\r\n */\n\n\nBdApi.showToast = function (content, options = {}) {\n _ui_toasts__WEBPACK_IMPORTED_MODULE_6__[\"default\"].show(content, options);\n}; // Finds module\n\n\nBdApi.findModule = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getModule(filter);\n}; // Finds module\n\n\nBdApi.findAllModules = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getModule(filter, false);\n}; // Finds module\n\n\nBdApi.findModuleByProps = function (...props) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getByProps(...props);\n};\n\nBdApi.findModuleByPrototypes = function (...protos) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getByPrototypes(...protos);\n};\n\nBdApi.findModuleByDisplayName = function (name) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getByDisplayName(name);\n}; // Gets react instance\n\n\nBdApi.getInternalInstance = function (node) {\n if (!(node instanceof window.jQuery) && !(node instanceof Element)) return undefined;\n if (node instanceof jQuery) node = node[0];\n return _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getReactInstance(node);\n}; // Gets data\n\n\nBdApi.loadData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getPluginData(pluginName, key);\n};\n\nBdApi.getData = BdApi.loadData; // Sets data\n\nBdApi.saveData = function (pluginName, key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setPluginData(pluginName, key, data);\n};\n\nBdApi.setData = BdApi.saveData; // Deletes data\n\nBdApi.deleteData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].deletePluginData(pluginName, key);\n}; // Patches other functions\n\n\nBdApi.monkeyPatch = function (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.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 = _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n } else {\n if (before) _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n\n if (once) cancel();\n return data.returnValue;\n };\n\n what[methodName].__monkeyPatched = true;\n if (!what[methodName].__originalMethod) what[methodName].__originalMethod = origMethod;\n what[methodName].displayName = \"patched \" + (what[methodName].displayName || methodName);\n return cancel;\n}; // Event when element is removed\n\n\nBdApi.onRemoved = function (node, callback) {\n return _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].onRemoved(node, callback);\n}; // Wraps function in try..catch\n\n\nBdApi.suppressErrors = function (method, message) {\n return _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(method, message);\n}; // Tests for valid JSON\n\n\nBdApi.testJSON = function (data) {\n return _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].testJSON(data);\n}; //Get another plugin\n//name = name of plugin\n\n\nBdApi.getPlugin = function (name) {\n _logger__WEBPACK_IMPORTED_MODULE_11__[\"default\"].warn(\"BdApi\", \"getPlugin is deprecated. Please make use of the addon api (BdApi.Plugins)\");\n return _pluginmanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addonList.find(a => a.name == name);\n};\n\nBdApi.isPluginEnabled = function (name) {\n _logger__WEBPACK_IMPORTED_MODULE_11__[\"default\"].warn(\"BdApi\", \"isPluginEnabled is deprecated. Please make use of the addon api (BdApi.Plugins)\");\n const plugin = this.getPlugin(name);\n if (!plugin) return false;\n return _pluginmanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isEnabled(plugin.id);\n};\n\nBdApi.isThemeEnabled = function (name) {\n _logger__WEBPACK_IMPORTED_MODULE_11__[\"default\"].warn(\"BdApi\", \"isThemeEnabled is deprecated. Please make use of the addon api (BdApi.Themes)\");\n const theme = _thememanager__WEBPACK_IMPORTED_MODULE_9__[\"default\"].addonList.find(a => a.name == name);\n if (!theme) return false;\n return _thememanager__WEBPACK_IMPORTED_MODULE_9__[\"default\"].isEnabled(theme.id);\n};\n\nBdApi.isSettingEnabled = function (collection, category, id) {\n return _settingsmanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"].get(collection, category, id);\n};\n\nBdApi.enableSetting = function (collection, category, id) {\n return _settingsmanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"].set(collection, category, id, true);\n};\n\nBdApi.disableSetting = function (collection, category, id) {\n return _settingsmanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"].set(collection, category, id, false);\n};\n\nBdApi.toggleSetting = function (collection, category, id) {\n return _settingsmanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"].set(collection, category, id, !_settingsmanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"].get(collection, category, id));\n}; // Gets data\n\n\nBdApi.getBDData = function (key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getBDData(key);\n}; // Sets data\n\n\nBdApi.setBDData = function (key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setBDData(key, data);\n};\n\nconst makeAddonAPI = manager => new class AddonAPI {\n get folder() {\n return manager.folder;\n }\n\n isEnabled(idOrFile) {\n return manager.isEnabled(idOrFile);\n }\n\n enable(idOrAddon) {\n return manager.enableAddon(idOrAddon);\n }\n\n disable(idOrAddon) {\n return manager.disableAddon(idOrAddon);\n }\n\n toggle(idOrAddon) {\n return manager.toggleAddon(idOrAddon);\n }\n\n reload(idOrFileOrAddon) {\n return manager.reloadAddon(idOrFileOrAddon);\n }\n\n get(idOrFile) {\n return manager.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n }\n\n getAll() {\n return manager.addonList;\n }\n\n}();\n\nBdApi.Plugins = makeAddonAPI(_pluginmanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\nBdApi.Themes = makeAddonAPI(_thememanager__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\nObject.freeze(BdApi);\nObject.freeze(BdApi.Plugins);\nObject.freeze(BdApi.Themes);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BdApi);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2luYXBpLmpzPzZhOTMiXSwibmFtZXMiOlsiQmRBcGkiLCJSZWFjdCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3RET00iLCJXaW5kb3dDb25maWdGaWxlIiwic2V0dGluZ3MiLCJTZXR0aW5ncyIsImNvbGxlY3Rpb25zIiwiZW1vdGVzIiwidmVyc2lvbiIsIkNvbmZpZyIsImdldEFsbFdpbmRvd1ByZWZlcmVuY2VzIiwiRGF0YVN0b3JlIiwiZ2V0RGF0YSIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJrZXkiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwidmFsdWUiLCJwcmVmcyIsInNldERhdGEiLCJpbmplY3RDU1MiLCJpZCIsImNzcyIsIkRPTU1hbmFnZXIiLCJpbmplY3RTdHlsZSIsImNsZWFyQ1NTIiwicmVtb3ZlU3R5bGUiLCJsaW5rSlMiLCJ1cmwiLCJpbmplY3RTY3JpcHQiLCJ1bmxpbmtKUyIsInJlbW92ZVNjcmlwdCIsImFsZXJ0IiwidGl0bGUiLCJjb250ZW50IiwiTW9kYWxzIiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwib3B0aW9ucyIsInNob3dUb2FzdCIsIlRvYXN0cyIsInNob3ciLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJnZXRNb2R1bGUiLCJmaW5kQWxsTW9kdWxlcyIsImZpbmRNb2R1bGVCeVByb3BzIiwicHJvcHMiLCJnZXRCeVByb3BzIiwiZmluZE1vZHVsZUJ5UHJvdG90eXBlcyIsInByb3RvcyIsImdldEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwibmFtZSIsImdldEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsIndpbmRvdyIsImpRdWVyeSIsIkVsZW1lbnQiLCJ1bmRlZmluZWQiLCJVdGlsaXRpZXMiLCJnZXRSZWFjdEluc3RhbmNlIiwibG9hZERhdGEiLCJwbHVnaW5OYW1lIiwiZ2V0UGx1Z2luRGF0YSIsInNhdmVEYXRhIiwiZGF0YSIsInNldFBsdWdpbkRhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIm1vbmtleVBhdGNoIiwid2hhdCIsIm1ldGhvZE5hbWUiLCJiZWZvcmUiLCJhZnRlciIsImluc3RlYWQiLCJvbmNlIiwic2lsZW50IiwiZm9yY2UiLCJkaXNwbGF5TmFtZSIsImNvbnN0cnVjdG9yIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwib3JpZ01ldGhvZCIsImNhbmNlbCIsInRoaXNPYmplY3QiLCJtZXRob2RBcmd1bWVudHMiLCJhcmd1bWVudHMiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwicmV0dXJuVmFsdWUiLCJhcHBseSIsInRlbXBSZXQiLCJzdXBwcmVzc0Vycm9ycyIsIl9fbW9ua2V5UGF0Y2hlZCIsIl9fb3JpZ2luYWxNZXRob2QiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJ0ZXN0SlNPTiIsImdldFBsdWdpbiIsIkxvZ2dlciIsIndhcm4iLCJQbHVnaW5NYW5hZ2VyIiwiYWRkb25MaXN0IiwiZmluZCIsImEiLCJpc1BsdWdpbkVuYWJsZWQiLCJwbHVnaW4iLCJpc0VuYWJsZWQiLCJpc1RoZW1lRW5hYmxlZCIsInRoZW1lIiwiVGhlbWVNYW5hZ2VyIiwiaXNTZXR0aW5nRW5hYmxlZCIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImdldCIsImVuYWJsZVNldHRpbmciLCJzZXQiLCJkaXNhYmxlU2V0dGluZyIsInRvZ2dsZVNldHRpbmciLCJnZXRCRERhdGEiLCJzZXRCRERhdGEiLCJtYWtlQWRkb25BUEkiLCJtYW5hZ2VyIiwiQWRkb25BUEkiLCJmb2xkZXIiLCJpZE9yRmlsZSIsImVuYWJsZSIsImlkT3JBZGRvbiIsImVuYWJsZUFkZG9uIiwiZGlzYWJsZSIsImRpc2FibGVBZGRvbiIsInRvZ2dsZSIsInRvZ2dsZUFkZG9uIiwicmVsb2FkIiwiaWRPckZpbGVPckFkZG9uIiwicmVsb2FkQWRkb24iLCJjIiwiZmlsZW5hbWUiLCJnZXRBbGwiLCJQbHVnaW5zIiwiVGhlbWVzIiwiT2JqZWN0IiwiZnJlZXplIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLEtBQUssR0FBRztBQUNWLE1BQUlDLEtBQUosR0FBWTtBQUFFLFdBQU9DLHVEQUFjLENBQUNELEtBQXRCO0FBQThCLEdBRGxDOztBQUVWLE1BQUlFLFFBQUosR0FBZTtBQUFFLFdBQU9ELHVEQUFjLENBQUNDLFFBQXRCO0FBQWlDLEdBRnhDOztBQUdWLE1BQUlDLGdCQUFKLEdBQXVCO0FBQUMsV0FBTyxFQUFQO0FBQVcsR0FIekI7O0FBSVYsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBT0MseURBQVEsQ0FBQ0MsV0FBaEI7QUFBNkIsR0FKbkM7O0FBS1YsTUFBSUMsTUFBSixHQUFhO0FBQUMsV0FBTyxFQUFQO0FBQVcsR0FMZjs7QUFNVixNQUFJQyxPQUFKLEdBQWM7QUFBQyxXQUFPQywyQ0FBTSxDQUFDRCxPQUFkO0FBQXVCOztBQU41QixDQUFkOztBQVNBVCxLQUFLLENBQUNXLHVCQUFOLEdBQWdDLFlBQVc7QUFDdkMsU0FBT0Msa0RBQVMsQ0FBQ0MsT0FBVixDQUFrQixhQUFsQixLQUFvQyxFQUEzQztBQUNILENBRkQ7O0FBSUFiLEtBQUssQ0FBQ2MsbUJBQU4sR0FBNEIsVUFBU0MsR0FBVCxFQUFjO0FBQ3RDLFNBQU8sS0FBS0osdUJBQUwsR0FBK0JJLEdBQS9CLENBQVA7QUFDSCxDQUZEOztBQUlBZixLQUFLLENBQUNnQixtQkFBTixHQUE0QixVQUFTRCxHQUFULEVBQWNFLEtBQWQsRUFBcUI7QUFDN0MsUUFBTUMsS0FBSyxHQUFHLEtBQUtQLHVCQUFMLEVBQWQ7QUFDQU8s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QUN0RXBCLEtBQUcsQ0FBQ1csUUFBRCxFQUFXO0FBQUMsV0FBT0gsT0FBTyxDQUFDcEIsU0FBUixDQUFrQkMsSUFBbEIsQ0FBdUJpQyxDQUFDLElBQUlBLENBQUMsQ0FBQ3pILEVBQUYsSUFBUThHLFFBQVIsSUFBb0JXLENBQUMsQ0FBQ0MsUUFBRixJQUFjWixRQUE5RCxDQUFQO0FBQWdGOztBQUMvRmEsUUFBTSxHQUFHO0FBQUMsV0FBT2hCLE9BQU8sQ0FBQ3BCLFNBQWY7QUFBMEI7O0FBUmEsQ0FBbkIsRUFBbEM7O0FBV0E1RyxLQUFLLENBQUNpSixPQUFOLEdBQWdCbEIsWUFBWSxDQUFDcEIsc0RBQUQsQ0FBNUI7QUFDQTNHLEtBQUssQ0FBQ2tKLE1BQU4sR0FBZW5CLFlBQVksQ0FBQ1gscURBQUQsQ0FBM0I7QUFFQStCLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjcEosS0FBZDtBQUNBbUosTUFBTSxDQUFDQyxNQUFQLENBQWNwSixLQUFLLENBQUNpSixPQUFwQjtBQUNBRSxNQUFNLENBQUNDLE1BQVAsQ0FBY3BKLEtBQUssQ0FBQ2tKLE1BQXBCO0FBRWVsSixvRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL3BsdWdpbmFwaS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja21vZHVsZXNcIjtcclxuaW1wb3J0IERpc2NvcmRNb2R1bGVzIGZyb20gXCIuL2Rpc2NvcmRtb2R1bGVzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBET01NYW5hZ2VyIGZyb20gXCIuL2RvbW1hbmFnZXJcIjtcclxuaW1wb3J0IFRvYXN0cyBmcm9tIFwiLi4vdWkvdG9hc3RzXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL3VpL21vZGFsc1wiO1xyXG5pbXBvcnQgUGx1Z2luTWFuYWdlciBmcm9tIFwiLi9wbHVnaW5tYW5hZ2VyXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vdGhlbWVtYW5hZ2VyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuXHJcbmNvbnN0IEJkQXBpID0ge1xyXG4gICAgZ2V0IFJlYWN0KCkgeyByZXR1cm4gRGlzY29yZE1vZHVsZXMuUmVhY3Q7IH0sXHJcbiAgICBnZXQgUmVhY3RET00oKSB7IHJldHVybiBEaXNjb3JkTW9kdWxlcy5SZWFjdERPTTsgfSxcclxuICAgIGdldCBXaW5kb3dDb25maWdGaWxlKCkge3JldHVybiBcIlwiO30sXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7cmV0dXJuIFNldHRpbmdzLmNvbGxlY3Rpb25zO30sXHJcbiAgICBnZXQgZW1vdGVzKCkge3JldHVybiB7fTt9LFxyXG4gICAgZ2V0IHZlcnNpb24oKSB7cmV0dXJuIENvbmZpZy52ZXJzaW9uO31cclxufTtcclxuXHJcbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldERhdGEoXCJ3aW5kb3dwcmVmc1wiKSB8fCB7fTtcclxufTtcclxuXHJcbkJkQXBpLmdldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiB0aGlzLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKClba2V5XTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICBjb25zdCBwcmVmcyA9IHRoaXMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxuICAgIHByZWZzW2tleV0gPSB2YWx1ZTtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0RGF0YShcIndpbmRvd3ByZWZzXCIsIHByZWZzKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NTWFuYWdlci5pbmplY3RTdHlsZShpZCwgY3NzKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS5jbGVhckNTUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NTWFuYWdlci5yZW1vdmVTdHlsZShpZCk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcclxuICAgIHJldHVybiBET01NYW5hZ2VyLmluamVjdFNjcmlwdChpZCwgdXJsKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NTWFuYWdlci5yZW1vdmVTY3JpcHQoaWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgbW9kYWwuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIGEgc3RyaW5nIG9mIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgbW9kYWxcclxuICovXHJcbkJkQXBpLmFsZXJ0ID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICBNb2RhbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeXRoaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBUZXh0RWxlbWVudGAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBNb2RhbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvYXN0LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudHlwZT1cIlwiXSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaWNvbj10cnVlXSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aW1lb3V0PTMwMDBdIEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZVNob3c9ZmFsc2VdIFdoZXRoZXIgdG8gZm9yY2Ugc2hvd2luZyB0aGUgdG9hc3QgYW5kIGlnbm9yZSB0aGUgYmQgc2V0dGluZ1xyXG4gKi9cclxuQmRBcGkuc2hvd1RvYXN0ID0gZnVuY3Rpb24oY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBUb2FzdHMuc2hvdyhjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUoZmlsdGVyLCBmYWxzZSk7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvcHMgPSBmdW5jdGlvbiguLi5wcm9wcykge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoLi4ucHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvdG90eXBlcyguLi5wcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5sb2FkRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXREYXRhID0gQmRBcGkubG9hZERhdGE7XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2F2ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0RGF0YSA9IEJkQXBpLnNhdmVEYXRhO1xyXG5cclxuLy8gRGVsZXRlcyBkYXRhXHJcbkJkQXBpLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuLy8gUGF0Y2hlcyBvdGhlciBmdW5jdGlvbnNcclxuQmRBcGkubW9ua2V5UGF0Y2ggPSBmdW5jdGlvbih3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmVmb3JlLCBhZnRlciwgaW5zdGVhZCwgb25jZSA9IGZhbHNlLCBzaWxlbnQgPSBmYWxzZSwgZm9yY2UgPSBmYWxzZX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XHJcbiAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcclxuICAgICAgICBlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcclxuICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcclxuICAgIH07XHJcbiAgICB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcclxuICAgICAgICAgICAgbWV0aG9kQXJndW1lbnRzOiBhcmd1bWVudHMsXHJcbiAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXHJcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxyXG4gICAgICAgICAgICBjYWxsT3JpZ2luYWxNZXRob2Q6ICgpID0+IGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLm9yaWdpbmFsTWV0aG9kLmFwcGx5KGRhdGEudGhpc09iamVjdCwgZGF0YS5tZXRob2RBcmd1bWVudHMpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaW5zdGVhZCkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wUmV0ID0gVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGluc3RlYWQsIFwiYGluc3RlYWRgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xyXG4gICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyhhZnRlciwgXCJgYWZ0ZXJgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcclxuICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgIH07XHJcbiAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XHJcbiAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCkgd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ01ldGhvZDtcclxuICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBcInBhdGNoZWQgXCIgKyAod2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCBtZXRob2ROYW1lKTtcclxuICAgIHJldHVybiBjYW5jZWw7XHJcbn07XHJcbi8vIEV2ZW50IHdoZW4gZWxlbWVudCBpcyByZW1vdmVkXHJcbkJkQXBpLm9uUmVtb3ZlZCA9IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gVXRpbGl0aWVzLm9uUmVtb3ZlZChub2RlLCBjYWxsYmFjayk7XHJcbn07XHJcblxyXG4vLyBXcmFwcyBmdW5jdGlvbiBpbiB0cnkuLmNhdGNoXHJcbkJkQXBpLnN1cHByZXNzRXJyb3JzID0gZnVuY3Rpb24obWV0aG9kLCBtZXNzYWdlKSB7XHJcbiAgICByZXR1cm4gVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlsaXRpZXMudGVzdEpTT04oZGF0YSk7XHJcbn07XHJcblxyXG4vL0dldCBhbm90aGVyIHBsdWdpblxyXG4vL25hbWUgPSBuYW1lIG9mIHBsdWdpblxyXG5CZEFwaS5nZXRQbHVnaW4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgTG9nZ2VyLndhcm4oXCJCZEFwaVwiLCBcImdldFBsdWdpbiBpcyBkZXByZWNhdGVkLiBQbGVhc2UgbWFrZSB1c2Ugb2YgdGhlIGFkZG9uIGFwaSAoQmRBcGkuUGx1Z2lucylcIik7XHJcbiAgICByZXR1cm4gUGx1Z2luTWFuYWdlci5hZGRvbkxpc3QuZmluZChhID0+IGEubmFtZSA9PSBuYW1lKTtcclxufTtcclxuXHJcbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIExvZ2dlci53YXJuKFwiQmRBcGlcIiwgXCJpc1BsdWdpbkVuYWJsZWQgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIG1ha2UgdXNlIG9mIHRoZSBhZGRvbiBhcGkgKEJkQXBpLlBsdWdpbnMpXCIpO1xyXG4gICAgY29uc3QgcGx1Z2luID0gdGhpcy5nZXRQbHVnaW4obmFtZSk7XHJcbiAgICBpZiAoIXBsdWdpbikgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIFBsdWdpbk1hbmFnZXIuaXNFbmFibGVkKHBsdWdpbi5pZCk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1RoZW1lRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIExvZ2dlci53YXJuKFwiQmRBcGlcIiwgXCJpc1RoZW1lRW5hYmxlZCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgbWFrZSB1c2Ugb2YgdGhlIGFkZG9uIGFwaSAoQmRBcGkuVGhlbWVzKVwiKTtcclxuICAgIGNvbnN0IHRoZW1lID0gVGhlbWVNYW5hZ2VyLmFkZG9uTGlzdC5maW5kKGEgPT4gYS5uYW1lID09IG5hbWUpO1xyXG4gICAgaWYgKCF0aGVtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIFRoZW1lTWFuYWdlci5pc0VuYWJsZWQodGhlbWUuaWQpO1xyXG59O1xyXG5cclxuQmRBcGkuaXNTZXR0aW5nRW5hYmxlZCA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCkge1xyXG4gICAgcmV0dXJuIFNldHRpbmdzLmdldChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpO1xyXG59O1xyXG5cclxuQmRBcGkuZW5hYmxlU2V0dGluZyA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCkge1xyXG4gICAgcmV0dXJuIFNldHRpbmdzLnNldChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQsIHRydWUpO1xyXG59O1xyXG5cclxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpIHtcclxuICAgIHJldHVybiBTZXR0aW5ncy5zZXQoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCBmYWxzZSk7XHJcbn07XHJcblxyXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKSB7XHJcbiAgICByZXR1cm4gU2V0dGluZ3Muc2V0KGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCwgIVNldHRpbmdzLmdldChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XHJcbn07XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuY29uc3QgbWFrZUFkZG9uQVBJID0gKG1hbmFnZXIpID0+IG5ldyBjbGFzcyBBZGRvbkFQSSB7XHJcbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBtYW5hZ2VyLmZvbGRlcjt9XHJcbiAgICBpc0VuYWJsZWQoaWRPckZpbGUpIHtyZXR1cm4gbWFuYWdlci5pc0VuYWJsZWQoaWRPckZpbGUpO31cclxuICAgIGVuYWJsZShpZE9yQWRkb24pIHtyZXR1cm4gbWFuYWdlci5lbmFibGVBZGRvbihpZE9yQWRkb24pO31cclxuICAgIGRpc2FibGUoaWRPckFkZG9uKSB7cmV0dXJuIG1hbmFnZXIuZGlzYWJsZUFkZG9uKGlkT3JBZGRvbik7fVxyXG4gICAgdG9nZ2xlKGlkT3JBZGRvbikge3JldHVybiBtYW5hZ2VyLnRvZ2dsZUFkZG9uKGlkT3JBZGRvbik7fVxyXG4gICAgcmVsb2FkKGlkT3JGaWxlT3JBZGRvbikge3JldHVybiBtYW5hZ2VyLnJlbG9hZEFkZG9uKGlkT3JGaWxlT3JBZGRvbik7fVxyXG4gICAgZ2V0KGlkT3JGaWxlKSB7cmV0dXJuIG1hbmFnZXIuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGUpO31cclxuICAgIGdldEFsbCgpIHtyZXR1cm4gbWFuYWdlci5hZGRvbkxpc3Q7fVxyXG59O1xyXG5cclxuQmRBcGkuUGx1Z2lucyA9IG1ha2VBZGRvbkFQSShQbHVnaW5NYW5hZ2VyKTtcclxuQmRBcGkuVGhlbWVzID0gbWFrZUFkZG9uQVBJKFRoZW1lTWFuYWdlcik7XHJcblxyXG5PYmplY3QuZnJlZXplKEJkQXBpKTtcclxuT2JqZWN0LmZyZWV6ZShCZEFwaS5QbHVnaW5zKTtcclxuT2JqZWN0LmZyZWV6ZShCZEFwaS5UaGVtZXMpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/pluginapi.js\n"); /***/ }), @@ -599,7 +587,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data /***/ (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 Utilities; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n\n\nclass Utilities {\n static repoUrl(path) {\n return `https://cdn.staticaly.com/gh/${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].repo}/BetterDiscordApp/${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].hash}/${path}`;\n }\n /**\r\n * Parses a string of HTML and returns the results. If the second parameter is true,\r\n * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}.\r\n * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node.\r\n *\r\n * If the second parameter is false, then the return value will be the list of parsed\r\n * nodes and there were multiple top level nodes, otherwise the single node is returned.\r\n * @param {string} html - HTML to be parsed\r\n * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment`\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing\r\n */\n\n\n static parseHTML(html, fragment = false) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n const node = template.content.cloneNode(true);\n if (fragment) return node;\n return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0];\n }\n\n static getTextArea() {\n return $(\".channelTextArea-1LDbYG 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 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 suppressErrors(method, message) {\n return (...params) => {\n try {\n return method(...params);\n } catch (e) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(\"SuppressedError\", \"Error occurred in \" + message, e);\n }\n };\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 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 /**\r\n * Generates an automatically memoizing version of an object.\r\n * @author Zerebos\r\n * @param {Object} object - object to memoize\r\n * @returns {Proxy} the proxy to the object that memoizes properties\r\n */\n\n\n static memoizeObject(object) {\n const proxy = new Proxy(object, {\n get: function (obj, mod) {\n if (!obj.hasOwnProperty(mod)) return undefined;\n\n if (Object.getOwnPropertyDescriptor(obj, mod).get) {\n const value = obj[mod];\n delete obj[mod];\n obj[mod] = value;\n }\n\n return obj[mod];\n },\n set: function (obj, mod, value) {\n if (obj.hasOwnProperty(mod)) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"MemoizedObject\", \"Trying to overwrite existing property\");\n obj[mod] = value;\n return obj[mod];\n }\n });\n Object.defineProperty(proxy, \"hasOwnProperty\", {\n value: function (prop) {\n return this[prop] !== undefined;\n }\n });\n return proxy;\n }\n /**\r\n * Deep extends an object with a set of other objects. Objects later in the list\r\n * of `extenders` have priority, that is to say if one sets a key to be a primitive,\r\n * it will be overwritten with the next one with the same key. If it is an object,\r\n * and the keys match, the object is extended. This happens recursively.\r\n * @param {object} extendee - Object to be extended\r\n * @param {...object} extenders - Objects to extend with\r\n * @returns {object} - A reference to `extendee`\r\n */\n\n\n static extend(extendee, ...extenders) {\n for (let i = 0; i < extenders.length; i++) {\n for (const key in extenders[i]) {\n if (extenders[i].hasOwnProperty(key)) {\n if (typeof extendee[key] === \"object\" && typeof extenders[i][key] === \"object\") this.extend(extendee[key], extenders[i][key]);else if (typeof extenders[i][key] === \"object\") extendee[key] = {}, this.extend(extendee[key], extenders[i][key]);else extendee[key] = extenders[i][key];\n }\n }\n }\n\n return extendee;\n }\n /**\r\n * Format strings with placeholders (`{{placeholder}}`) into full strings.\r\n * Quick example: `PluginUtilities.formatString(\"Hello, {{user}}\", {user: \"Zerebos\"})`\r\n * would return \"Hello, Zerebos\".\r\n * @param {string} string - string to format\r\n * @param {object} values - object literal of placeholders to replacements\r\n * @returns {string} the properly formatted string\r\n */\n\n\n static formatString(string, values) {\n for (const val in values) {\n let replacement = values[val];\n if (Array.isArray(replacement)) replacement = JSON.stringify(replacement);\n if (typeof replacement === \"object\" && replacement !== null) replacement = replacement.toString();\n string = string.replace(new RegExp(`{{${val}}}`, \"g\"), replacement);\n }\n\n return string;\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter.\r\n * @param {object} tree Tree that should be walked\r\n * @param {callable} searchFilter Filter to check against each object and subobject\r\n * @param {object} options Additional options to customize the search\r\n * @param {Array|null} [options.walkable=null] Array of strings to use as keys that are allowed to be walked on. Null value indicates all keys are walkable\r\n * @param {Array} [options.ignore=[]] Array of strings to use as keys to exclude from the search, most helpful when `walkable = null`.\r\n */\n\n\n static findInTree(tree, searchFilter, {\n walkable = null,\n ignore = []\n } = {}) {\n if (typeof searchFilter === \"string\") {\n if (tree.hasOwnProperty(searchFilter)) return tree[searchFilter];\n } else if (searchFilter(tree)) {\n return tree;\n }\n\n if (typeof tree !== \"object\" || tree == null) return undefined;\n let tempReturn = undefined;\n\n if (tree instanceof Array) {\n for (const value of tree) {\n tempReturn = this.findInTree(value, searchFilter, {\n walkable,\n ignore\n });\n if (typeof tempReturn != \"undefined\") return tempReturn;\n }\n } else {\n const toWalk = walkable == null ? Object.keys(tree) : walkable;\n\n for (const key of toWalk) {\n if (typeof tree[key] == \"undefined\" || ignore.includes(key)) continue;\n tempReturn = this.findInTree(tree[key], searchFilter, {\n walkable,\n ignore\n });\n if (typeof tempReturn != \"undefined\") return tempReturn;\n }\n }\n\n return tempReturn;\n }\n /**\r\n * Gets a nested property (if it exists) safely. Path should be something like `prop.prop2.prop3`.\r\n * Numbers can be used for arrays as well like `prop.prop2.array.0.id`.\r\n * @param {Object} obj - object to get nested property of\r\n * @param {string} path - representation of the property to obtain\r\n */\n\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function (currentObj, prop) {\n return currentObj && currentObj[prop];\n }, obj);\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter. Great for patching render functions.\r\n * @param {object} tree React tree to look through. Can be a rendered object or an internal instance.\r\n * @param {callable} searchFilter Filter function to check subobjects against.\r\n */\n\n\n static findInRenderTree(tree, searchFilter, {\n walkable = [\"props\", \"children\", \"child\", \"sibling\"],\n ignore = []\n } = {}) {\n return this.findInTree(tree, searchFilter, {\n walkable,\n ignore\n });\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter. Great for patching render functions.\r\n * @param {object} tree React tree to look through. Can be a rendered object or an internal instance.\r\n * @param {callable} searchFilter Filter function to check subobjects against.\r\n */\n\n\n static findInReactTree(tree, searchFilter) {\n return this.findInTree(tree, searchFilter, {\n walkable: [\"props\", \"children\", \"return\", \"stateNode\"]\n });\n }\n\n static getReactInstance(node) {\n if (node.__reactInternalInstance$) return node.__reactInternalInstance$;\n return node[Object.keys(node).find(k => k.startsWith(\"__reactInternalInstance\"))] || null;\n }\n /**\r\n * Grabs a value from the react internal instance. Allows you to grab\r\n * long depth values safely without accessing no longer valid properties.\r\n * @param {HTMLElement} node - node to obtain react instance of\r\n * @param {object} options - options for the search\r\n * @param {array} [options.include] - list of items to include from the search\r\n * @param {array} [options.exclude=[\"Popout\", \"Tooltip\", \"Scroller\", \"BackgroundFlash\"]] - list of items to exclude from the search\r\n * @param {callable} [options.filter=_=>_] - filter to check the current instance with (should return a boolean)\r\n * @return {(*|null)} the owner instance or undefined if not found.\r\n */\n\n\n static getOwnerInstance(node, {\n include,\n exclude = [\"Popout\", \"Tooltip\", \"Scroller\", \"BackgroundFlash\"],\n filter = _ => _\n } = {}) {\n if (node === undefined) return undefined;\n const excluding = include === undefined;\n const nameFilter = excluding ? exclude : include;\n\n function getDisplayName(owner) {\n const type = owner.type;\n if (!type) return null;\n return type.displayName || type.name || null;\n }\n\n function classFilter(owner) {\n const name = getDisplayName(owner);\n return name !== null && !!(nameFilter.includes(name) ^ excluding);\n }\n\n let curr = this.getReactInstance(node);\n\n for (curr = curr && curr.return; curr !== null; curr = curr.return) {\n if (curr === null) continue;\n const owner = curr.stateNode;\n if (curr !== null && !(owner instanceof HTMLElement) && classFilter(curr) && filter(owner)) return owner;\n }\n\n return null;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdXRpbGl0aWVzLmpzPzk3NjkiXSwibmFtZXMiOlsiVXRpbGl0aWVzIiwicmVwb1VybCIsInBhdGgiLCJDb25maWciLCJyZXBvIiwiaGFzaCIsInBhcnNlSFRNTCIsImh0bWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwibm9kZSIsImNvbnRlbnQiLCJjbG9uZU5vZGUiLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwiZ2V0VGV4dEFyZWEiLCIkIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwidGV4dCIsImZvY3VzIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJ2YWx1ZSIsImV4ZWNDb21tYW5kIiwiZXNjYXBlIiwicyIsInJlcGxhY2UiLCJ0ZXN0SlNPTiIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJlcnIiLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJwYXJhbXMiLCJlIiwiTG9nZ2VyIiwic3RhY2t0cmFjZSIsIm9uUmVtb3ZlZCIsImNhbGxiYWNrIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibSIsIm11dGF0aW9uIiwibm9kZXMiLCJBcnJheSIsImZyb20iLCJyZW1vdmVkTm9kZXMiLCJkaXJlY3RNYXRjaCIsImluZGV4T2YiLCJwYXJlbnRNYXRjaCIsInNvbWUiLCJwYXJlbnQiLCJjb250YWlucyIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwiYm9keSIsInN1YnRyZWUiLCJjaGlsZExpc3QiLCJpc0VtcHR5Iiwib2JqIiwidW5kZWZpbmVkIiwiaXNBcnJheSIsImtleSIsImhhc093blByb3BlcnR5IiwibWVtb2l6ZU9iamVjdCIsIm9iamVjdCIsInByb3h5IiwiUHJveHkiLCJnZXQiLCJtb2QiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJzZXQiLCJlcnJvciIsImRlZmluZVByb3BlcnR5IiwicHJvcCIsImV4dGVuZCIsImV4dGVuZGVlIiwiZXh0ZW5kZXJzIiwiaSIsImZvcm1hdFN0cmluZyIsInN0cmluZyIsInZhbHVlcyIsInZhbCIsInJlcGxhY2VtZW50Iiwic3RyaW5naWZ5IiwidG9TdHJpbmciLCJSZWdFeHAiLCJmaW5kSW5UcmVlIiwidHJlZSIsInNlYXJjaEZpbHRlciIsIndhbGthYmxlIiwiaWdub3JlIiwidGVtcFJldHVybiIsInRvV2FsayIsImtleXMiLCJpbmNsdWRlcyIsImdldE5lc3RlZFByb3AiLCJzcGxpdCIsInJlZHVjZSIsImN1cnJlbnRPYmoiLCJmaW5kSW5SZW5kZXJUcmVlIiwiZmluZEluUmVhY3RUcmVlIiwiZ2V0UmVhY3RJbnN0YW5jZSIsIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlJCIsImZpbmQiLCJrIiwic3RhcnRzV2l0aCIsImdldE93bmVySW5zdGFuY2UiLCJpbmNsdWRlIiwiZXhjbHVkZSIsImZpbHRlciIsIl8iLCJleGNsdWRpbmciLCJuYW1lRmlsdGVyIiwiZ2V0RGlzcGxheU5hbWUiLCJvd25lciIsInR5cGUiLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJjbGFzc0ZpbHRlciIsImN1cnIiLCJyZXR1cm4iLCJzdGF0ZU5vZGUiLCJIVE1MRWxlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRWUsTUFBTUEsU0FBTixDQUFnQjtBQUUzQixTQUFPQyxPQUFQLENBQWVDLElBQWYsRUFBcUI7QUFDakIsV0FBUSxnQ0FBK0JDLDJDQUFNLENBQUNDLElBQUsscUJBQW9CRCwyQ0FBTSxDQUFDRSxJQUFLLElBQUdILElBQUssRUFBM0Y7QUFDSDtBQUVEOzs7Ozs7Ozs7Ozs7O0FBV0EsU0FBT0ksU0FBUCxDQUFpQkMsSUFBakIsRUFBdUJDLFFBQVEsR0FBRyxLQUFsQyxFQUF5QztBQUNyQyxVQUFNQyxRQUFRLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixVQUF2QixDQUFq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RUFBbUI7QUFDbkIsWUFBTUwsS0FBSyxHQUFHSyxJQUFJLENBQUNFLFNBQW5CO0FBQ0EsVUFBSUYsSUFBSSxLQUFLLElBQVQsSUFBaUIsRUFBRUwsS0FBSyxZQUFZUSxXQUFuQixDQUFqQixJQUFvREosV0FBVyxDQUFDQyxJQUFELENBQS9ELElBQXlFVixNQUFNLENBQUNLLEtBQUQsQ0FBbkYsRUFBNEYsT0FBT0EsS0FBUDtBQUM1Rjs7QUFFRCxXQUFPLElBQVA7QUFDQTs7QUFqUTZCIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvdXRpbGl0aWVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2VyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlsaXRpZXMge1xyXG5cclxuICAgIHN0YXRpYyByZXBvVXJsKHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gYGh0dHBzOi8vY2RuLnN0YXRpY2FseS5jb20vZ2gvJHtDb25maWcucmVwb30vQmV0dGVyRGlzY29yZEFwcC8ke0NvbmZpZy5oYXNofS8ke3BhdGh9YDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBvZiBIVE1MIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0cnVlLFxyXG4gICAgICogdGhlIHBhcnNlZCBIVE1MIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBkb2N1bWVudCBmcmFnbWVudCB7QHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRGcmFnbWVudH0uXHJcbiAgICAgKiBUaGlzIGlzIGV4dHJlbWVseSB1c2VmdWwgaWYgeW91IGhhdmUgYSBsaXN0IG9mIGVsZW1lbnRzIGF0IHRoZSB0b3AgbGV2ZWwsIHRoZXkgY2FuIHRoZW4gYmUgYXBwZW5kZWQgYWxsIGF0IG9uY2UgdG8gYW5vdGhlciBub2RlLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcclxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xyXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRUZXh0QXJlYSgpIHtcclxuICAgICAgICByZXR1cm4gJChcIi5jaGFubmVsVGV4dEFyZWEtMUxEYllHIHRleHRhcmVhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpbnNlcnRUZXh0KHRleHRhcmVhLCB0ZXh0KSB7XHJcbiAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTtcclxuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XHJcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uRW5kID0gdGV4dGFyZWEudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLCBmYWxzZSwgdGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZShzKSB7XHJcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHRlc3RKU09OKGRhdGEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICB0cnkgeyByZXR1cm4gbWV0aG9kKC4uLnBhcmFtcyk7XHR9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7IExvZ2dlci5zdGFja3RyYWNlKFwiU3VwcHJlc3NlZEVycm9yXCIsIFwiRXJyb3Igb2NjdXJyZWQgaW4gXCIgKyBtZXNzYWdlLCBlKTsgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11dGF0aW9ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XHJcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsIHx8IG9iaiA9PSB1bmRlZmluZWQgfHwgb2JqID09IFwiXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhbiBhdXRvbWF0aWNhbGx5IG1lbW9pemluZyB2ZXJzaW9uIG9mIGFuIG9iamVjdC5cclxuICAgICAqIEBhdXRob3IgWmVyZWJvc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAtIG9iamVjdCB0byBtZW1vaXplXHJcbiAgICAgKiBAcmV0dXJucyB7UHJveHl9IHRoZSBwcm94eSB0byB0aGUgb2JqZWN0IHRoYXQgbWVtb2l6ZXMgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbWVtb2l6ZU9iamVjdChvYmplY3QpIHtcclxuICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShvYmplY3QsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgbW9kKS5nZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialttb2RdO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmpbbW9kXTtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbbW9kXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttb2RdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gTG9nZ2VyLmVycm9yKFwiTWVtb2l6ZWRPYmplY3RcIiwgXCJUcnlpbmcgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnR5XCIpO1xyXG4gICAgICAgICAgICAgICAgb2JqW21vZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbW9kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIFwiaGFzT3duUHJvcGVydHlcIiwge3ZhbHVlOiBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfX0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWVwIGV4dGVuZHMgYW4gb2JqZWN0IHdpdGggYSBzZXQgb2Ygb3RoZXIgb2JqZWN0cy4gT2JqZWN0cyBsYXRlciBpbiB0aGUgbGlzdFxyXG4gICAgICogb2YgYGV4dGVuZGVyc2AgaGF2ZSBwcmlvcml0eSwgdGhhdCBpcyB0byBzYXkgaWYgb25lIHNldHMgYSBrZXkgdG8gYmUgYSBwcmltaXRpdmUsXHJcbiAgICAgKiBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5leHQgb25lIHdpdGggdGhlIHNhbWUga2V5LiBJZiBpdCBpcyBhbiBvYmplY3QsXHJcbiAgICAgKiBhbmQgdGhlIGtleXMgbWF0Y2gsIHRoZSBvYmplY3QgaXMgZXh0ZW5kZWQuIFRoaXMgaGFwcGVucyByZWN1cnNpdmVseS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBleHRlbmRlZSAtIE9iamVjdCB0byBiZSBleHRlbmRlZFxyXG4gICAgICogQHBhcmFtIHsuLi5vYmplY3R9IGV4dGVuZGVycyAtIE9iamVjdHMgdG8gZXh0ZW5kIHdpdGhcclxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IC0gQSByZWZlcmVuY2UgdG8gYGV4dGVuZGVlYFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXh0ZW5kKGV4dGVuZGVlLCAuLi5leHRlbmRlcnMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dGVuZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBleHRlbmRlcnNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChleHRlbmRlcnNbaV0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0ZW5kZWVba2V5XSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZXh0ZW5kZXJzW2ldW2tleV0gPT09IFwib2JqZWN0XCIpIHRoaXMuZXh0ZW5kKGV4dGVuZGVlW2tleV0sIGV4dGVuZGVyc1tpXVtrZXldKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZXh0ZW5kZXJzW2ldW2tleV0gPT09IFwib2JqZWN0XCIpIGV4dGVuZGVlW2tleV0gPSB7fSwgdGhpcy5leHRlbmQoZXh0ZW5kZWVba2V5XSwgZXh0ZW5kZXJzW2ldW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgZXh0ZW5kZWVba2V5XSA9IGV4dGVuZGVyc1tpXVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBleHRlbmRlZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCBzdHJpbmdzIHdpdGggcGxhY2Vob2xkZXJzIChge3twbGFjZWhvbGRlcn19YCkgaW50byBmdWxsIHN0cmluZ3MuXHJcbiAgICAgKiBRdWljayBleGFtcGxlOiBgUGx1Z2luVXRpbGl0aWVzLmZvcm1hdFN0cmluZyhcIkhlbGxvLCB7e3VzZXJ9fVwiLCB7dXNlcjogXCJaZXJlYm9zXCJ9KWBcclxuICAgICAqIHdvdWxkIHJldHVybiBcIkhlbGxvLCBaZXJlYm9zXCIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gc3RyaW5nIHRvIGZvcm1hdFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyAtIG9iamVjdCBsaXRlcmFsIG9mIHBsYWNlaG9sZGVycyB0byByZXBsYWNlbWVudHNcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBwcm9wZXJseSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmb3JtYXRTdHJpbmcoc3RyaW5nLCB2YWx1ZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbCBpbiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdmFsdWVzW3ZhbF07XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2VtZW50KSkgcmVwbGFjZW1lbnQgPSBKU09OLnN0cmluZ2lmeShyZXBsYWNlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YocmVwbGFjZW1lbnQpID09PSBcIm9iamVjdFwiICYmIHJlcGxhY2VtZW50ICE9PSBudWxsKSByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHt2YWx9fX1gLCBcImdcIiksIHJlcGxhY2VtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgdmFsdWUsIHN1Ym9iamVjdCwgb3IgYXJyYXkgZnJvbSBhIHRyZWUgdGhhdCBtYXRjaGVzIGEgc3BlY2lmaWMgZmlsdGVyLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHRyZWUgVHJlZSB0aGF0IHNob3VsZCBiZSB3YWxrZWRcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IHNlYXJjaEZpbHRlciBGaWx0ZXIgdG8gY2hlY2sgYWdhaW5zdCBlYWNoIG9iamVjdCBhbmQgc3Vib2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBzZWFyY2hcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPnxudWxsfSBbb3B0aW9ucy53YWxrYWJsZT1udWxsXSBBcnJheSBvZiBzdHJpbmdzIHRvIHVzZSBhcyBrZXlzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgd2Fsa2VkIG9uLiBOdWxsIHZhbHVlIGluZGljYXRlcyBhbGwga2V5cyBhcmUgd2Fsa2FibGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW29wdGlvbnMuaWdub3JlPVtdXSBBcnJheSBvZiBzdHJpbmdzIHRvIHVzZSBhcyBrZXlzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgc2VhcmNoLCBtb3N0IGhlbHBmdWwgd2hlbiBgd2Fsa2FibGUgPSBudWxsYC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRJblRyZWUodHJlZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGUgPSBudWxsLCBpZ25vcmUgPSBbXX0gPSB7fSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoRmlsdGVyID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmVlLmhhc093blByb3BlcnR5KHNlYXJjaEZpbHRlcikpIHJldHVybiB0cmVlW3NlYXJjaEZpbHRlcl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaEZpbHRlcih0cmVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdHJlZSAhPT0gXCJvYmplY3RcIiB8fCB0cmVlID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGxldCB0ZW1wUmV0dXJuID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0cmVlIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0cmVlKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wUmV0dXJuID0gdGhpcy5maW5kSW5UcmVlKHZhbHVlLCBzZWFyY2hGaWx0ZXIsIHt3YWxrYWJsZSwgaWdub3JlfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRlbXBSZXR1cm4gIT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHRlbXBSZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvV2FsayA9IHdhbGthYmxlID09IG51bGwgPyBPYmplY3Qua2V5cyh0cmVlKSA6IHdhbGthYmxlO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0b1dhbGspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YodHJlZVtrZXldKSA9PSBcInVuZGVmaW5lZFwiIHx8IGlnbm9yZS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHRlbXBSZXR1cm4gPSB0aGlzLmZpbmRJblRyZWUodHJlZVtrZXldLCBzZWFyY2hGaWx0ZXIsIHt3YWxrYWJsZSwgaWdub3JlfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRlbXBSZXR1cm4gIT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHRlbXBSZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRlbXBSZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgbmVzdGVkIHByb3BlcnR5IChpZiBpdCBleGlzdHMpIHNhZmVseS4gUGF0aCBzaG91bGQgYmUgc29tZXRoaW5nIGxpa2UgYHByb3AucHJvcDIucHJvcDNgLlxyXG4gICAgICogTnVtYmVycyBjYW4gYmUgdXNlZCBmb3IgYXJyYXlzIGFzIHdlbGwgbGlrZSBgcHJvcC5wcm9wMi5hcnJheS4wLmlkYC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBvYmplY3QgdG8gZ2V0IG5lc3RlZCBwcm9wZXJ0eSBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvcGVydHkgdG8gb2J0YWluXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXROZXN0ZWRQcm9wKG9iaiwgcGF0aCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KC9cXHM/XFwuXFxzPy8pLnJlZHVjZShmdW5jdGlvbihjdXJyZW50T2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50T2JqICYmIGN1cnJlbnRPYmpbcHJvcF07XHJcbiAgICAgICAgfSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgdmFsdWUsIHN1Ym9iamVjdCwgb3IgYXJyYXkgZnJvbSBhIHRyZWUgdGhhdCBtYXRjaGVzIGEgc3BlY2lmaWMgZmlsdGVyLiBHcmVhdCBmb3IgcGF0Y2hpbmcgcmVuZGVyIGZ1bmN0aW9ucy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0cmVlIFJlYWN0IHRyZWUgdG8gbG9vayB0aHJvdWdoLiBDYW4gYmUgYSByZW5kZXJlZCBvYmplY3Qgb3IgYW4gaW50ZXJuYWwgaW5zdGFuY2UuXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBzZWFyY2hGaWx0ZXIgRmlsdGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHN1Ym9iamVjdHMgYWdhaW5zdC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRJblJlbmRlclRyZWUodHJlZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGUgPSBbXCJwcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2hpbGRcIiwgXCJzaWJsaW5nXCJdLCBpZ25vcmUgPSBbXX0gPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRJblRyZWUodHJlZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGUsIGlnbm9yZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSB2YWx1ZSwgc3Vib2JqZWN0LCBvciBhcnJheSBmcm9tIGEgdHJlZSB0aGF0IG1hdGNoZXMgYSBzcGVjaWZpYyBmaWx0ZXIuIEdyZWF0IGZvciBwYXRjaGluZyByZW5kZXIgZnVuY3Rpb25zLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHRyZWUgUmVhY3QgdHJlZSB0byBsb29rIHRocm91Z2guIENhbiBiZSBhIHJlbmRlcmVkIG9iamVjdCBvciBhbiBpbnRlcm5hbCBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IHNlYXJjaEZpbHRlciBGaWx0ZXIgZnVuY3Rpb24gdG8gY2hlY2sgc3Vib2JqZWN0cyBhZ2FpbnN0LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZEluUmVhY3RUcmVlKHRyZWUsIHNlYXJjaEZpbHRlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRJblRyZWUodHJlZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGU6IFtcInByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJyZXR1cm5cIiwgXCJzdGF0ZU5vZGVcIl19KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0UmVhY3RJbnN0YW5jZShub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUuX19yZWFjdEludGVybmFsSW5zdGFuY2UkKSByZXR1cm4gbm9kZS5fX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQ7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVbT2JqZWN0LmtleXMobm9kZSkuZmluZChrID0+IGsuc3RhcnRzV2l0aChcIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlXCIpKV0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuXHQgKiBHcmFicyBhIHZhbHVlIGZyb20gdGhlIHJlYWN0IGludGVybmFsIGluc3RhbmNlLiBBbGxvd3MgeW91IHRvIGdyYWJcclxuXHQgKiBsb25nIGRlcHRoIHZhbHVlcyBzYWZlbHkgd2l0aG91dCBhY2Nlc3Npbmcgbm8gbG9uZ2VyIHZhbGlkIHByb3BlcnRpZXMuXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gb2J0YWluIHJlYWN0IGluc3RhbmNlIG9mXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIGZvciB0aGUgc2VhcmNoXHJcblx0ICogQHBhcmFtIHthcnJheX0gW29wdGlvbnMuaW5jbHVkZV0gLSBsaXN0IG9mIGl0ZW1zIHRvIGluY2x1ZGUgZnJvbSB0aGUgc2VhcmNoXHJcblx0ICogQHBhcmFtIHthcnJheX0gW29wdGlvbnMuZXhjbHVkZT1bXCJQb3BvdXRcIiwgXCJUb29sdGlwXCIsIFwiU2Nyb2xsZXJcIiwgXCJCYWNrZ3JvdW5kRmxhc2hcIl1dIC0gbGlzdCBvZiBpdGVtcyB0byBleGNsdWRlIGZyb20gdGhlIHNlYXJjaFxyXG5cdCAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLmZpbHRlcj1fPT5fXSAtIGZpbHRlciB0byBjaGVjayB0aGUgY3VycmVudCBpbnN0YW5jZSB3aXRoIChzaG91bGQgcmV0dXJuIGEgYm9vbGVhbilcclxuXHQgKiBAcmV0dXJuIHsoKnxudWxsKX0gdGhlIG93bmVyIGluc3RhbmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXHJcblx0ICovXHJcblx0c3RhdGljIGdldE93bmVySW5zdGFuY2Uobm9kZSwge2luY2x1ZGUsIGV4Y2x1ZGUgPSBbXCJQb3BvdXRcIiwgXCJUb29sdGlwXCIsIFwiU2Nyb2xsZXJcIiwgXCJCYWNrZ3JvdW5kRmxhc2hcIl0sIGZpbHRlciA9IF8gPT4gX30gPSB7fSkge1xyXG5cdFx0aWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IGV4Y2x1ZGluZyA9IGluY2x1ZGUgPT09IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IG5hbWVGaWx0ZXIgPSBleGNsdWRpbmcgPyBleGNsdWRlIDogaW5jbHVkZTtcclxuXHRcdGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKG93bmVyKSB7XHJcblx0XHRcdGNvbnN0IHR5cGUgPSBvd25lci50eXBlO1xyXG5cdFx0XHRpZiAoIXR5cGUpIHJldHVybiBudWxsO1xyXG5cdFx0XHRyZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcclxuXHRcdH1cclxuXHRcdGZ1bmN0aW9uIGNsYXNzRmlsdGVyKG93bmVyKSB7XHJcblx0XHRcdGNvbnN0IG5hbWUgPSBnZXREaXNwbGF5TmFtZShvd25lcik7XHJcblx0XHRcdHJldHVybiAobmFtZSAhPT0gbnVsbCAmJiAhIShuYW1lRmlsdGVyLmluY2x1ZGVzKG5hbWUpIF4gZXhjbHVkaW5nKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGN1cnIgPSB0aGlzLmdldFJlYWN0SW5zdGFuY2Uobm9kZSk7XHJcblx0XHRmb3IgKGN1cnIgPSBjdXJyICYmIGN1cnIucmV0dXJuOyBjdXJyICE9PSBudWxsOyBjdXJyID0gY3Vyci5yZXR1cm4pIHtcclxuXHRcdFx0aWYgKGN1cnIgPT09IG51bGwpIGNvbnRpbnVlO1xyXG5cdFx0XHRjb25zdCBvd25lciA9IGN1cnIuc3RhdGVOb2RlO1xyXG5cdFx0XHRpZiAoY3VyciAhPT0gbnVsbCAmJiAhKG93bmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmIGNsYXNzRmlsdGVyKGN1cnIpICYmIGZpbHRlcihvd25lcikpIHJldHVybiBvd25lcjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/utilities.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Utilities; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n\n\n\nclass Utilities {\n static repoUrl(path) {\n return `https://cdn.staticaly.com/gh/${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].repo}/BetterDiscordApp/${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].hash}/${path}`;\n }\n /**\r\n * Parses a string of HTML and returns the results. If the second parameter is true,\r\n * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}.\r\n * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node.\r\n *\r\n * If the second parameter is false, then the return value will be the list of parsed\r\n * nodes and there were multiple top level nodes, otherwise the single node is returned.\r\n * @param {string} html - HTML to be parsed\r\n * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment`\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing\r\n */\n\n\n static parseHTML(html, fragment = false) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n const node = template.content.cloneNode(true);\n if (fragment) return node;\n return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0];\n }\n\n static getTextArea() {\n return _domtools__WEBPACK_IMPORTED_MODULE_2__[\"default\"].query(\".channelTextArea-1LDbYG 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 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 suppressErrors(method, message) {\n return (...params) => {\n try {\n return method(...params);\n } catch (e) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(\"SuppressedError\", \"Error occurred in \" + message, e);\n }\n };\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 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 /**\r\n * Generates an automatically memoizing version of an object.\r\n * @author Zerebos\r\n * @param {Object} object - object to memoize\r\n * @returns {Proxy} the proxy to the object that memoizes properties\r\n */\n\n\n static memoizeObject(object) {\n const proxy = new Proxy(object, {\n get: function (obj, mod) {\n if (!obj.hasOwnProperty(mod)) return undefined;\n\n if (Object.getOwnPropertyDescriptor(obj, mod).get) {\n const value = obj[mod];\n delete obj[mod];\n obj[mod] = value;\n }\n\n return obj[mod];\n },\n set: function (obj, mod, value) {\n if (obj.hasOwnProperty(mod)) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"MemoizedObject\", \"Trying to overwrite existing property\");\n obj[mod] = value;\n return obj[mod];\n }\n });\n Object.defineProperty(proxy, \"hasOwnProperty\", {\n value: function (prop) {\n return this[prop] !== undefined;\n }\n });\n return proxy;\n }\n /**\r\n * Deep extends an object with a set of other objects. Objects later in the list\r\n * of `extenders` have priority, that is to say if one sets a key to be a primitive,\r\n * it will be overwritten with the next one with the same key. If it is an object,\r\n * and the keys match, the object is extended. This happens recursively.\r\n * @param {object} extendee - Object to be extended\r\n * @param {...object} extenders - Objects to extend with\r\n * @returns {object} - A reference to `extendee`\r\n */\n\n\n static extend(extendee, ...extenders) {\n for (let i = 0; i < extenders.length; i++) {\n for (const key in extenders[i]) {\n if (extenders[i].hasOwnProperty(key)) {\n if (typeof extendee[key] === \"object\" && typeof extenders[i][key] === \"object\") this.extend(extendee[key], extenders[i][key]);else if (typeof extenders[i][key] === \"object\") extendee[key] = {}, this.extend(extendee[key], extenders[i][key]);else extendee[key] = extenders[i][key];\n }\n }\n }\n\n return extendee;\n }\n /**\r\n * Format strings with placeholders (`{{placeholder}}`) into full strings.\r\n * Quick example: `PluginUtilities.formatString(\"Hello, {{user}}\", {user: \"Zerebos\"})`\r\n * would return \"Hello, Zerebos\".\r\n * @param {string} string - string to format\r\n * @param {object} values - object literal of placeholders to replacements\r\n * @returns {string} the properly formatted string\r\n */\n\n\n static formatString(string, values) {\n for (const val in values) {\n let replacement = values[val];\n if (Array.isArray(replacement)) replacement = JSON.stringify(replacement);\n if (typeof replacement === \"object\" && replacement !== null) replacement = replacement.toString();\n string = string.replace(new RegExp(`{{${val}}}`, \"g\"), replacement);\n }\n\n return string;\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter.\r\n * @param {object} tree Tree that should be walked\r\n * @param {callable} searchFilter Filter to check against each object and subobject\r\n * @param {object} options Additional options to customize the search\r\n * @param {Array|null} [options.walkable=null] Array of strings to use as keys that are allowed to be walked on. Null value indicates all keys are walkable\r\n * @param {Array} [options.ignore=[]] Array of strings to use as keys to exclude from the search, most helpful when `walkable = null`.\r\n */\n\n\n static findInTree(tree, searchFilter, {\n walkable = null,\n ignore = []\n } = {}) {\n if (typeof searchFilter === \"string\") {\n if (tree.hasOwnProperty(searchFilter)) return tree[searchFilter];\n } else if (searchFilter(tree)) {\n return tree;\n }\n\n if (typeof tree !== \"object\" || tree == null) return undefined;\n let tempReturn = undefined;\n\n if (tree instanceof Array) {\n for (const value of tree) {\n tempReturn = this.findInTree(value, searchFilter, {\n walkable,\n ignore\n });\n if (typeof tempReturn != \"undefined\") return tempReturn;\n }\n } else {\n const toWalk = walkable == null ? Object.keys(tree) : walkable;\n\n for (const key of toWalk) {\n if (typeof tree[key] == \"undefined\" || ignore.includes(key)) continue;\n tempReturn = this.findInTree(tree[key], searchFilter, {\n walkable,\n ignore\n });\n if (typeof tempReturn != \"undefined\") return tempReturn;\n }\n }\n\n return tempReturn;\n }\n /**\r\n * Gets a nested property (if it exists) safely. Path should be something like `prop.prop2.prop3`.\r\n * Numbers can be used for arrays as well like `prop.prop2.array.0.id`.\r\n * @param {Object} obj - object to get nested property of\r\n * @param {string} path - representation of the property to obtain\r\n */\n\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function (currentObj, prop) {\n return currentObj && currentObj[prop];\n }, obj);\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter. Great for patching render functions.\r\n * @param {object} tree React tree to look through. Can be a rendered object or an internal instance.\r\n * @param {callable} searchFilter Filter function to check subobjects against.\r\n */\n\n\n static findInRenderTree(tree, searchFilter, {\n walkable = [\"props\", \"children\", \"child\", \"sibling\"],\n ignore = []\n } = {}) {\n return this.findInTree(tree, searchFilter, {\n walkable,\n ignore\n });\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter. Great for patching render functions.\r\n * @param {object} tree React tree to look through. Can be a rendered object or an internal instance.\r\n * @param {callable} searchFilter Filter function to check subobjects against.\r\n */\n\n\n static findInReactTree(tree, searchFilter) {\n return this.findInTree(tree, searchFilter, {\n walkable: [\"props\", \"children\", \"return\", \"stateNode\"]\n });\n }\n\n static getReactInstance(node) {\n if (node.__reactInternalInstance$) return node.__reactInternalInstance$;\n return node[Object.keys(node).find(k => k.startsWith(\"__reactInternalInstance\"))] || null;\n }\n /**\r\n * Grabs a value from the react internal instance. Allows you to grab\r\n * long depth values safely without accessing no longer valid properties.\r\n * @param {HTMLElement} node - node to obtain react instance of\r\n * @param {object} options - options for the search\r\n * @param {array} [options.include] - list of items to include from the search\r\n * @param {array} [options.exclude=[\"Popout\", \"Tooltip\", \"Scroller\", \"BackgroundFlash\"]] - list of items to exclude from the search\r\n * @param {callable} [options.filter=_=>_] - filter to check the current instance with (should return a boolean)\r\n * @return {(*|null)} the owner instance or undefined if not found.\r\n */\n\n\n static getOwnerInstance(node, {\n include,\n exclude = [\"Popout\", \"Tooltip\", \"Scroller\", \"BackgroundFlash\"],\n filter = _ => _\n } = {}) {\n if (node === undefined) return undefined;\n const excluding = include === undefined;\n const nameFilter = excluding ? exclude : include;\n\n function getDisplayName(owner) {\n const type = owner.type;\n if (!type) return null;\n return type.displayName || type.name || null;\n }\n\n function classFilter(owner) {\n const name = getDisplayName(owner);\n return name !== null && !!(nameFilter.includes(name) ^ excluding);\n }\n\n let curr = this.getReactInstance(node);\n\n for (curr = curr && curr.return; curr !== null; curr = curr.return) {\n if (curr === null) continue;\n const owner = curr.stateNode;\n if (curr !== null && !(owner instanceof HTMLElement) && classFilter(curr) && filter(owner)) return owner;\n }\n\n return null;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdXRpbGl0aWVzLmpzPzk3NjkiXSwibmFtZXMiOlsiVXRpbGl0aWVzIiwicmVwb1VybCIsInBhdGgiLCJDb25maWciLCJyZXBvIiwiaGFzaCIsInBhcnNlSFRNTCIsImh0bWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwibm9kZSIsImNvbnRlbnQiLCJjbG9uZU5vZGUiLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwiZ2V0VGV4dEFyZWEiLCJET00iLCJxdWVyeSIsImluc2VydFRleHQiLCJ0ZXh0YXJlYSIsInRleHQiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwidmFsdWUiLCJleGVjQ29tbWFuZCIsImVzY2FwZSIsInMiLCJyZXBsYWNlIiwidGVzdEpTT04iLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwiZXJyIiwic3VwcHJlc3NFcnJvcnMiLCJtZXRob2QiLCJtZXNzYWdlIiwicGFyYW1zIiwiZSIsIkxvZ2dlciIsInN0YWNrdHJhY2UiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm0iLCJtdXRhdGlvbiIsIm5vZGVzIiwiQXJyYXkiLCJmcm9tIiwicmVtb3ZlZE5vZGVzIiwiZGlyZWN0TWF0Y2giLCJpbmRleE9mIiwicGFyZW50TWF0Y2giLCJzb21lIiwicGFyZW50IiwiY29udGFpbnMiLCJkaXNjb25uZWN0Iiwib2JzZXJ2ZSIsImJvZHkiLCJzdWJ0cmVlIiwiY2hpbGRMaXN0IiwiaXNFbXB0eSIsIm9iaiIsInVuZGVmaW5lZCIsImlzQXJyYXkiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsIm1lbW9pemVPYmplY3QiLCJvYmplY3QiLCJwcm94eSIsIlByb3h5IiwiZ2V0IiwibW9kIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwic2V0IiwiZXJyb3IiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3AiLCJleHRlbmQiLCJleHRlbmRlZSIsImV4dGVuZGVycyIsImkiLCJmb3JtYXRTdHJpbmciLCJzdHJpbmciLCJ2YWx1ZXMiLCJ2YWwiLCJyZXBsYWNlbWVudCIsInN0cmluZ2lmeSIsInRvU3RyaW5nIiwiUmVnRXhwIiwiZmluZEluVHJlZSIsInRyZWUiLCJzZWFyY2hGaWx0ZXIiLCJ3YWxrYWJsZSIsImlnbm9yZSIsInRlbXBSZXR1cm4iLCJ0b1dhbGsiLCJrZXlzIiwiaW5jbHVkZXMiLCJnZXROZXN0ZWRQcm9wIiwic3BsaXQiLCJyZWR1Y2UiLCJjdXJyZW50T2JqIiwiZmluZEluUmVuZGVyVHJlZSIsImZpbmRJblJlYWN0VHJlZSIsImdldFJlYWN0SW5zdGFuY2UiLCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQiLCJmaW5kIiwiayIsInN0YXJ0c1dpdGgiLCJnZXRPd25lckluc3RhbmNlIiwiaW5jbHVkZSIsImV4Y2x1ZGUiLCJmaWx0ZXIiLCJfIiwiZXhjbHVkaW5nIiwibmFtZUZpbHRlciIsImdldERpc3BsYXlOYW1lIiwib3duZXIiLCJ0eXBlIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwiY2xhc3NGaWx0ZXIiLCJjdXJyIiwicmV0dXJuIiwic3RhdGVOb2RlIiwiSFRNTEVsZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFZSxNQUFNQSxTQUFOLENBQWdCO0FBRTNCLFNBQU9DLE9BQVAsQ0FBZUMsSUFBZixFQUFxQjtBQUNqQixXQUFRLGdDQUErQkMsMkNBQU0sQ0FBQ0MsSUFBSyxxQkFBb0JELDJDQUFNLENBQUNFLElBQUssSUFBR0gsSUFBSyxFQUEzRjtBQUNIO0FBRUQ7Ozs7Ozs7Ozs7Ozs7QUFXQSxTQUFPSSxTQUFQLENBQWlCQyxJQUFqQixFQUF1QkMsUUFBUSxHQUFHLEtBQWxDLEVBQXlDO0FBQ3JDLFVBQU1DLFFBQVEsR0FBR0MsUUFBUSxDQUFDQyxh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QUFvRTtBQUNuRSxVQUFJRCxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNuQixZQUFNTCxLQUFLLEdBQUdLLElBQUksQ0FBQ0UsU0FBbkI7QUFDQSxVQUFJRixJQUFJLEtBQUssSUFBVCxJQUFpQixFQUFFTCxLQUFLLFlBQVlRLFdBQW5CLENBQWpCLElBQW9ESixXQUFXLENBQUNDLElBQUQsQ0FBL0QsSUFBeUVWLE1BQU0sQ0FBQ0ssS0FBRCxDQUFuRixFQUE0RixPQUFPQSxLQUFQO0FBQzVGOztBQUVELFdBQU8sSUFBUDtBQUNBOztBQWpRNkIiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy91dGlsaXRpZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbGl0aWVzIHtcclxuXHJcbiAgICBzdGF0aWMgcmVwb1VybChwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIGBodHRwczovL2Nkbi5zdGF0aWNhbHkuY29tL2doLyR7Q29uZmlnLnJlcG99L0JldHRlckRpc2NvcmRBcHAvJHtDb25maWcuaGFzaH0vJHtwYXRofWA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgb2YgSFRNTCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cy4gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSxcclxuICAgICAqIHRoZSBwYXJzZWQgSFRNTCB3aWxsIGJlIHJldHVybmVkIGFzIGEgZG9jdW1lbnQgZnJhZ21lbnQge0BzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50RnJhZ21lbnR9LlxyXG4gICAgICogVGhpcyBpcyBleHRyZW1lbHkgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbGlzdCBvZiBlbGVtZW50cyBhdCB0aGUgdG9wIGxldmVsLCB0aGV5IGNhbiB0aGVuIGJlIGFwcGVuZGVkIGFsbCBhdCBvbmNlIHRvIGFub3RoZXIgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIGxpc3Qgb2YgcGFyc2VkXHJcbiAgICAgKiBub2RlcyBhbmQgdGhlcmUgd2VyZSBtdWx0aXBsZSB0b3AgbGV2ZWwgbm9kZXMsIG90aGVyd2lzZSB0aGUgc2luZ2xlIG5vZGUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIEhUTUwgdG8gYmUgcGFyc2VkXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcmFnbWVudD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0aGUgcmV0dXJuIHNob3VsZCBiZSB0aGUgcmF3IGBEb2N1bWVudEZyYWdtZW50YFxyXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBUaGUgcmVzdWx0IG9mIEhUTUwgcGFyc2luZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcclxuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICBpZiAoZnJhZ21lbnQpIHJldHVybiBub2RlO1xyXG4gICAgICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/IG5vZGUuY2hpbGROb2RlcyA6IG5vZGUuY2hpbGROb2Rlc1swXTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0VGV4dEFyZWEoKSB7XHJcbiAgICAgICAgcmV0dXJuIERPTS5xdWVyeShcIi5jaGFubmVsVGV4dEFyZWEtMUxEYllHIHRleHRhcmVhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpbnNlcnRUZXh0KHRleHRhcmVhLCB0ZXh0KSB7XHJcbiAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTtcclxuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XHJcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uRW5kID0gdGV4dGFyZWEudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLCBmYWxzZSwgdGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZShzKSB7XHJcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHRlc3RKU09OKGRhdGEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICB0cnkgeyByZXR1cm4gbWV0aG9kKC4uLnBhcmFtcyk7XHR9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7IExvZ2dlci5zdGFja3RyYWNlKFwiU3VwcHJlc3NlZEVycm9yXCIsIFwiRXJyb3Igb2NjdXJyZWQgaW4gXCIgKyBtZXNzYWdlLCBlKTsgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11dGF0aW9ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XHJcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsIHx8IG9iaiA9PSB1bmRlZmluZWQgfHwgb2JqID09IFwiXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhbiBhdXRvbWF0aWNhbGx5IG1lbW9pemluZyB2ZXJzaW9uIG9mIGFuIG9iamVjdC5cclxuICAgICAqIEBhdXRob3IgWmVyZWJvc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAtIG9iamVjdCB0byBtZW1vaXplXHJcbiAgICAgKiBAcmV0dXJucyB7UHJveHl9IHRoZSBwcm94eSB0byB0aGUgb2JqZWN0IHRoYXQgbWVtb2l6ZXMgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbWVtb2l6ZU9iamVjdChvYmplY3QpIHtcclxuICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShvYmplY3QsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgbW9kKS5nZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialttb2RdO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmpbbW9kXTtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbbW9kXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttb2RdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gTG9nZ2VyLmVycm9yKFwiTWVtb2l6ZWRPYmplY3RcIiwgXCJUcnlpbmcgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnR5XCIpO1xyXG4gICAgICAgICAgICAgICAgb2JqW21vZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbW9kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIFwiaGFzT3duUHJvcGVydHlcIiwge3ZhbHVlOiBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfX0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWVwIGV4dGVuZHMgYW4gb2JqZWN0IHdpdGggYSBzZXQgb2Ygb3RoZXIgb2JqZWN0cy4gT2JqZWN0cyBsYXRlciBpbiB0aGUgbGlzdFxyXG4gICAgICogb2YgYGV4dGVuZGVyc2AgaGF2ZSBwcmlvcml0eSwgdGhhdCBpcyB0byBzYXkgaWYgb25lIHNldHMgYSBrZXkgdG8gYmUgYSBwcmltaXRpdmUsXHJcbiAgICAgKiBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5leHQgb25lIHdpdGggdGhlIHNhbWUga2V5LiBJZiBpdCBpcyBhbiBvYmplY3QsXHJcbiAgICAgKiBhbmQgdGhlIGtleXMgbWF0Y2gsIHRoZSBvYmplY3QgaXMgZXh0ZW5kZWQuIFRoaXMgaGFwcGVucyByZWN1cnNpdmVseS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBleHRlbmRlZSAtIE9iamVjdCB0byBiZSBleHRlbmRlZFxyXG4gICAgICogQHBhcmFtIHsuLi5vYmplY3R9IGV4dGVuZGVycyAtIE9iamVjdHMgdG8gZXh0ZW5kIHdpdGhcclxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IC0gQSByZWZlcmVuY2UgdG8gYGV4dGVuZGVlYFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXh0ZW5kKGV4dGVuZGVlLCAuLi5leHRlbmRlcnMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dGVuZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBleHRlbmRlcnNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChleHRlbmRlcnNbaV0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0ZW5kZWVba2V5XSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZXh0ZW5kZXJzW2ldW2tleV0gPT09IFwib2JqZWN0XCIpIHRoaXMuZXh0ZW5kKGV4dGVuZGVlW2tleV0sIGV4dGVuZGVyc1tpXVtrZXldKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZXh0ZW5kZXJzW2ldW2tleV0gPT09IFwib2JqZWN0XCIpIGV4dGVuZGVlW2tleV0gPSB7fSwgdGhpcy5leHRlbmQoZXh0ZW5kZWVba2V5XSwgZXh0ZW5kZXJzW2ldW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgZXh0ZW5kZWVba2V5XSA9IGV4dGVuZGVyc1tpXVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBleHRlbmRlZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCBzdHJpbmdzIHdpdGggcGxhY2Vob2xkZXJzIChge3twbGFjZWhvbGRlcn19YCkgaW50byBmdWxsIHN0cmluZ3MuXHJcbiAgICAgKiBRdWljayBleGFtcGxlOiBgUGx1Z2luVXRpbGl0aWVzLmZvcm1hdFN0cmluZyhcIkhlbGxvLCB7e3VzZXJ9fVwiLCB7dXNlcjogXCJaZXJlYm9zXCJ9KWBcclxuICAgICAqIHdvdWxkIHJldHVybiBcIkhlbGxvLCBaZXJlYm9zXCIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gc3RyaW5nIHRvIGZvcm1hdFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyAtIG9iamVjdCBsaXRlcmFsIG9mIHBsYWNlaG9sZGVycyB0byByZXBsYWNlbWVudHNcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBwcm9wZXJseSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmb3JtYXRTdHJpbmcoc3RyaW5nLCB2YWx1ZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbCBpbiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdmFsdWVzW3ZhbF07XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2VtZW50KSkgcmVwbGFjZW1lbnQgPSBKU09OLnN0cmluZ2lmeShyZXBsYWNlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YocmVwbGFjZW1lbnQpID09PSBcIm9iamVjdFwiICYmIHJlcGxhY2VtZW50ICE9PSBudWxsKSByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHt2YWx9fX1gLCBcImdcIiksIHJlcGxhY2VtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgdmFsdWUsIHN1Ym9iamVjdCwgb3IgYXJyYXkgZnJvbSBhIHRyZWUgdGhhdCBtYXRjaGVzIGEgc3BlY2lmaWMgZmlsdGVyLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHRyZWUgVHJlZSB0aGF0IHNob3VsZCBiZSB3YWxrZWRcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IHNlYXJjaEZpbHRlciBGaWx0ZXIgdG8gY2hlY2sgYWdhaW5zdCBlYWNoIG9iamVjdCBhbmQgc3Vib2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBzZWFyY2hcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPnxudWxsfSBbb3B0aW9ucy53YWxrYWJsZT1udWxsXSBBcnJheSBvZiBzdHJpbmdzIHRvIHVzZSBhcyBrZXlzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgd2Fsa2VkIG9uLiBOdWxsIHZhbHVlIGluZGljYXRlcyBhbGwga2V5cyBhcmUgd2Fsa2FibGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW29wdGlvbnMuaWdub3JlPVtdXSBBcnJheSBvZiBzdHJpbmdzIHRvIHVzZSBhcyBrZXlzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgc2VhcmNoLCBtb3N0IGhlbHBmdWwgd2hlbiBgd2Fsa2FibGUgPSBudWxsYC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRJblRyZWUodHJlZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGUgPSBudWxsLCBpZ25vcmUgPSBbXX0gPSB7fSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoRmlsdGVyID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmVlLmhhc093blByb3BlcnR5KHNlYXJjaEZpbHRlcikpIHJldHVybiB0cmVlW3NlYXJjaEZpbHRlcl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaEZpbHRlcih0cmVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdHJlZSAhPT0gXCJvYmplY3RcIiB8fCB0cmVlID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGxldCB0ZW1wUmV0dXJuID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0cmVlIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0cmVlKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wUmV0dXJuID0gdGhpcy5maW5kSW5UcmVlKHZhbHVlLCBzZWFyY2hGaWx0ZXIsIHt3YWxrYWJsZSwgaWdub3JlfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRlbXBSZXR1cm4gIT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHRlbXBSZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvV2FsayA9IHdhbGthYmxlID09IG51bGwgPyBPYmplY3Qua2V5cyh0cmVlKSA6IHdhbGthYmxlO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0b1dhbGspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YodHJlZVtrZXldKSA9PSBcInVuZGVmaW5lZFwiIHx8IGlnbm9yZS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHRlbXBSZXR1cm4gPSB0aGlzLmZpbmRJblRyZWUodHJlZVtrZXldLCBzZWFyY2hGaWx0ZXIsIHt3YWxrYWJsZSwgaWdub3JlfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRlbXBSZXR1cm4gIT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHRlbXBSZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRlbXBSZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgbmVzdGVkIHByb3BlcnR5IChpZiBpdCBleGlzdHMpIHNhZmVseS4gUGF0aCBzaG91bGQgYmUgc29tZXRoaW5nIGxpa2UgYHByb3AucHJvcDIucHJvcDNgLlxyXG4gICAgICogTnVtYmVycyBjYW4gYmUgdXNlZCBmb3IgYXJyYXlzIGFzIHdlbGwgbGlrZSBgcHJvcC5wcm9wMi5hcnJheS4wLmlkYC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBvYmplY3QgdG8gZ2V0IG5lc3RlZCBwcm9wZXJ0eSBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvcGVydHkgdG8gb2J0YWluXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXROZXN0ZWRQcm9wKG9iaiwgcGF0aCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KC9cXHM/XFwuXFxzPy8pLnJlZHVjZShmdW5jdGlvbihjdXJyZW50T2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50T2JqICYmIGN1cnJlbnRPYmpbcHJvcF07XHJcbiAgICAgICAgfSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgdmFsdWUsIHN1Ym9iamVjdCwgb3IgYXJyYXkgZnJvbSBhIHRyZWUgdGhhdCBtYXRjaGVzIGEgc3BlY2lmaWMgZmlsdGVyLiBHcmVhdCBmb3IgcGF0Y2hpbmcgcmVuZGVyIGZ1bmN0aW9ucy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0cmVlIFJlYWN0IHRyZWUgdG8gbG9vayB0aHJvdWdoLiBDYW4gYmUgYSByZW5kZXJlZCBvYmplY3Qgb3IgYW4gaW50ZXJuYWwgaW5zdGFuY2UuXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBzZWFyY2hGaWx0ZXIgRmlsdGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHN1Ym9iamVjdHMgYWdhaW5zdC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRJblJlbmRlclRyZWUodHJlZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGUgPSBbXCJwcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2hpbGRcIiwgXCJzaWJsaW5nXCJdLCBpZ25vcmUgPSBbXX0gPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRJblRyZWUodHJlZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGUsIGlnbm9yZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSB2YWx1ZSwgc3Vib2JqZWN0LCBvciBhcnJheSBmcm9tIGEgdHJlZSB0aGF0IG1hdGNoZXMgYSBzcGVjaWZpYyBmaWx0ZXIuIEdyZWF0IGZvciBwYXRjaGluZyByZW5kZXIgZnVuY3Rpb25zLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHRyZWUgUmVhY3QgdHJlZSB0byBsb29rIHRocm91Z2guIENhbiBiZSBhIHJlbmRlcmVkIG9iamVjdCBvciBhbiBpbnRlcm5hbCBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IHNlYXJjaEZpbHRlciBGaWx0ZXIgZnVuY3Rpb24gdG8gY2hlY2sgc3Vib2JqZWN0cyBhZ2FpbnN0LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZEluUmVhY3RUcmVlKHRyZWUsIHNlYXJjaEZpbHRlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRJblRyZWUodHJlZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGU6IFtcInByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJyZXR1cm5cIiwgXCJzdGF0ZU5vZGVcIl19KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0UmVhY3RJbnN0YW5jZShub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUuX19yZWFjdEludGVybmFsSW5zdGFuY2UkKSByZXR1cm4gbm9kZS5fX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQ7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVbT2JqZWN0LmtleXMobm9kZSkuZmluZChrID0+IGsuc3RhcnRzV2l0aChcIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlXCIpKV0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuXHQgKiBHcmFicyBhIHZhbHVlIGZyb20gdGhlIHJlYWN0IGludGVybmFsIGluc3RhbmNlLiBBbGxvd3MgeW91IHRvIGdyYWJcclxuXHQgKiBsb25nIGRlcHRoIHZhbHVlcyBzYWZlbHkgd2l0aG91dCBhY2Nlc3Npbmcgbm8gbG9uZ2VyIHZhbGlkIHByb3BlcnRpZXMuXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gb2J0YWluIHJlYWN0IGluc3RhbmNlIG9mXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIGZvciB0aGUgc2VhcmNoXHJcblx0ICogQHBhcmFtIHthcnJheX0gW29wdGlvbnMuaW5jbHVkZV0gLSBsaXN0IG9mIGl0ZW1zIHRvIGluY2x1ZGUgZnJvbSB0aGUgc2VhcmNoXHJcblx0ICogQHBhcmFtIHthcnJheX0gW29wdGlvbnMuZXhjbHVkZT1bXCJQb3BvdXRcIiwgXCJUb29sdGlwXCIsIFwiU2Nyb2xsZXJcIiwgXCJCYWNrZ3JvdW5kRmxhc2hcIl1dIC0gbGlzdCBvZiBpdGVtcyB0byBleGNsdWRlIGZyb20gdGhlIHNlYXJjaFxyXG5cdCAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLmZpbHRlcj1fPT5fXSAtIGZpbHRlciB0byBjaGVjayB0aGUgY3VycmVudCBpbnN0YW5jZSB3aXRoIChzaG91bGQgcmV0dXJuIGEgYm9vbGVhbilcclxuXHQgKiBAcmV0dXJuIHsoKnxudWxsKX0gdGhlIG93bmVyIGluc3RhbmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXHJcblx0ICovXHJcblx0c3RhdGljIGdldE93bmVySW5zdGFuY2Uobm9kZSwge2luY2x1ZGUsIGV4Y2x1ZGUgPSBbXCJQb3BvdXRcIiwgXCJUb29sdGlwXCIsIFwiU2Nyb2xsZXJcIiwgXCJCYWNrZ3JvdW5kRmxhc2hcIl0sIGZpbHRlciA9IF8gPT4gX30gPSB7fSkge1xyXG5cdFx0aWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IGV4Y2x1ZGluZyA9IGluY2x1ZGUgPT09IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IG5hbWVGaWx0ZXIgPSBleGNsdWRpbmcgPyBleGNsdWRlIDogaW5jbHVkZTtcclxuXHRcdGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKG93bmVyKSB7XHJcblx0XHRcdGNvbnN0IHR5cGUgPSBvd25lci50eXBlO1xyXG5cdFx0XHRpZiAoIXR5cGUpIHJldHVybiBudWxsO1xyXG5cdFx0XHRyZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcclxuXHRcdH1cclxuXHRcdGZ1bmN0aW9uIGNsYXNzRmlsdGVyKG93bmVyKSB7XHJcblx0XHRcdGNvbnN0IG5hbWUgPSBnZXREaXNwbGF5TmFtZShvd25lcik7XHJcblx0XHRcdHJldHVybiAobmFtZSAhPT0gbnVsbCAmJiAhIShuYW1lRmlsdGVyLmluY2x1ZGVzKG5hbWUpIF4gZXhjbHVkaW5nKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGN1cnIgPSB0aGlzLmdldFJlYWN0SW5zdGFuY2Uobm9kZSk7XHJcblx0XHRmb3IgKGN1cnIgPSBjdXJyICYmIGN1cnIucmV0dXJuOyBjdXJyICE9PSBudWxsOyBjdXJyID0gY3Vyci5yZXR1cm4pIHtcclxuXHRcdFx0aWYgKGN1cnIgPT09IG51bGwpIGNvbnRpbnVlO1xyXG5cdFx0XHRjb25zdCBvd25lciA9IGN1cnIuc3RhdGVOb2RlO1xyXG5cdFx0XHRpZiAoY3VyciAhPT0gbnVsbCAmJiAhKG93bmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmIGNsYXNzRmlsdGVyKGN1cnIpICYmIGZpbHRlcihvd25lcikpIHJldHVybiBvd25lcjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/utilities.js\n"); /***/ }), @@ -647,7 +635,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 BuiltinModule; });\n/* harmony import */ var _modules_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _modules_patcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modules/patcher */ \"./src/modules/patcher.js\");\n\n\n\n\nclass BuiltinModule {\n get name() {\n return \"Unnamed Builtin\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"None\";\n }\n\n async initialize() {\n if (_modules_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(this.collection, this.category, this.id)) await this.enable();\n _modules_emitter__WEBPACK_IMPORTED_MODULE_1__[\"default\"].on(\"setting-updated\", (collection, category, id, enabled) => {\n if (collection != this.collection || category !== this.category || id !== this.id) return;\n if (enabled) this.enable();else this.disable();\n });\n }\n\n registerSetting(collection, category, id, onEnable, onDisable) {\n if (arguments.length == 4) {\n collection = this.collection;\n category = arguments[0];\n id = arguments[1];\n onEnable = arguments[2];\n onDisable = arguments[3];\n } else if (arguments.length == 3) {\n collection = this.collection;\n category = this.category;\n id = arguments[0];\n onEnable = arguments[1];\n onDisable = arguments[2];\n }\n\n return _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].on(collection, category, id, value => {\n if (value) onEnable();else onDisable();\n });\n }\n\n get(collection, category, id) {\n if (arguments.length == 2) {\n collection = this.collection;\n category = arguments[0];\n id = arguments[1];\n } else if (arguments.length == 1) {\n collection = this.collection;\n category = this.category;\n id = arguments[0];\n }\n\n return _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(collection, category, id);\n }\n\n async enable() {\n this.log(\"Enabled\");\n await this.enabled();\n }\n\n async disable() {\n this.log(\"Disabled\");\n await this.disabled();\n }\n\n async enabled() {}\n\n async disabled() {}\n\n log(...message) {\n _modules_logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].log(this.name, ...message);\n }\n\n warn(...message) {\n _modules_logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warn(this.name, ...message);\n }\n\n error(...message) {\n _modules_logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(this.name, ...message);\n }\n\n stacktrace(message, error) {\n _modules_logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stacktrace(this.name, message, error);\n }\n\n after(object, func, callback) {\n return _modules_patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(this.name, object, func, callback);\n }\n\n unpatchAll() {\n return _modules_patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].unpatchAll(this.name);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3N0cnVjdHMvYnVpbHRpbi5qcz85NTYyIl0sIm5hbWVzIjpbIkJ1aWx0aW5Nb2R1bGUiLCJuYW1lIiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJpbml0aWFsaXplIiwiU2V0dGluZ3MiLCJnZXQiLCJlbmFibGUiLCJFdmVudHMiLCJvbiIsImVuYWJsZWQiLCJkaXNhYmxlIiwicmVnaXN0ZXJTZXR0aW5nIiwib25FbmFibGUiLCJvbkRpc2FibGUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ2YWx1ZSIsImxvZyIsImRpc2FibGVkIiwibWVzc2FnZSIsIkxvZ2dlciIsIndhcm4iLCJlcnJvciIsImVyciIsInN0YWNrdHJhY2UiLCJhZnRlciIsIm9iamVjdCIsImZ1bmMiLCJjYWxsYmFjayIsIlBhdGNoZXIiLCJ1bnBhdGNoQWxsIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLGFBQU4sQ0FBb0I7QUFFL0IsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxpQkFBUDtBQUEwQjs7QUFDdEMsTUFBSUMsVUFBSixHQUFpQjtBQUFDLFdBQU8sVUFBUDtBQUFtQjs7QUFDckMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLE1BQVA7QUFBZTs7QUFFekIsUUFBTUMsVUFBTixHQUFtQjtBQUNmLFFBQUlDLGdFQUFRLENBQUNDLEdBQVQsQ0FBYSxLQUFLTCxVQUFsQixFQUE4QixLQUFLQyxRQUFuQyxFQUE2QyxLQUFLQyxFQUFsRCxDQUFKLEVBQTJELE1BQU0sS0FBS0ksTUFBTCxFQUFOO0FBQzNEQyw0REFBTSxDQUFDQyxFQUFQLENBQVUsaUJBQVYsRUFBNkIsQ0FBQ1IsVUFBRCxFQUFhQyxRQUFiLEVBQXVCQyxFQUF2QixFQUEyQk8sT0FBM0IsS0FBdUM7QUFD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RURLLFlBQVUsQ0FBQ0wsT0FBRCxFQUFVRyxLQUFWLEVBQWlCO0FBQ3ZCRiwyREFBTSxDQUFDSSxVQUFQLENBQWtCLEtBQUt6QixJQUF2QixFQUE2Qm9CLE9BQTdCLEVBQXNDRyxLQUF0QztBQUNIOztBQUVERyxPQUFLLENBQUNDLE1BQUQsRUFBU0MsSUFBVCxFQUFlQyxRQUFmLEVBQXlCO0FBQzFCLFdBQU9DLHdEQUFPLENBQUNKLEtBQVIsQ0FBYyxLQUFLMUIsSUFBbkIsRUFBeUIyQixNQUF6QixFQUFpQ0MsSUFBakMsRUFBdUNDLFFBQXZDLENBQVA7QUFDSDs7QUFFREUsWUFBVSxHQUFHO0FBQ1QsV0FBT0Qsd0RBQU8sQ0FBQ0MsVUFBUixDQUFtQixLQUFLL0IsSUFBeEIsQ0FBUDtBQUNIOztBQXRGOEIiLCJmaWxlIjoiLi9zcmMvc3RydWN0cy9idWlsdGluLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vbW9kdWxlcy9sb2dnZXJcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi4vbW9kdWxlcy9lbWl0dGVyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IFBhdGNoZXIgZnJvbSBcIi4uL21vZHVsZXMvcGF0Y2hlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbHRpbk1vZHVsZSB7XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiVW5uYW1lZCBCdWlsdGluXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJOb25lXCI7fVxyXG5cclxuICAgIGFzeW5jIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgaWYgKFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQpKSBhd2FpdCB0aGlzLmVuYWJsZSgpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcInNldHRpbmctdXBkYXRlZFwiLCAoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCBlbmFibGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uICE9IHRoaXMuY29sbGVjdGlvbiB8fCBjYXRlZ29yeSAhPT0gdGhpcy5jYXRlZ29yeSB8fCBpZCAhPT0gdGhpcy5pZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgdGhpcy5lbmFibGUoKTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLmRpc2FibGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlclNldHRpbmcoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCBvbkVuYWJsZSwgb25EaXNhYmxlKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gNCkge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWQgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgICAgIG9uRW5hYmxlID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgICAgICBvbkRpc2FibGUgPSBhcmd1bWVudHNbM107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcnk7XHJcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBvbkVuYWJsZSA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICAgICAgb25EaXNhYmxlID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU2V0dGluZ3Mub24oY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSBvbkVuYWJsZSgpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRGlzYWJsZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgIGNhdGVnb3J5ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgIGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeTtcclxuICAgICAgICAgICAgaWQgPSBhcmd1bWVudHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTZXR0aW5ncy5nZXQoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbmFibGUoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJFbmFibGVkXCIpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZW5hYmxlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc2FibGUoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJEaXNhYmxlZFwiKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmRpc2FibGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHt9XHJcbiAgICBhc3luYyBkaXNhYmxlZCgpIHt9XHJcblxyXG4gICAgbG9nKC4uLm1lc3NhZ2UpIHtcclxuICAgICAgICBMb2dnZXIubG9nKHRoaXMubmFtZSwgLi4ubWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2FybiguLi5tZXNzYWdlKSB7XHJcbiAgICAgICAgTG9nZ2VyLndhcm4odGhpcy5uYW1lLCAuLi5tZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBlcnJvciguLi5tZXNzYWdlKSB7XHJcbiAgICAgICAgTG9nZ2VyLmVycih0aGlzLm5hbWUsIC4uLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YWNrdHJhY2UobWVzc2FnZSwgZXJyb3IpIHtcclxuICAgICAgICBMb2dnZXIuc3RhY2t0cmFjZSh0aGlzLm5hbWUsIG1lc3NhZ2UsIGVycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICBhZnRlcihvYmplY3QsIGZ1bmMsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIFBhdGNoZXIuYWZ0ZXIodGhpcy5uYW1lLCBvYmplY3QsIGZ1bmMsIGNhbGxiYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQWxsKCkge1xyXG4gICAgICAgIHJldHVybiBQYXRjaGVyLnVucGF0Y2hBbGwodGhpcy5uYW1lKTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/structs/builtin.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BuiltinModule; });\n/* harmony import */ var _modules_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _modules_patcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modules/patcher */ \"./src/modules/patcher.js\");\n\n\n\n\nclass BuiltinModule {\n get name() {\n return \"Unnamed Builtin\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"None\";\n }\n\n async initialize() {\n if (_modules_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(this.collection, this.category, this.id)) await this.enable();\n _modules_emitter__WEBPACK_IMPORTED_MODULE_1__[\"default\"].on(\"setting-updated\", (collection, category, id, enabled) => {\n if (collection != this.collection || category !== this.category || id !== this.id) return;\n if (enabled) this.enable();else this.disable();\n });\n this.initialized = true;\n }\n\n registerSetting(collection, category, id, onEnable, onDisable) {\n if (arguments.length == 4) {\n collection = this.collection;\n category = arguments[0];\n id = arguments[1];\n onEnable = arguments[2];\n onDisable = arguments[3];\n } else if (arguments.length == 3) {\n collection = this.collection;\n category = this.category;\n id = arguments[0];\n onEnable = arguments[1];\n onDisable = arguments[2];\n }\n\n return _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].on(collection, category, id, value => {\n if (value) onEnable();else onDisable();\n });\n }\n\n get(collection, category, id) {\n if (arguments.length == 2) {\n collection = this.collection;\n category = arguments[0];\n id = arguments[1];\n } else if (arguments.length == 1) {\n collection = this.collection;\n category = this.category;\n id = arguments[0];\n }\n\n return _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(collection, category, id);\n }\n\n async enable() {\n this.log(\"Enabled\");\n await this.enabled();\n }\n\n async disable() {\n this.log(\"Disabled\");\n await this.disabled();\n }\n\n async enabled() {}\n\n async disabled() {}\n\n log(...message) {\n _modules_logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].log(this.name, ...message);\n }\n\n warn(...message) {\n _modules_logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warn(this.name, ...message);\n }\n\n error(...message) {\n _modules_logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(this.name, ...message);\n }\n\n stacktrace(message, error) {\n _modules_logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stacktrace(this.name, message, error);\n }\n\n after(object, func, callback) {\n return _modules_patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(this.name, object, func, callback);\n }\n\n unpatchAll() {\n return _modules_patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].unpatchAll(this.name);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3N0cnVjdHMvYnVpbHRpbi5qcz85NTYyIl0sIm5hbWVzIjpbIkJ1aWx0aW5Nb2R1bGUiLCJuYW1lIiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJpbml0aWFsaXplIiwiU2V0dGluZ3MiLCJnZXQiLCJlbmFibGUiLCJFdmVudHMiLCJvbiIsImVuYWJsZWQiLCJkaXNhYmxlIiwiaW5pdGlhbGl6ZWQiLCJyZWdpc3RlclNldHRpbmciLCJvbkVuYWJsZSIsIm9uRGlzYWJsZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInZhbHVlIiwibG9nIiwiZGlzYWJsZWQiLCJtZXNzYWdlIiwiTG9nZ2VyIiwid2FybiIsImVycm9yIiwiZXJyIiwic3RhY2t0cmFjZSIsImFmdGVyIiwib2JqZWN0IiwiZnVuYyIsImNhbGxiYWNrIiwiUGF0Y2hlciIsInVucGF0Y2hBbGwiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsTUFBTUEsYUFBTixDQUFvQjtBQUUvQixNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGlCQUFQO0FBQTBCOztBQUN0QyxNQUFJQyxVQUFKLEdBQWlCO0FBQUMsV0FBTyxVQUFQO0FBQW1COztBQUNyQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFNBQVA7QUFBa0I7O0FBQ2xDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sTUFBUDtBQUFlOztBQUV6QixRQUFNQyxVQUFOLEdBQW1CO0FBQ2YsUUFBSUMsZ0VBQVEsQ0FBQ0MsR0FBVCxDQUFhLEtBQUtMLFVBQWxCLEVBQThCLEtBQUtDLFFBQW5DLEVBQTZDLEtBQUtDLEVBQWxELENBQUosRUFBMkQsTUFBTSxLQUFLSSxNQUFMLEVBQU47QUFDM0RDLDREQUFNLENBQUNDLEVBQVAsQ0FBVSxpQkFBVixFQUE2QixDQUFDUixVQUFELEVBQWFDLFFBQWIsRUFBdUJDLEVBQXZCLEVBQTJCTyxP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LENBQVcsS0FBS3pCLElBQWhCLEVBQXNCLEdBQUdxQixPQUF6QjtBQUNIOztBQUVESyxZQUFVLENBQUNMLE9BQUQsRUFBVUcsS0FBVixFQUFpQjtBQUN2QkYsMkRBQU0sQ0FBQ0ksVUFBUCxDQUFrQixLQUFLMUIsSUFBdkIsRUFBNkJxQixPQUE3QixFQUFzQ0csS0FBdEM7QUFDSDs7QUFFREcsT0FBSyxDQUFDQyxNQUFELEVBQVNDLElBQVQsRUFBZUMsUUFBZixFQUF5QjtBQUMxQixXQUFPQyx3REFBTyxDQUFDSixLQUFSLENBQWMsS0FBSzNCLElBQW5CLEVBQXlCNEIsTUFBekIsRUFBaUNDLElBQWpDLEVBQXVDQyxRQUF2QyxDQUFQO0FBQ0g7O0FBRURFLFlBQVUsR0FBRztBQUNULFdBQU9ELHdEQUFPLENBQUNDLFVBQVIsQ0FBbUIsS0FBS2hDLElBQXhCLENBQVA7QUFDSDs7QUF2RjhCIiwiZmlsZSI6Ii4vc3JjL3N0cnVjdHMvYnVpbHRpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2dnZXIgZnJvbSBcIi4uL21vZHVsZXMvbG9nZ2VyXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4uL21vZHVsZXMvZW1pdHRlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBQYXRjaGVyIGZyb20gXCIuLi9tb2R1bGVzL3BhdGNoZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWx0aW5Nb2R1bGUge1xyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlVubmFtZWQgQnVpbHRpblwiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcInNldHRpbmdzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiTm9uZVwiO31cclxuXHJcbiAgICBhc3luYyBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIGlmIChTZXR0aW5ncy5nZXQodGhpcy5jb2xsZWN0aW9uLCB0aGlzLmNhdGVnb3J5LCB0aGlzLmlkKSkgYXdhaXQgdGhpcy5lbmFibGUoKTtcclxuICAgICAgICBFdmVudHMub24oXCJzZXR0aW5nLXVwZGF0ZWRcIiwgKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCwgZW5hYmxlZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sbGVjdGlvbiAhPSB0aGlzLmNvbGxlY3Rpb24gfHwgY2F0ZWdvcnkgIT09IHRoaXMuY2F0ZWdvcnkgfHwgaWQgIT09IHRoaXMuaWQpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHRoaXMuZW5hYmxlKCk7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy5kaXNhYmxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJTZXR0aW5nKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCwgb25FbmFibGUsIG9uRGlzYWJsZSkge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDQpIHtcclxuICAgICAgICAgICAgY29sbGVjdGlvbiA9IHRoaXMuY29sbGVjdGlvbjtcclxuICAgICAgICAgICAgY2F0ZWdvcnkgPSBhcmd1bWVudHNbMF07XHJcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzFdO1xyXG4gICAgICAgICAgICBvbkVuYWJsZSA9IGFyZ3VtZW50c1syXTtcclxuICAgICAgICAgICAgb25EaXNhYmxlID0gYXJndW1lbnRzWzNdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgICAgY29sbGVjdGlvbiA9IHRoaXMuY29sbGVjdGlvbjtcclxuICAgICAgICAgICAgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3J5O1xyXG4gICAgICAgICAgICBpZCA9IGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgb25FbmFibGUgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgICAgIG9uRGlzYWJsZSA9IGFyZ3VtZW50c1syXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFNldHRpbmdzLm9uKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCwgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgb25FbmFibGUoKTtcclxuICAgICAgICAgICAgZWxzZSBvbkRpc2FibGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWQgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcnk7XHJcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU2V0dGluZ3MuZ2V0KGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlKCkge1xyXG4gICAgICAgIHRoaXMubG9nKFwiRW5hYmxlZFwiKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmVuYWJsZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNhYmxlKCkge1xyXG4gICAgICAgIHRoaXMubG9nKFwiRGlzYWJsZWRcIik7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5kaXNhYmxlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7fVxyXG4gICAgYXN5bmMgZGlzYWJsZWQoKSB7fVxyXG5cclxuICAgIGxvZyguLi5tZXNzYWdlKSB7XHJcbiAgICAgICAgTG9nZ2VyLmxvZyh0aGlzLm5hbWUsIC4uLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHdhcm4oLi4ubWVzc2FnZSkge1xyXG4gICAgICAgIExvZ2dlci53YXJuKHRoaXMubmFtZSwgLi4ubWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXJyb3IoLi4ubWVzc2FnZSkge1xyXG4gICAgICAgIExvZ2dlci5lcnIodGhpcy5uYW1lLCAuLi5tZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFja3RyYWNlKG1lc3NhZ2UsIGVycm9yKSB7XHJcbiAgICAgICAgTG9nZ2VyLnN0YWNrdHJhY2UodGhpcy5uYW1lLCBtZXNzYWdlLCBlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXIob2JqZWN0LCBmdW5jLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiBQYXRjaGVyLmFmdGVyKHRoaXMubmFtZSwgb2JqZWN0LCBmdW5jLCBjYWxsYmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaEFsbCgpIHtcclxuICAgICAgICByZXR1cm4gUGF0Y2hlci51bnBhdGNoQWxsKHRoaXMubmFtZSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/structs/builtin.js\n"); /***/ }), @@ -671,7 +659,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 PublicServersConnection; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nconst SortedGuildStore = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"getSortedGuilds\");\nconst AvatarDefaults = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");\nconst InviteActions = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"acceptInvite\");\n\nconst BrowserWindow = __webpack_require__(/*! electron */ \"electron\").remote.BrowserWindow;\n\nclass PublicServersConnection {\n static get endPoint() {\n return \"https://search.discordservers.com\";\n }\n\n static get joinEndPoint() {\n return \"https://j.discordservers.com\";\n }\n\n static get connectEndPoint() {\n return \"https://auth.discordservers.com/info\";\n }\n\n static getDefaultAvatar() {\n return AvatarDefaults.DEFAULT_AVATARS[Math.floor(Math.random() * 5)];\n }\n\n static hasJoined(id) {\n return SortedGuildStore.getFlattenedGuildIds().includes(id);\n }\n\n static search({\n term = \"\",\n category = \"\",\n from = 0\n } = {}) {\n return new Promise(resolve => {\n const queries = [];\n if (category) queries.push(`category=${category.replace(/ /g, \"%20\")}`);\n if (term) queries.push(`term=${term.replace(/ /g, \"%20\")}`);\n if (from) queries.push(`from=${from}`);\n const query = `?${queries.join(\"&\")}`;\n $.ajax({\n method: \"GET\",\n url: `${this.endPoint}${query}`,\n success: data => {\n const next = data.size + data.from;\n resolve({\n servers: data.results,\n size: data.size,\n from: data.from,\n total: data.total,\n next: next >= data.total ? null : next\n });\n },\n error: () => resolve(null)\n });\n });\n }\n\n static join(id, native = false) {\n return new Promise(resolve => {\n if (native) return InviteActions.acceptInvite(id), resolve(true);\n $.ajax({\n method: \"GET\",\n url: `${this.joinEndPoint}/${id}`,\n headers: {\n \"Accept\": \"application/json;\",\n \"Content-Type\": \"application/json;\",\n \"x-discord-token\": this._accessToken\n },\n crossDomain: true,\n xhrFields: {\n withCredentials: true\n },\n success: () => resolve(true),\n error: () => resolve(false)\n });\n });\n }\n\n static checkConnection() {\n return new Promise(resolve => {\n try {\n $.ajax({\n method: \"GET\",\n url: this.connectEndPoint,\n headers: {\n \"Accept\": \"application/json;\",\n \"Content-Type\": \"application/json;\"\n },\n crossDomain: true,\n xhrFields: {\n withCredentials: true\n },\n success: data => {\n this._accessToken = data.access_token;\n resolve(data);\n },\n error: () => resolve(false)\n });\n } catch (error) {\n resolve(false);\n }\n });\n }\n\n static connect() {\n return new Promise(resolve => {\n const joinWindow = new BrowserWindow(this.windowOptions);\n const url = `https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=${this.connectEndPoint}`;\n joinWindow.webContents.on(\"did-navigate\", (event, navUrl) => {\n if (navUrl != this.connectEndPoint) return;\n joinWindow.close();\n resolve();\n });\n joinWindow.loadURL(url);\n });\n }\n\n static get windowOptions() {\n return {\n width: 380,\n height: 450,\n backgroundColor: \"#282b30\",\n show: true,\n resizable: true,\n maximizable: false,\n minimizable: false,\n alwaysOnTop: true,\n frame: false,\n center: true,\n webPreferences: {\n nodeIntegration: false\n }\n };\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3N0cnVjdHMvcHNjb25uZWN0aW9uLmpzP2VmZjYiXSwibmFtZXMiOlsiU29ydGVkR3VpbGRTdG9yZSIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsIkF2YXRhckRlZmF1bHRzIiwiSW52aXRlQWN0aW9ucyIsIkJyb3dzZXJXaW5kb3ciLCJyZXF1aXJlIiwicmVtb3RlIiwiUHVibGljU2VydmVyc0Nvbm5lY3Rpb24iLCJlbmRQb2ludCIsImpvaW5FbmRQb2ludCIsImNvbm5lY3RFbmRQb2ludCIsImdldERlZmF1bHRBdmF0YXIiLCJERUZBVUxUX0FWQVRBUlMiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJoYXNKb2luZWQiLCJpZCIsImdldEZsYXR0ZW5lZEd1aWxkSWRzIiwiaW5jbHVkZXMiLCJzZWFyY2giLCJ0ZXJtIiwiY2F0ZWdvcnkiLCJmcm9tIiwiUHJvbWlzZSIsInJlc29sdmUiLCJxdWVyaWVzIiwicHVzaCIsInJlcGxhY2UiLCJxdWVyeSIsImpvaW4iLCIkIiwiYWpheCIsIm1ldGhvZCIsInVybCIsInN1Y2Nlc3MiLCJkYXRhIiwibmV4dCIsInNpemUiLCJzZXJ2ZXJzIiwicmVzdWx0cyIsInRvdGFsIiwiZXJyb3IiLCJuYXRpdmUiLCJhY2NlcHRJbnZpdGUiLCJoZWFkZXJzIiwiX2FjY2Vzc1Rva2VuIiwiY3Jvc3NEb21haW4iLCJ4aHJGaWVsZHMiLCJ3aXRoQ3JlZGVudGlhbHMiLCJjaGVja0Nvbm5lY3Rpb24iLCJhY2Nlc3NfdG9rZW4iLCJjb25uZWN0Iiwiam9pbldpbmRvdyIsIndpbmRvd09wdGlvbnMiLCJ3ZWJDb250ZW50cyIsIm9uIiwiZXZlbnQiLCJuYXZVcmwiLCJjbG9zZSIsImxvYWRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmRDb2xvciIsInNob3ciLCJyZXNpemFibGUiLCJtYXhpbWl6YWJsZSIsIm1pbmltaXphYmxlIiwiYWx3YXlzT25Ub3AiLCJmcmFtZSIsImNl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QVA7QUFpQkgsT0FsQkQsQ0FtQkEsT0FBT2lCLEtBQVAsRUFBYztBQUNWakIsZUFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0osS0F2Qk0sQ0FBUDtBQXdCSDs7QUFFRCxTQUFPMkIsT0FBUCxHQUFpQjtBQUNiLFdBQU8sSUFBSTVCLE9BQUosQ0FBWUMsT0FBTyxJQUFJO0FBQzFCLFlBQU00QixVQUFVLEdBQUcsSUFBSWpELGFBQUosQ0FBa0IsS0FBS2tELGFBQXZCLENBQW5CO0FBQ0EsWUFBTXBCLEdBQUcsR0FBSSwwRUFBeUUsS0FBS3hCLGVBQWdCLEVBQTNHO0FBQ0EyQyxnQkFBVSxDQUFDRSxXQUFYLENBQXVCQyxFQUF2QixDQUEwQixjQUExQixFQUEwQyxDQUFDQyxLQUFELEVBQVFDLE1BQVIsS0FBbUI7QUFDekQsWUFBSUEsTUFBTSxJQUFJLEtBQUtoRCxlQUFuQixFQUFvQztBQUNwQzJDLGtCQUFVLENBQUNNLEtBQVg7QUFDQWxDLGVBQU87QUFDVixPQUpEO0FBS0E0QixnQkFBVSxDQUFDTyxPQUFYLENBQW1CMUIsR0FBbkI7QUFDSCxLQVRNLENBQVA7QUFVSDs7QUFFRCxhQUFXb0IsYUFBWCxHQUEyQjtBQUN2QixXQUFPO0FBQ0hPLFdBQUssRUFBRSxHQURKO0FBRUhDLFlBQU0sRUFBRSxHQUZMO0FBR0hDLHFCQUFlLEVBQUUsU0FIZDtBQUlIQyxVQUFJLEVBQUUsSUFKSDtBQUtIQyxlQUFTLEVBQUUsSUFMUjtBQU1IQyxpQkFBVyxFQUFFLEtBTlY7QUFPSEMsaUJBQVcsRUFBRSxLQVBWO0FBUUhDLGlCQUFXLEVBQUUsSUFSVjtBQVNIQyxXQUFLLEVBQUUsS0FUSjtBQVVIQyxZQUFNLEVBQUUsSUFWTDtBQVdIQyxvQkFBYyxFQUFFO0FBQ1pDLHVCQUFlLEVBQUU7QUFETDtBQVhiLEtBQVA7QUFlSDs7QUFwSHdDIiwiZmlsZSI6Ii4vc3JjL3N0cnVjdHMvcHNjb25uZWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmNvbnN0IFNvcnRlZEd1aWxkU3RvcmUgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U29ydGVkR3VpbGRzXCIpO1xyXG5jb25zdCBBdmF0YXJEZWZhdWx0cyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRVc2VyQXZhdGFyVVJMXCIsIFwiREVGQVVMVF9BVkFUQVJTXCIpO1xyXG5jb25zdCBJbnZpdGVBY3Rpb25zID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFjY2VwdEludml0ZVwiKTtcclxuXHJcbmNvbnN0IEJyb3dzZXJXaW5kb3cgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3c7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGljU2VydmVyc0Nvbm5lY3Rpb24ge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgZW5kUG9pbnQoKSB7cmV0dXJuIFwiaHR0cHM6Ly9zZWFyY2guZGlzY29yZHNlcnZlcnMuY29tXCI7fVxyXG4gICAgc3RhdGljIGdldCBqb2luRW5kUG9pbnQoKSB7cmV0dXJuIFwiaHR0cHM6Ly9qLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO31cclxuICAgIHN0YXRpYyBnZXQgY29ubmVjdEVuZFBvaW50KCkge3JldHVybiBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiO31cclxuXHJcbiAgICBzdGF0aWMgZ2V0RGVmYXVsdEF2YXRhcigpIHtcclxuICAgICAgICByZXR1cm4gQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaGFzSm9pbmVkKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIFNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKS5pbmNsdWRlcyhpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNlYXJjaCh7dGVybSA9IFwiXCIsIGNhdGVnb3J5ID0gXCJcIiwgZnJvbSA9IDB9ID0ge30pIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKGNhdGVnb3J5KSBxdWVyaWVzLnB1c2goYGNhdGVnb3J5PSR7Y2F0ZWdvcnkucmVwbGFjZSgvIC9nLCBcIiUyMFwiKX1gKTtcclxuICAgICAgICAgICAgaWYgKHRlcm0pIHF1ZXJpZXMucHVzaChgdGVybT0ke3Rlcm0ucmVwbGFjZSgvIC9nLCBcIiUyMFwiKX1gKTtcclxuICAgICAgICAgICAgaWYgKGZyb20pIHF1ZXJpZXMucHVzaChgZnJvbT0ke2Zyb219YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gYD8ke3F1ZXJpZXMuam9pbihcIiZcIil9YDtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5lbmRQb2ludH0ke3F1ZXJ5fWAsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gZGF0YS5zaXplICsgZGF0YS5mcm9tO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJzOiBkYXRhLnJlc3VsdHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IGRhdGEuc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogZGF0YS5mcm9tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS50b3RhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogbmV4dCA+PSBkYXRhLnRvdGFsID8gbnVsbCA6IG5leHRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4gcmVzb2x2ZShudWxsKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgam9pbihpZCwgbmF0aXZlID0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuYXRpdmUpIHJldHVybiBJbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShpZCksIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuam9pbkVuZFBvaW50fS8ke2lkfWAsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uO1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbjtcIiAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ4LWRpc2NvcmQtdG9rZW5cIjogdGhpcy5fYWNjZXNzVG9rZW5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjcm9zc0RvbWFpbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHhockZpZWxkczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ICgpID0+IHJlc29sdmUodHJ1ZSksXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4gcmVzb2x2ZShmYWxzZSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNoZWNrQ29ubmVjdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHRoaXMuY29ubmVjdEVuZFBvaW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uO1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb247XCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNyb3NzRG9tYWluOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHhockZpZWxkczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbiA9IGRhdGEuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHJlc29sdmUoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBqb2luV2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3codGhpcy53aW5kb3dPcHRpb25zKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9JHt0aGlzLmNvbm5lY3RFbmRQb2ludH1gO1xyXG4gICAgICAgICAgICBqb2luV2luZG93LndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgbmF2VXJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2VXJsICE9IHRoaXMuY29ubmVjdEVuZFBvaW50KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBqb2luV2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBqb2luV2luZG93LmxvYWRVUkwodXJsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDM4MCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA0NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtaW5pbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsd2F5c09uVG9wOiB0cnVlLFxyXG4gICAgICAgICAgICBmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNlbnRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcclxuICAgICAgICAgICAgICAgIG5vZGVJbnRlZ3JhdGlvbjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/structs/psconnection.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PublicServersConnection; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nconst SortedGuildStore = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"getSortedGuilds\");\nconst AvatarDefaults = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");\nconst InviteActions = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"acceptInvite\");\n\nconst BrowserWindow = __webpack_require__(/*! electron */ \"electron\").remote.BrowserWindow;\n\nclass PublicServersConnection {\n static get endPoint() {\n return \"https://search.discordservers.com\";\n }\n\n static get joinEndPoint() {\n return \"https://j.discordservers.com\";\n }\n\n static get connectEndPoint() {\n return \"https://auth.discordservers.com/info\";\n }\n\n static getDefaultAvatar() {\n return AvatarDefaults.DEFAULT_AVATARS[Math.floor(Math.random() * 5)];\n }\n\n static hasJoined(id) {\n return SortedGuildStore.getFlattenedGuildIds().includes(id);\n }\n\n static search({\n term = \"\",\n category = \"\",\n from = 0\n } = {}) {\n const request = __webpack_require__(/*! request */ \"request\");\n\n return new Promise(resolve => {\n const queries = [];\n if (category) queries.push(`category=${category.replace(/ /g, \"%20\")}`);\n if (term) queries.push(`term=${term.replace(/ /g, \"%20\")}`);\n if (from) queries.push(`from=${from}`);\n const query = `?${queries.join(\"&\")}`;\n request.get({\n url: `${this.endPoint}${query}${query ? \"&schema=new\" : \"?schema=new\"}`,\n json: true\n }, (err, resp, data) => {\n if (err) return resolve(null);\n const next = data.size + data.from;\n resolve({\n servers: data.results,\n size: data.size,\n from: data.from,\n total: data.total,\n next: next >= data.total ? null : next\n });\n });\n });\n }\n\n static async join(id, native = false) {\n if (native) return InviteActions.acceptInvite(id);\n\n try {\n await fetch(`${this.joinEndPoint}/${id}`, {\n method: \"GET\",\n credentials: \"include\",\n mode: \"cors\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n });\n return true;\n } catch (e) {\n return false;\n }\n }\n\n static async checkConnection() {\n try {\n const response = await fetch(`https://auth.discordservers.com/info`, {\n method: \"GET\",\n credentials: \"include\",\n mode: \"cors\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n });\n const data = await response.json();\n this._accessToken = data.access_token;\n return data;\n } catch (error) {\n return false;\n }\n }\n\n static connect() {\n return new Promise(resolve => {\n const joinWindow = new BrowserWindow(this.windowOptions);\n const url = `https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=${this.connectEndPoint}`;\n joinWindow.webContents.on(\"did-navigate\", (event, navUrl) => {\n if (navUrl != this.connectEndPoint) return;\n joinWindow.close();\n resolve();\n });\n joinWindow.loadURL(url);\n });\n }\n\n static get windowOptions() {\n return {\n width: 380,\n height: 450,\n backgroundColor: \"#282b30\",\n show: true,\n resizable: true,\n maximizable: false,\n minimizable: false,\n alwaysOnTop: true,\n frame: false,\n center: true,\n webPreferences: {\n nodeIntegration: false\n }\n };\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3N0cnVjdHMvcHNjb25uZWN0aW9uLmpzP2VmZjYiXSwibmFtZXMiOlsiU29ydGVkR3VpbGRTdG9yZSIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsIkF2YXRhckRlZmF1bHRzIiwiSW52aXRlQWN0aW9ucyIsIkJyb3dzZXJXaW5kb3ciLCJyZXF1aXJlIiwicmVtb3RlIiwiUHVibGljU2VydmVyc0Nvbm5lY3Rpb24iLCJlbmRQb2ludCIsImpvaW5FbmRQb2ludCIsImNvbm5lY3RFbmRQb2ludCIsImdldERlZmF1bHRBdmF0YXIiLCJERUZBVUxUX0FWQVRBUlMiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJoYXNKb2luZWQiLCJpZCIsImdldEZsYXR0ZW5lZEd1aWxkSWRzIiwiaW5jbHVkZXMiLCJzZWFyY2giLCJ0ZXJtIiwiY2F0ZWdvcnkiLCJmcm9tIiwicmVxdWVzdCIsIlByb21pc2UiLCJyZXNvbHZlIiwicXVlcmllcyIsInB1c2giLCJyZXBsYWNlIiwicXVlcnkiLCJqb2luIiwiZ2V0IiwidXJsIiwianNvbiIsImVyciIsInJlc3AiLCJkYXRhIiwibmV4dCIsInNpemUiLCJzZXJ2ZXJzIiwicmVzdWx0cyIsInRvdGFsIiwibmF0aXZlIiwiYWNjZXB0SW52aXRlIiwiZmV0Y2giLCJtZXRob2QiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJoZWFkZXJzIiwiZSIsImNoZWNrQ29ubmVjdGlvbiIsInJlc3BvbnNlIiwiX2FjY2Vzc1Rva2VuIiwiYWNjZXNzX3Rva2VuIiwiZXJyb3IiLCJjb25uZWN0Iiwiam9pbldpbmRvdyIsIndpbmRvd09wdGlvbnMiLCJ3ZWJDb250ZW50cyIsIm9uIiwiZXZlbnQiLCJuYXZVcmwiLCJjbG9zZSIsImxvYWRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmRDb2xvciIsInNob3ciLCJyZXNpemFibGUiLCJtYXhpbWl6YWJsZSIsIm1pbmltaXphYmxlIiwiYWx3YXlzT25U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QzFCLFlBQU0rQixVQUFVLEdBQUcsSUFBSXJELGFBQUosQ0FBa0IsS0FBS3NELGFBQXZCLENBQW5CO0FBQ0EsWUFBTXpCLEdBQUcsR0FBSSwwRUFBeUUsS0FBS3ZCLGVBQWdCLEVBQTNHO0FBQ0ErQyxnQkFBVSxDQUFDRSxXQUFYLENBQXVCQyxFQUF2QixDQUEwQixjQUExQixFQUEwQyxDQUFDQyxLQUFELEVBQVFDLE1BQVIsS0FBbUI7QUFDekQsWUFBSUEsTUFBTSxJQUFJLEtBQUtwRCxlQUFuQixFQUFvQztBQUNwQytDLGtCQUFVLENBQUNNLEtBQVg7QUFDQXJDLGVBQU87QUFDVixPQUpEO0FBS0ErQixnQkFBVSxDQUFDTyxPQUFYLENBQW1CL0IsR0FBbkI7QUFDSCxLQVRNLENBQVA7QUFVSDs7QUFFRCxhQUFXeUIsYUFBWCxHQUEyQjtBQUN2QixXQUFPO0FBQ0hPLFdBQUssRUFBRSxHQURKO0FBRUhDLFlBQU0sRUFBRSxHQUZMO0FBR0hDLHFCQUFlLEVBQUUsU0FIZDtBQUlIQyxVQUFJLEVBQUUsSUFKSDtBQUtIQyxlQUFTLEVBQUUsSUFMUjtBQU1IQyxpQkFBVyxFQUFFLEtBTlY7QUFPSEMsaUJBQVcsRUFBRSxLQVBWO0FBUUhDLGlCQUFXLEVBQUUsSUFSVjtBQVNIQyxXQUFLLEVBQUUsS0FUSjtBQVVIQyxZQUFNLEVBQUUsSUFWTDtBQVdIQyxvQkFBYyxFQUFFO0FBQ1pDLHVCQUFlLEVBQUU7QUFETDtBQVhiLEtBQVA7QUFlSDs7QUF4R3dDIiwiZmlsZSI6Ii4vc3JjL3N0cnVjdHMvcHNjb25uZWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmNvbnN0IFNvcnRlZEd1aWxkU3RvcmUgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U29ydGVkR3VpbGRzXCIpO1xyXG5jb25zdCBBdmF0YXJEZWZhdWx0cyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRVc2VyQXZhdGFyVVJMXCIsIFwiREVGQVVMVF9BVkFUQVJTXCIpO1xyXG5jb25zdCBJbnZpdGVBY3Rpb25zID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFjY2VwdEludml0ZVwiKTtcclxuXHJcbmNvbnN0IEJyb3dzZXJXaW5kb3cgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3c7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGljU2VydmVyc0Nvbm5lY3Rpb24ge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgZW5kUG9pbnQoKSB7cmV0dXJuIFwiaHR0cHM6Ly9zZWFyY2guZGlzY29yZHNlcnZlcnMuY29tXCI7fVxyXG4gICAgc3RhdGljIGdldCBqb2luRW5kUG9pbnQoKSB7cmV0dXJuIFwiaHR0cHM6Ly9qLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO31cclxuICAgIHN0YXRpYyBnZXQgY29ubmVjdEVuZFBvaW50KCkge3JldHVybiBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiO31cclxuXHJcbiAgICBzdGF0aWMgZ2V0RGVmYXVsdEF2YXRhcigpIHtcclxuICAgICAgICByZXR1cm4gQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaGFzSm9pbmVkKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIFNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKS5pbmNsdWRlcyhpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNlYXJjaCh7dGVybSA9IFwiXCIsIGNhdGVnb3J5ID0gXCJcIiwgZnJvbSA9IDB9ID0ge30pIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBxdWVyaWVzID0gW107XHJcbiAgICAgICAgICAgIGlmIChjYXRlZ29yeSkgcXVlcmllcy5wdXNoKGBjYXRlZ29yeT0ke2NhdGVnb3J5LnJlcGxhY2UoLyAvZywgXCIlMjBcIil9YCk7XHJcbiAgICAgICAgICAgIGlmICh0ZXJtKSBxdWVyaWVzLnB1c2goYHRlcm09JHt0ZXJtLnJlcGxhY2UoLyAvZywgXCIlMjBcIil9YCk7XHJcbiAgICAgICAgICAgIGlmIChmcm9tKSBxdWVyaWVzLnB1c2goYGZyb209JHtmcm9tfWApO1xyXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IGA/JHtxdWVyaWVzLmpvaW4oXCImXCIpfWA7XHJcbiAgICAgICAgICAgIHJlcXVlc3QuZ2V0KHt1cmw6IGAke3RoaXMuZW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsIGpzb246IHRydWV9LCAoZXJyLCByZXNwLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBkYXRhLnNpemUgKyBkYXRhLmZyb207XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJzOiBkYXRhLnJlc3VsdHMsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogZGF0YS5zaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb206IGRhdGEuZnJvbSxcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS50b3RhbCxcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBuZXh0ID49IGRhdGEudG90YWwgPyBudWxsIDogbmV4dFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBqb2luKGlkLCBuYXRpdmUgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChuYXRpdmUpIHJldHVybiBJbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShpZCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7aWR9YCx7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFzeW5jIGNoZWNrQ29ubmVjdGlvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9gLHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcclxuICAgICAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbiA9IGRhdGEuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBqb2luV2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3codGhpcy53aW5kb3dPcHRpb25zKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9JHt0aGlzLmNvbm5lY3RFbmRQb2ludH1gO1xyXG4gICAgICAgICAgICBqb2luV2luZG93LndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgbmF2VXJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2VXJsICE9IHRoaXMuY29ubmVjdEVuZFBvaW50KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBqb2luV2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBqb2luV2luZG93LmxvYWRVUkwodXJsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDM4MCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA0NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtaW5pbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsd2F5c09uVG9wOiB0cnVlLFxyXG4gICAgICAgICAgICBmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNlbnRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcclxuICAgICAgICAgICAgICAgIG5vZGVJbnRlZ3JhdGlvbjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/structs/psconnection.js\n"); /***/ }), @@ -755,7 +743,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 ErrorBoundary; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass ErrorBoundary extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n hasError: false\n };\n }\n\n componentDidCatch() {\n this.setState({\n hasError: true\n });\n }\n\n render() {\n if (this.state.hasError) return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"react-error\"\n }, \"Component Error\");\n return this.props.children;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Vycm9yYm91bmRhcnkuanN4P2Q2ZDEiXSwibmFtZXMiOlsiRXJyb3JCb3VuZGFyeSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsInNldFN0YXRlIiwicmVuZGVyIiwiY2hpbGRyZW4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTUEsYUFBTixTQUE0QkMsNkNBQUssQ0FBQ0MsU0FBbEMsQ0FBNEM7QUFDdkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2pCLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsY0FBUSxFQUFFO0FBQVgsS0FBYjtBQUNEOztBQUVEQyxtQkFBaUIsR0FBRztBQUNsQixTQUFLQyxRQUFMLENBQWM7QUFBQ0YsY0FBUSxFQUFFO0FBQVgsS0FBZDtBQUNEOztBQUVERyxRQUFNLEdBQUc7QUFDUCxRQUFJLEtBQUtKLEtBQUwsQ0FBV0MsUUFBZixFQUF5QixPQUFPO0FBQUssZUFBUyxFQUFDO0FBQWYseUJBQVA7QUFDekIsV0FBTyxLQUFLRixLQUFMLENBQVdNLFFBQWxCO0FBQ0Q7O0FBYnNEIiwiZmlsZSI6Ii4vc3JjL3VpL2Vycm9yYm91bmRhcnkuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdH0gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICB0aGlzLnN0YXRlID0ge2hhc0Vycm9yOiBmYWxzZX07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2hhc0Vycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvcikgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicmVhY3QtZXJyb3JcIj5Db21wb25lbnQgRXJyb3I8L2Rpdj47ICBcclxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/errorboundary.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ErrorBoundary; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass ErrorBoundary extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n hasError: false\n };\n }\n\n componentDidCatch() {\n this.setState({\n hasError: true\n });\n }\n\n render() {\n if (this.state.hasError) return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"react-error\"\n }, \"Component Error\");\n return this.props.children;\n }\n\n}\nconst originalRender = ErrorBoundary.prototype.render;\nObject.defineProperty(ErrorBoundary.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function () {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].warn(\"ErrorBoundary\", \"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");\n },\n get: () => originalRender\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Vycm9yYm91bmRhcnkuanN4P2Q2ZDEiXSwibmFtZXMiOlsiRXJyb3JCb3VuZGFyeSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsInNldFN0YXRlIiwicmVuZGVyIiwiY2hpbGRyZW4iLCJvcmlnaW5hbFJlbmRlciIsInByb3RvdHlwZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsInNldCIsIkxvZ2dlciIsIndhcm4iLCJnZXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTUEsYUFBTixTQUE0QkMsNkNBQUssQ0FBQ0MsU0FBbEMsQ0FBNEM7QUFDdkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2pCLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsY0FBUSxFQUFFO0FBQVgsS0FBYjtBQUNEOztBQUVEQyxtQkFBaUIsR0FBRztBQUNsQixTQUFLQyxRQUFMLENBQWM7QUFBQ0YsY0FBUSxFQUFFO0FBQVgsS0FBZDtBQUNEOztBQUVERyxRQUFNLEdBQUc7QUFDUCxRQUFJLEtBQUtKLEtBQUwsQ0FBV0MsUUFBZixFQUF5QixPQUFPO0FBQUssZUFBUyxFQUFDO0FBQWYseUJBQVA7QUFDekIsV0FBTyxLQUFLRixLQUFMLENBQVdNLFFBQWxCO0FBQ0Q7O0FBYnNEO0FBZ0IzRCxNQUFNQyxjQUFjLEdBQUdYLGFBQWEsQ0FBQ1ksU0FBZCxDQUF3QkgsTUFBL0M7QUFDQUksTUFBTSxDQUFDQyxjQUFQLENBQXNCZCxhQUFhLENBQUNZLFNBQXBDLEVBQStDLFFBQS9DLEVBQXlEO0FBQ3JERyxZQUFVLEVBQUUsS0FEeUM7QUFFckRDLGNBQVksRUFBRSxLQUZ1QztBQUdyREMsS0FBRyxFQUFFLFlBQVc7QUFBQ0Msa0RBQU0sQ0FBQ0MsSUFBUCxDQUFZLGVBQVosRUFBNkIscUdBQTdCO0FBQXFJLEdBSGpHO0FBSXJEQyxLQUFHLEVBQUUsTUFBTVQ7QUFKMEMsQ0FBekQiLCJmaWxlIjoiLi9zcmMvdWkvZXJyb3Jib3VuZGFyeS5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBMb2dnZXJ9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvckJvdW5kYXJ5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgdGhpcy5zdGF0ZSA9IHtoYXNFcnJvcjogZmFsc2V9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZENhdGNoKCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtoYXNFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInJlYWN0LWVycm9yXCI+Q29tcG9uZW50IEVycm9yPC9kaXY+OyAgXHJcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuOyBcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBFcnJvckJvdW5kYXJ5LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFcnJvckJvdW5kYXJ5LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtMb2dnZXIud2FybihcIkVycm9yQm91bmRhcnlcIiwgXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/errorboundary.jsx\n"); /***/ }), @@ -767,7 +755,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 modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./window */ \"./src/ui/floating/window.jsx\");\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\nclass FloatingWindowContainer extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n windows: []\n };\n }\n\n render() {\n return this.state.windows.map(window => modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_window__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _extends({}, window, {\n close: this.close.bind(this, window.id)\n }), window.children));\n }\n\n open(window) {\n this.setState({\n windows: [...this.state.windows, window]\n });\n }\n\n close(id) {\n this.setState({\n windows: this.state.windows.filter(w => {\n if (w.id == id && w.onClose) w.onClose();\n return w.id != id;\n })\n });\n }\n\n static get id() {\n return \"floating-windows\";\n }\n\n static get root() {\n if (this._root) return this._root;\n const container = document.createElement(\"div\");\n container.id = this.id;\n document.body.append(container);\n return this._root = container;\n }\n\n}\n\nconst containerRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef(); // const container = ;\n// const App = Utilities.findInReactTree(Utilities.getReactInstance(document.querySelector(\".app-19_DXt\")), m => m && m.type && m.type.displayName && m.type.displayName == \"App\");\n// Patcher.after(\"FloatingContainer\", App.type.prototype, \"render\", (thisObject, args, returnValue) => {\n// const group = Utilities.findInRenderTree(returnValue, m => m && m[6] && m[6].type && m[6].type.displayName == \"LayerContainer\", {walkable: [\"children\", \"props\"]});\n// group.push(container);\n// });\n// App.stateNode.forceUpdate();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (containerRef.current);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Zsb2F0aW5nL2NvbnRhaW5lci5qc3g/MTU2OSJdLCJuYW1lcyI6WyJGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwid2luZG93cyIsInJlbmRlciIsIm1hcCIsIndpbmRvdyIsImNsb3NlIiwiYmluZCIsImlkIiwiY2hpbGRyZW4iLCJvcGVuIiwic2V0U3RhdGUiLCJmaWx0ZXIiLCJ3Iiwib25DbG9zZSIsInJvb3QiLCJfcm9vdCIsImNvbnRhaW5lciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImJvZHkiLCJhcHBlbmQiLCJjb250YWluZXJSZWYiLCJjcmVhdGVSZWYiLCJjdXJyZW50Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBRUE7O0FBRUEsTUFBTUEsdUJBQU4sU0FBc0NDLDZDQUFLLENBQUNDLFNBQTVDLENBQXNEO0FBRWxEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsYUFBTyxFQUFFO0FBQVYsS0FBYjtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxXQUFPLEtBQUtGLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQkUsR0FBbkIsQ0FBdUJDLE1BQU0sSUFDaEMsNERBQUMsK0NBQUQsZUFBb0JBLE1BQXBCO0FBQTRCLFdBQUssRUFBRSxLQUFLQyxLQUFMLENBQVdDLElBQVgsQ0FBZ0IsSUFBaEIsRUFBc0JGLE1BQU0sQ0FBQ0csRUFBN0I7QUFBbkMsUUFDU0gsTUFBTSxDQUFDSSxRQURoQixDQURHLENBQVA7QUFLSDs7QUFFREMsTUFBSSxDQUFDTCxNQUFELEVBQVM7QUFDVCxTQUFLTSxRQUFMLENBQWM7QUFDVlQsYUFBTyxFQUFFLENBQUMsR0FBRyxLQUFLRCxLQUFMLENBQVdDLE9BQWYsRUFBd0JHLE1BQXhCO0FBREMsS0FBZDtBQUdIOztBQUVEQyxPQUFLLENBQUNFLEVBQUQsRUFBSztBQUNOLFNBQUtHLFFBQUwsQ0FBYztBQUNWVCxhQUFPLEVBQUUsS0FBS0QsS0FBTCxDQUFXQyxPQUFYLENBQW1CVSxNQUFuQixDQUEwQkMsQ0FBQyxJQUFJO0FBQ3BDLFlBQUlBLENBQUMsQ0FBQ0wsRUFBRixJQUFRQSxFQUFSLElBQWNLLENBQUMsQ0FBQ0MsT0FBcEIsRUFBNkJELENBQUMsQ0FBQ0MsT0FBRjtBQUM3QixlQUFPRCxDQUFDLENBQUNMLEVBQUYsSUFBUUEsRUFBZjtBQUNILE9BSFE7QUFEQyxLQUFkO0FBTUg7O0FBRUQsYUFBV0EsRUFBWCxHQUFnQjtBQUFDLFdBQU8sa0JBQVA7QUFBMkI7O0FBQzVDLGFBQVdPLElBQVgsR0FBa0I7QUFDZCxRQUFJLEtBQUtDLEtBQVQsRUFBZ0IsT0FBTyxLQUFLQSxLQUFaO0FBQ2hCLFVBQU1DLFNBQVMsR0FBR0MsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQXZCLENBQWxCO0FBQ0FGLGFBQVMsQ0FBQ1QsRUFBVixHQUFlLEtBQUtBLEVBQXBCO0FBQ0FVLFlBQVEsQ0FBQ0UsSUFBVCxDQUFjQyxNQUFkLENBQXFCSixTQUFyQjtBQUNBLFdBQU8sS0FBS0QsS0FBTCxHQUFhQyxTQUFwQjtBQUNIOztBQXJDaUQ7O0FBd0N0RCxNQUFNSyxZQUFZLEdBQUd6Qiw2Q0FBSyxDQUFDMEIsU0FBTixFQUFyQixDLENBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ2VELDJFQUFZLENBQUNFLE9BQTVCIiwiZmlsZSI6Ii4vc3JjL3VpL2Zsb2F0aW5nL2NvbnRhaW5lci5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBVdGlsaXRpZXMsIFBhdGNoZXJ9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgRmxvYXRpbmdXaW5kb3cgZnJvbSBcIi4vd2luZG93XCI7XHJcblxyXG5jbGFzcyBGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt3aW5kb3dzOiBbXX07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLndpbmRvd3MubWFwKHdpbmRvdyA9PlxyXG4gICAgICAgICAgICA8RmxvYXRpbmdXaW5kb3cgey4uLndpbmRvd30gY2xvc2U9e3RoaXMuY2xvc2UuYmluZCh0aGlzLCB3aW5kb3cuaWQpfT5cclxuICAgICAgICAgICAgICAgICAgICB7d2luZG93LmNoaWxkcmVufVxyXG4gICAgICAgICAgICA8L0Zsb2F0aW5nV2luZG93PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Blbih3aW5kb3cpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgd2luZG93czogWy4uLnRoaXMuc3RhdGUud2luZG93cywgd2luZG93XVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKGlkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHdpbmRvd3M6IHRoaXMuc3RhdGUud2luZG93cy5maWx0ZXIodyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAody5pZCA9PSBpZCAmJiB3Lm9uQ2xvc2UpIHcub25DbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHcuaWQgIT0gaWQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBpZCgpIHtyZXR1cm4gXCJmbG9hdGluZy13aW5kb3dzXCI7fVxyXG4gICAgc3RhdGljIGdldCByb290KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yb290KSByZXR1cm4gdGhpcy5fcm9vdDtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgIGNvbnRhaW5lci5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdCA9IGNvbnRhaW5lcjtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbi8vIGNvbnN0IGNvbnRhaW5lciA9IDxGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciByZWY9e2NvbnRhaW5lclJlZn0gLz47XHJcbi8vIGNvbnN0IEFwcCA9IFV0aWxpdGllcy5maW5kSW5SZWFjdFRyZWUoVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5hcHAtMTlfRFh0XCIpKSwgbSA9PiBtICYmIG0udHlwZSAmJiBtLnR5cGUuZGlzcGxheU5hbWUgJiYgbS50eXBlLmRpc3BsYXlOYW1lID09IFwiQXBwXCIpO1xyXG4vLyBQYXRjaGVyLmFmdGVyKFwiRmxvYXRpbmdDb250YWluZXJcIiwgQXBwLnR5cGUucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCwgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuLy8gICAgIGNvbnN0IGdyb3VwID0gVXRpbGl0aWVzLmZpbmRJblJlbmRlclRyZWUocmV0dXJuVmFsdWUsIG0gPT4gbSAmJiBtWzZdICYmIG1bNl0udHlwZSAmJiBtWzZdLnR5cGUuZGlzcGxheU5hbWUgPT0gXCJMYXllckNvbnRhaW5lclwiLCB7d2Fsa2FibGU6IFtcImNoaWxkcmVuXCIsIFwicHJvcHNcIl19KTtcclxuLy8gICAgIGdyb3VwLnB1c2goY29udGFpbmVyKTtcclxuLy8gfSk7XHJcbi8vIEFwcC5zdGF0ZU5vZGUuZm9yY2VVcGRhdGUoKTtcclxuZXhwb3J0IGRlZmF1bHQgY29udGFpbmVyUmVmLmN1cnJlbnQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/floating/container.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./window */ \"./src/ui/floating/window.jsx\");\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\nclass FloatingWindowContainer extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n windows: []\n };\n }\n\n get minY() {\n const appContainer = modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].query(`#app-mount > div[class*=\"app-\"`);\n if (appContainer) return appContainer.offsetTop;\n return 0;\n }\n\n render() {\n return this.state.windows.map(window => modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_window__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _extends({}, window, {\n close: this.close.bind(this, window.id),\n minY: this.minY\n }), window.children));\n }\n\n open(window) {\n this.setState({\n windows: [...this.state.windows, window]\n });\n }\n\n close(id) {\n this.setState({\n windows: this.state.windows.filter(w => {\n if (w.id == id && w.onClose) w.onClose();\n return w.id != id;\n })\n });\n }\n\n static get id() {\n return \"floating-windows\";\n }\n\n static get root() {\n if (this._root) return this._root;\n const container = document.createElement(\"div\");\n container.id = this.id;\n document.body.append(container);\n return this._root = container;\n }\n\n}\n\nconst containerRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\nconst container = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(FloatingWindowContainer, {\n ref: containerRef\n});\nconst wrapped = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"AppReferencePositionLayer\").AppLayerProvider().props.layerContext.Provider, {\n value: [document.querySelector(\"#app-mount > .layerContainer-yqaFcK\")]\n}, container);\nconst div = modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].createElement(`
`);\nmodules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].query(\"#app-mount\").append(div);\nmodules__WEBPACK_IMPORTED_MODULE_0__[\"ReactDOM\"].render(wrapped, div);\n/* harmony default export */ __webpack_exports__[\"default\"] = (containerRef.current);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Zsb2F0aW5nL2NvbnRhaW5lci5qc3g/MTU2OSJdLCJuYW1lcyI6WyJGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwid2luZG93cyIsIm1pblkiLCJhcHBDb250YWluZXIiLCJET00iLCJxdWVyeSIsIm9mZnNldFRvcCIsInJlbmRlciIsIm1hcCIsIndpbmRvdyIsImNsb3NlIiwiYmluZCIsImlkIiwiY2hpbGRyZW4iLCJvcGVuIiwic2V0U3RhdGUiLCJmaWx0ZXIiLCJ3Iiwib25DbG9zZSIsInJvb3QiLCJfcm9vdCIsImNvbnRhaW5lciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImJvZHkiLCJhcHBlbmQiLCJjb250YWluZXJSZWYiLCJjcmVhdGVSZWYiLCJ3cmFwcGVkIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiQXBwTGF5ZXJQcm92aWRlciIsImxheWVyQ29udGV4dCIsIlByb3ZpZGVyIiwidmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiZGl2IiwiUmVhY3RET00iLCJjdXJyZW50Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBRUE7O0FBRUEsTUFBTUEsdUJBQU4sU0FBc0NDLDZDQUFLLENBQUNDLFNBQTVDLENBQXNEO0FBRWxEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsYUFBTyxFQUFFO0FBQVYsS0FBYjtBQUNIOztBQUVELE1BQUlDLElBQUosR0FBVztBQUNQLFVBQU1DLFlBQVksR0FBR0MsMkNBQUcsQ0FBQ0MsS0FBSixDQUFXLGdDQUFYLENBQXJCO0FBQ0EsUUFBSUYsWUFBSixFQUFrQixPQUFPQSxZQUFZLENBQUNHLFNBQXBCO0FBQ2xCLFdBQU8sQ0FBUDtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxXQUFPLEtBQUtQLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQk8sR0FBbkIsQ0FBdUJDLE1BQU0sSUFDaEMsNERBQUMsK0NBQUQsZUFBb0JBLE1BQXBCO0FBQTRCLFdBQUssRUFBRSxLQUFLQyxLQUFMLENBQVdDLElBQVgsQ0FBZ0IsSUFBaEIsRUFBc0JGLE1BQU0sQ0FBQ0csRUFBN0IsQ0FBbkM7QUFBcUUsVUFBSSxFQUFFLEtBQUtWO0FBQWhGLFFBQ1NPLE1BQU0sQ0FBQ0ksUUFEaEIsQ0FERyxDQUFQO0FBS0g7O0FBRURDLE1BQUksQ0FBQ0wsTUFBRCxFQUFTO0FBQ1QsU0FBS00sUUFBTCxDQUFjO0FBQ1ZkLGFBQU8sRUFBRSxDQUFDLEdBQUcsS0FBS0QsS0FBTCxDQUFXQyxPQUFmLEVBQXdCUSxNQUF4QjtBQURDLEtBQWQ7QUFHSDs7QUFFREMsT0FBSyxDQUFDRSxFQUFELEVBQUs7QUFDTixTQUFLRyxRQUFMLENBQWM7QUFDVmQsYUFBTyxFQUFFLEtBQUtELEtBQUwsQ0FBV0MsT0FBWCxDQUFtQmUsTUFBbkIsQ0FBMEJDLENBQUMsSUFBSTtBQUNwQyxZQUFJQSxDQUFDLENBQUNMLEVBQUYsSUFBUUEsRUFBUixJQUFjSyxDQUFDLENBQUNDLE9BQXBCLEVBQTZCRCxDQUFDLENBQUNDLE9BQUY7QUFDN0IsZUFBT0QsQ0FBQyxDQUFDTCxFQUFGLElBQVFBLEVBQWY7QUFDSCxPQUhRO0FBREMsS0FBZDtBQU1IOztBQUVELGFBQVdBLEVBQVgsR0FBZ0I7QUFBQyxXQUFPLGtCQUFQO0FBQTJCOztBQUM1QyxhQUFXTyxJQUFYLEdBQWtCO0FBQ2QsUUFBSSxLQUFLQyxLQUFULEVBQWdCLE9BQU8sS0FBS0EsS0FBWjtBQUNoQixVQUFNQyxTQUFTLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixLQUF2QixDQUFsQjtBQUNBRixhQUFTLENBQUNULEVBQVYsR0FBZSxLQUFLQSxFQUFwQjtBQUNBVSxZQUFRLENBQUNFLElBQVQsQ0FBY0MsTUFBZCxDQUFxQkosU0FBckI7QUFDQSxXQUFPLEtBQUtELEtBQUwsR0FBYUMsU0FBcEI7QUFDSDs7QUEzQ2lEOztBQThDdEQsTUFBTUssWUFBWSxHQUFHOUIsNkNBQUssQ0FBQytCLFNBQU4sRUFBckI7QUFDQSxNQUFNTixTQUFTLEdBQUcsNERBQUMsdUJBQUQ7QUFBeUIsS0FBRyxFQUFFSztBQUE5QixFQUFsQjtBQUNBLE1BQU1FLE9BQU8sR0FBR2hDLDZDQUFLLENBQUMyQixhQUFOLENBQW9CTSxzREFBYyxDQUFDQyxVQUFmLENBQTBCLDJCQUExQixFQUF1REMsZ0JBQXZELEdBQTBFaEMsS0FBMUUsQ0FBZ0ZpQyxZQUFoRixDQUE2RkMsUUFBakgsRUFBMkg7QUFBQ0MsT0FBSyxFQUFFLENBQUNaLFFBQVEsQ0FBQ2EsYUFBVCxDQUF1QixxQ0FBdkIsQ0FBRDtBQUFSLENBQTNILEVBQXFNZCxTQUFyTSxDQUFoQjtBQUNBLE1BQU1lLEdBQUcsR0FBR2hDLDJDQUFHLENBQUNtQixhQUFKLENBQW1CLG1DQUFuQixDQUFaO0FBQ0FuQiwyQ0FBRyxDQUFDQyxLQUFKLENBQVUsWUFBVixFQUF3Qm9CLE1BQXhCLENBQStCVyxHQUEvQjtBQUNBQyxnREFBUSxDQUFDOUIsTUFBVCxDQUFnQnFCLE9BQWhCLEVBQXlCUSxHQUF6QjtBQUNlViwyRUFBWSxDQUFDWSxPQUE1QiIsImZpbGUiOiIuL3NyYy91aS9mbG9hdGluZy9jb250YWluZXIuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgUmVhY3RET00sIERPTSwgV2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgRmxvYXRpbmdXaW5kb3cgZnJvbSBcIi4vd2luZG93XCI7XHJcblxyXG5jbGFzcyBGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt3aW5kb3dzOiBbXX07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1pblkoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwQ29udGFpbmVyID0gRE9NLnF1ZXJ5KGAjYXBwLW1vdW50ID4gZGl2W2NsYXNzKj1cImFwcC1cImApO1xyXG4gICAgICAgIGlmIChhcHBDb250YWluZXIpIHJldHVybiBhcHBDb250YWluZXIub2Zmc2V0VG9wO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS53aW5kb3dzLm1hcCh3aW5kb3cgPT5cclxuICAgICAgICAgICAgPEZsb2F0aW5nV2luZG93IHsuLi53aW5kb3d9IGNsb3NlPXt0aGlzLmNsb3NlLmJpbmQodGhpcywgd2luZG93LmlkKX0gbWluWT17dGhpcy5taW5ZfT5cclxuICAgICAgICAgICAgICAgICAgICB7d2luZG93LmNoaWxkcmVufVxyXG4gICAgICAgICAgICA8L0Zsb2F0aW5nV2luZG93PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Blbih3aW5kb3cpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgd2luZG93czogWy4uLnRoaXMuc3RhdGUud2luZG93cywgd2luZG93XVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKGlkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHdpbmRvd3M6IHRoaXMuc3RhdGUud2luZG93cy5maWx0ZXIodyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAody5pZCA9PSBpZCAmJiB3Lm9uQ2xvc2UpIHcub25DbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHcuaWQgIT0gaWQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBpZCgpIHtyZXR1cm4gXCJmbG9hdGluZy13aW5kb3dzXCI7fVxyXG4gICAgc3RhdGljIGdldCByb290KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yb290KSByZXR1cm4gdGhpcy5fcm9vdDtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgIGNvbnRhaW5lci5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdCA9IGNvbnRhaW5lcjtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbmNvbnN0IGNvbnRhaW5lciA9IDxGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciByZWY9e2NvbnRhaW5lclJlZn0gLz47XHJcbmNvbnN0IHdyYXBwZWQgPSBSZWFjdC5jcmVhdGVFbGVtZW50KFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJBcHBSZWZlcmVuY2VQb3NpdGlvbkxheWVyXCIpLkFwcExheWVyUHJvdmlkZXIoKS5wcm9wcy5sYXllckNvbnRleHQuUHJvdmlkZXIsIHt2YWx1ZTogW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gLmxheWVyQ29udGFpbmVyLXlxYUZjS1wiKV19LCBjb250YWluZXIpO1xyXG5jb25zdCBkaXYgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImZsb2F0aW5nLXdpbmRvd3MtbGF5ZXJcIj5gKTtcclxuRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQoZGl2KTtcclxuUmVhY3RET00ucmVuZGVyKHdyYXBwZWQsIGRpdik7XHJcbmV4cG9ydCBkZWZhdWx0IGNvbnRhaW5lclJlZi5jdXJyZW50OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/floating/container.jsx\n"); /***/ }), @@ -779,7 +767,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modu /***/ (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 FloatingWindow; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _structs_screen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../structs/screen */ \"./src/structs/screen.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_fullscreen__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/fullscreen */ \"./src/ui/icons/fullscreen.jsx\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n\n\n\n\n\nclass FloatingWindow extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n modalOpen: false\n };\n this.offX = 0;\n this.offY = 0;\n this.titlebar = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.window = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.close = this.close.bind(this);\n this.maximize = this.maximize.bind(this);\n this.onDrag = this.onDrag.bind(this);\n this.onDragStart = this.onDragStart.bind(this);\n this.onDragStop = this.onDragStop.bind(this);\n this.onResizeStart = this.onResizeStart.bind(this);\n }\n\n componentDidMount() {\n this.window.current.addEventListener(\"mousedown\", this.onResizeStart, false);\n this.titlebar.current.addEventListener(\"mousedown\", this.onDragStart, false);\n document.addEventListener(\"mouseup\", this.onDragStop, false);\n }\n\n onResizeStart() {\n this.currentWidth = this.window.current.style.width;\n this.currentHeight = this.window.current.style.height;\n }\n\n onDragStop() {\n document.removeEventListener(\"mousemove\", this.onDrag, true);\n\n if (this.props.onResize) {\n const width = this.window.current.style.width;\n const height = this.window.current.style.height;\n if (width != this.currentWidth || height != this.currentHeight) this.props.onResize();\n this.currentWidth = width;\n this.currentHeight = height;\n }\n }\n\n onDragStart(e) {\n const div = this.window.current;\n this.offY = e.clientY - parseInt(div.offsetTop);\n this.offX = e.clientX - parseInt(div.offsetLeft);\n document.addEventListener(\"mousemove\", this.onDrag, true);\n }\n\n onDrag(e) {\n const div = this.window.current;\n div.style.top = e.clientY - this.offY + \"px\";\n div.style.left = e.clientX - this.offX + \"px\";\n }\n\n componentWillUnmount() {\n this.titlebar.current.removeEventListener(\"mousedown\", this.onDragStart, false);\n document.removeEventListener(\"mouseup\", this.onDragStop, false);\n }\n\n render() {\n const top = this.props.center ? _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].height / 2 - this.props.height / 2 : this.props.top;\n const left = this.props.center ? _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].width / 2 - this.props.width / 2 : this.props.left; // console.log(top, left);\n\n const className = `floating-window${` ${this.props.className}` || \"\"}${this.props.resizable ? \" resizable\" : \"\"}${this.state.modalOpen ? \" modal-open\" : \"\"}`;\n const styles = {\n height: this.props.height,\n width: this.props.width,\n left: left || 0,\n top: top || 0\n };\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: this.props.id,\n className: className,\n ref: this.window,\n style: styles\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-titlebar\",\n ref: this.titlebar\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"title\"\n }, this.props.title), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-buttons\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"button maximize-button\",\n onClick: this.maximize\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_fullscreen__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n size: \"18px\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"button close-button\",\n onClick: this.close\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null)))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-content\"\n }, this.props.children));\n }\n\n async close() {\n let shouldClose = true;\n const confirmClose = typeof this.props.confirmClose == \"function\" ? this.props.confirmClose() : this.props.confirmClose;\n\n if (confirmClose) {\n this.setState({\n modalOpen: true\n });\n shouldClose = await this.confirmClose();\n this.setState({\n modalOpen: false\n });\n }\n\n if (this.props.close && shouldClose) this.props.close();\n }\n\n maximize() {\n this.window.current.style.width = \"100%\";\n this.window.current.style.height = \"100%\";\n this.window.current.style.top = \"20px\";\n this.window.current.style.left = \"0px\";\n if (this.props.onResize) this.props.onResize();\n }\n\n confirmClose() {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_4__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmAction, this.props.confirmationText, {\n danger: true,\n confirmText: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.close,\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Zsb2F0aW5nL3dpbmRvdy5qc3g/Y2YzZCJdLCJuYW1lcyI6WyJGbG9hdGluZ1dpbmRvdyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwibW9kYWxPcGVuIiwib2ZmWCIsIm9mZlkiLCJ0aXRsZWJhciIsImNyZWF0ZVJlZiIsIndpbmRvdyIsImNsb3NlIiwiYmluZCIsIm1heGltaXplIiwib25EcmFnIiwib25EcmFnU3RhcnQiLCJvbkRyYWdTdG9wIiwib25SZXNpemVTdGFydCIsImNvbXBvbmVudERpZE1vdW50IiwiY3VycmVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkb2N1bWVudCIsImN1cnJlbnRXaWR0aCIsInN0eWxlIiwid2lkdGgiLCJjdXJyZW50SGVpZ2h0IiwiaGVpZ2h0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uUmVzaXplIiwiZSIsImRpdiIsImNsaWVudFkiLCJwYXJzZUludCIsIm9mZnNldFRvcCIsImNsaWVudFgiLCJvZmZzZXRMZWZ0IiwidG9wIiwibGVmdCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiY2VudGVyIiwiU2NyZWVuIiwiY2xhc3NOYW1lIiwicmVzaXphYmxlIiwic3R5bGVzIiwiaWQiLCJ0aXRsZSIsImNoaWxkcmVuIiwic2hvdWxkQ2xvc2UiLCJjb25maXJtQ2xvc2UiLCJzZXRTdGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiTW9kYWxzIiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiU3RyaW5ncyIsImNvbmZpcm1BY3Rpb24iLCJjb25maXJtYXRpb25UZXh0IiwiZGFuZ2VyIiwiY29uZmlybVRleHQiLCJvbkNvbmZpcm0iLCJvbkNhbmNlbCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsTUFBTUEsY0FBTixTQUE2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O0FBSXBGUyxnQkFBUSxFQUFFLE1BQU07QUFBQ1QsaUJBQU8sQ0FBQyxLQUFELENBQVA7QUFBZ0I7QUFKbUQsT0FBeEY7QUFNSCxLQVBNLENBQVA7QUFRSDs7QUFqSHVEIiwiZmlsZSI6Ii4vc3JjL3VpL2Zsb2F0aW5nL3dpbmRvdy5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBTdHJpbmdzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IFNjcmVlbiBmcm9tIFwiLi4vLi4vc3RydWN0cy9zY3JlZW5cIjtcclxuaW1wb3J0IENsb3NlQnV0dG9uIGZyb20gXCIuLi9pY29ucy9jbG9zZVwiO1xyXG5pbXBvcnQgTWF4aW1pemVJY29uIGZyb20gXCIuLi9pY29ucy9mdWxsc2NyZWVuXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL21vZGFsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvYXRpbmdXaW5kb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge21vZGFsT3BlbjogZmFsc2V9O1xyXG5cclxuICAgICAgICB0aGlzLm9mZlggPSAwO1xyXG4gICAgICAgIHRoaXMub2ZmWSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudGl0bGViYXIgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICB0aGlzLndpbmRvdyA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWF4aW1pemUgPSB0aGlzLm1heGltaXplLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkRyYWcgPSB0aGlzLm9uRHJhZy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25EcmFnU3RhcnQgPSB0aGlzLm9uRHJhZ1N0YXJ0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkRyYWdTdG9wID0gdGhpcy5vbkRyYWdTdG9wLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZVN0YXJ0ID0gdGhpcy5vblJlc2l6ZVN0YXJ0LmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy53aW5kb3cuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25SZXNpemVTdGFydCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudGl0bGViYXIuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25EcmFnU3RhcnQsIGZhbHNlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLm9uRHJhZ1N0b3AsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblJlc2l6ZVN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS53aWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSB0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBvbkRyYWdTdG9wKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbkRyYWcsIHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uUmVzaXplKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS53aWR0aDtcclxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCAhPSB0aGlzLmN1cnJlbnRXaWR0aCB8fCBoZWlnaHQgIT0gdGhpcy5jdXJyZW50SGVpZ2h0KSB0aGlzLnByb3BzLm9uUmVzaXplKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25EcmFnU3RhcnQoZSkge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IHRoaXMud2luZG93LmN1cnJlbnQ7XHJcbiAgICAgICAgdGhpcy5vZmZZID0gZS5jbGllbnRZIC0gcGFyc2VJbnQoZGl2Lm9mZnNldFRvcCk7XHJcbiAgICAgICAgdGhpcy5vZmZYID0gZS5jbGllbnRYIC0gcGFyc2VJbnQoZGl2Lm9mZnNldExlZnQpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbkRyYWcsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJhZyhlKSB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gdGhpcy53aW5kb3cuY3VycmVudDtcclxuICAgICAgICBkaXYuc3R5bGUudG9wID0gKGUuY2xpZW50WSAtIHRoaXMub2ZmWSkgKyBcInB4XCI7XHJcbiAgICAgICAgZGl2LnN0eWxlLmxlZnQgPSAoZS5jbGllbnRYIC0gdGhpcy5vZmZYKSArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLnRpdGxlYmFyLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCB0aGlzLm9uRHJhZ1N0YXJ0LCBmYWxzZSk7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5vbkRyYWdTdG9wLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMucHJvcHMuY2VudGVyID8gKFNjcmVlbi5oZWlnaHQgLyAyKSAtICh0aGlzLnByb3BzLmhlaWdodCAvIDIpIDogdGhpcy5wcm9wcy50b3A7XHJcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMucHJvcHMuY2VudGVyID8gKFNjcmVlbi53aWR0aCAvIDIpIC0gKHRoaXMucHJvcHMud2lkdGggLyAyKSA6IHRoaXMucHJvcHMubGVmdCA7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codG9wLCBsZWZ0KTtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBgZmxvYXRpbmctd2luZG93JHtgICR7dGhpcy5wcm9wcy5jbGFzc05hbWV9YCB8fCBcIlwifSR7dGhpcy5wcm9wcy5yZXNpemFibGUgPyBcIiByZXNpemFibGVcIiA6IFwiXCJ9JHt0aGlzLnN0YXRlLm1vZGFsT3BlbiA/IFwiIG1vZGFsLW9wZW5cIiA6IFwiXCJ9YDtcclxuICAgICAgICBjb25zdCBzdHlsZXMgPSB7aGVpZ2h0OiB0aGlzLnByb3BzLmhlaWdodCwgd2lkdGg6IHRoaXMucHJvcHMud2lkdGgsIGxlZnQ6IGxlZnQgfHwgMCwgdG9wOiB0b3AgfHwgMH07XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgaWQ9e3RoaXMucHJvcHMuaWR9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSByZWY9e3RoaXMud2luZG93fSBzdHlsZT17c3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb2F0aW5nLXdpbmRvdy10aXRsZWJhclwiIHJlZj17dGhpcy50aXRsZWJhcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRpdGxlXCI+e3RoaXMucHJvcHMudGl0bGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb2F0aW5nLXdpbmRvdy1idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJ1dHRvbiBtYXhpbWl6ZS1idXR0b25cIiBvbkNsaWNrPXt0aGlzLm1heGltaXplfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWF4aW1pemVJY29uIHNpemU9XCIxOHB4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b24gY2xvc2UtYnV0dG9uXCIgb25DbGljaz17dGhpcy5jbG9zZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENsb3NlQnV0dG9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbG9hdGluZy13aW5kb3ctY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZSgpIHtcclxuICAgICAgICBsZXQgc2hvdWxkQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1DbG9zZSA9IHR5cGVvZih0aGlzLnByb3BzLmNvbmZpcm1DbG9zZSkgPT0gXCJmdW5jdGlvblwiID8gdGhpcy5wcm9wcy5jb25maXJtQ2xvc2UoKSA6IHRoaXMucHJvcHMuY29uZmlybUNsb3NlO1xyXG4gICAgICAgIGlmIChjb25maXJtQ2xvc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kYWxPcGVuOiB0cnVlfSk7XHJcbiAgICAgICAgICAgIHNob3VsZENsb3NlID0gYXdhaXQgdGhpcy5jb25maXJtQ2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kYWxPcGVuOiBmYWxzZX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jbG9zZSAmJiBzaG91bGRDbG9zZSkgdGhpcy5wcm9wcy5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG1heGltaXplKCkge1xyXG4gICAgICAgIHRoaXMud2luZG93LmN1cnJlbnQuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcclxuICAgICAgICB0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgIHRoaXMud2luZG93LmN1cnJlbnQuc3R5bGUudG9wID0gXCIyMHB4XCI7XHJcbiAgICAgICAgdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vblJlc2l6ZSkgdGhpcy5wcm9wcy5vblJlc2l6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1DbG9zZSgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIE1vZGFscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoU3RyaW5ncy5Nb2RhbHMuY29uZmlybUFjdGlvbiwgdGhpcy5wcm9wcy5jb25maXJtYXRpb25UZXh0LCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogU3RyaW5ncy5Nb2RhbHMuY2xvc2UsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/floating/window.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FloatingWindow; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _structs_screen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../structs/screen */ \"./src/structs/screen.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_fullscreen__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/fullscreen */ \"./src/ui/icons/fullscreen.jsx\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n\n\n\n\n // const Draggable = WebpackModules.getByDisplayName(\"Draggable\");\n// {\n// \"dragAnywhere\": true,\n// \"className\": \"pictureInPictureWindow-1B5qSe\",\n// \"maxX\": 1969,\n// \"maxY\": this.maxY,\n// \"onDragStart\": \"ƒ () {}\",\n// \"onDrag\": \"ƒ () {}\",\n// \"onDragEnd\": \"ƒ () {}\",\n// \"children\": \"
\",\n// \"initialX\": 0,\n// \"initialY\": 0\n// }\n\nclass FloatingWindow extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n modalOpen: false\n };\n this.offX = 0;\n this.offY = 0;\n this.maxX = this.props.maxX || _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].width;\n this.maxY = this.props.maxY || _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].height;\n this.minX = this.props.minX || 0;\n this.minY = this.props.minY || 0;\n this.titlebar = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.window = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.close = this.close.bind(this);\n this.maximize = this.maximize.bind(this);\n this.onDrag = this.onDrag.bind(this);\n this.onDragStart = this.onDragStart.bind(this);\n this.onDragStop = this.onDragStop.bind(this);\n this.onResizeStart = this.onResizeStart.bind(this);\n }\n\n componentDidMount() {\n this.window.current.addEventListener(\"mousedown\", this.onResizeStart, false);\n this.titlebar.current.addEventListener(\"mousedown\", this.onDragStart, false);\n document.addEventListener(\"mouseup\", this.onDragStop, false);\n }\n\n onResizeStart() {\n this.currentWidth = this.window.current.offsetWidth;\n this.currentHeight = this.window.current.offsetHeight;\n }\n\n onDragStop() {\n document.removeEventListener(\"mousemove\", this.onDrag, true);\n const width = this.window.current.offsetWidth;\n const height = this.window.current.offsetHeight;\n\n if (width != this.currentWidth || height != this.currentHeight) {\n if (this.props.onResize) this.props.onResize();\n const left = parseInt(this.window.current.style.left);\n const top = parseInt(this.window.current.style.top);\n if (left + width >= this.maxX) this.window.current.style.width = this.maxX - left + \"px\";\n if (top + height >= this.maxY) this.window.current.style.height = this.maxY - top + \"px\";\n }\n\n this.currentWidth = width;\n this.currentHeight = height;\n }\n\n onDragStart(e) {\n const div = this.window.current;\n this.offY = e.clientY - parseInt(div.offsetTop);\n this.offX = e.clientX - parseInt(div.offsetLeft);\n document.addEventListener(\"mousemove\", this.onDrag, true);\n }\n\n onDrag(e) {\n const div = this.window.current;\n let newTop = e.clientY - this.offY;\n if (newTop <= this.minY) newTop = this.minY;\n if (newTop + this.currentHeight >= this.maxY) newTop = this.maxY - this.currentHeight;\n let newLeft = e.clientX - this.offX;\n if (newLeft <= this.minX) newLeft = this.minX;\n if (newLeft + this.currentWidth >= this.maxX) newLeft = this.maxX - this.currentWidth;\n div.style.top = newTop + \"px\";\n div.style.left = newLeft + \"px\";\n }\n\n componentWillUnmount() {\n this.titlebar.current.removeEventListener(\"mousedown\", this.onDragStart, false);\n document.removeEventListener(\"mouseup\", this.onDragStop, false);\n }\n\n render() {\n const top = this.props.center ? _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].height / 2 - this.props.height / 2 : this.props.top;\n const left = this.props.center ? _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].width / 2 - this.props.width / 2 : this.props.left; // console.log(top, left);\n\n const className = `floating-window${` ${this.props.className}` || \"\"}${this.props.resizable ? \" resizable\" : \"\"}${this.state.modalOpen ? \" modal-open\" : \"\"}`;\n const styles = {\n height: this.props.height,\n width: this.props.width,\n left: left || 0,\n top: top || 0\n };\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: this.props.id,\n className: className,\n ref: this.window,\n style: styles\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-titlebar\",\n ref: this.titlebar\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"title\"\n }, this.props.title), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-buttons\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"button maximize-button\",\n onClick: this.maximize\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_fullscreen__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n size: \"18px\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"button close-button\",\n onClick: this.close\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null)))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-content\"\n }, this.props.children));\n }\n\n async close() {\n let shouldClose = true;\n const confirmClose = typeof this.props.confirmClose == \"function\" ? this.props.confirmClose() : this.props.confirmClose;\n\n if (confirmClose) {\n this.setState({\n modalOpen: true\n });\n shouldClose = await this.confirmClose();\n this.setState({\n modalOpen: false\n });\n }\n\n if (this.props.close && shouldClose) this.props.close();\n }\n\n maximize() {\n this.window.current.style.width = \"100%\";\n this.window.current.style.height = \"100%\";\n if (this.props.onResize) this.props.onResize();\n const width = this.window.current.offsetWidth;\n const height = this.window.current.offsetHeight;\n const left = parseInt(this.window.current.style.left);\n const top = parseInt(this.window.current.style.top);\n const right = left + width;\n const bottom = top + height;\n if (bottom > this.maxY) this.window.current.style.top = this.maxY - height + \"px\";\n if (right > this.maxX) this.window.current.style.left = this.maxX - width + \"px\";\n }\n\n confirmClose() {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_4__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmAction, this.props.confirmationText, {\n danger: true,\n confirmText: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.close,\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Zsb2F0aW5nL3dpbmRvdy5qc3g/Y2YzZCJdLCJuYW1lcyI6WyJGbG9hdGluZ1dpbmRvdyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwibW9kYWxPcGVuIiwib2ZmWCIsIm9mZlkiLCJtYXhYIiwiU2NyZWVuIiwid2lkdGgiLCJtYXhZIiwiaGVpZ2h0IiwibWluWCIsIm1pblkiLCJ0aXRsZWJhciIsImNyZWF0ZVJlZiIsIndpbmRvdyIsImNsb3NlIiwiYmluZCIsIm1heGltaXplIiwib25EcmFnIiwib25EcmFnU3RhcnQiLCJvbkRyYWdTdG9wIiwib25SZXNpemVTdGFydCIsImNvbXBvbmVudERpZE1vdW50IiwiY3VycmVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkb2N1bWVudCIsImN1cnJlbnRXaWR0aCIsIm9mZnNldFdpZHRoIiwiY3VycmVudEhlaWdodCIsIm9mZnNldEhlaWdodCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvblJlc2l6ZSIsImxlZnQiLCJwYXJzZUludCIsInN0eWxlIiwidG9wIiwiZSIsImRpdiIsImNsaWVudFkiLCJvZmZzZXRUb3AiLCJjbGllbnRYIiwib2Zmc2V0TGVmdCIsIm5ld1RvcCIsIm5ld0xlZnQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbmRlciIsImNlbnRlciIsImNsYXNzTmFtZSIsInJlc2l6YWJsZSIsInN0eWxlcyIsImlkIiwidGl0bGUiLCJjaGlsZHJlbiIsInNob3VsZENsb3NlIiwiY29uZmlybUNsb3NlIiwic2V0U3RhdGUiLCJyaWdodCIsImJvdHRvbSIsIlByb21pc2UiLCJyZXNvbHZlIiwiTW9kYWxzIiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiU3RyaW5ncyIsImNvbmZpcm1BY3Rpb24iLCJjb25maXJtYXRpb25UZXh0IiwiZGFuZ2VyIiwiY29uZmlybVRleHQiLCJvbkNvbmZpcm0iLCJvbkNhbmNlbCJd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RCIsImZpbGUiOiIuL3NyYy91aS9mbG9hdGluZy93aW5kb3cuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBTY3JlZW4gZnJvbSBcIi4uLy4uL3N0cnVjdHMvc2NyZWVuXCI7XHJcbmltcG9ydCBDbG9zZUJ1dHRvbiBmcm9tIFwiLi4vaWNvbnMvY2xvc2VcIjtcclxuaW1wb3J0IE1heGltaXplSWNvbiBmcm9tIFwiLi4vaWNvbnMvZnVsbHNjcmVlblwiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi9tb2RhbHNcIjtcclxuXHJcbi8vIGNvbnN0IERyYWdnYWJsZSA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJEcmFnZ2FibGVcIik7XHJcbi8vIHtcclxuLy8gICAgIFwiZHJhZ0FueXdoZXJlXCI6IHRydWUsXHJcbi8vICAgICBcImNsYXNzTmFtZVwiOiBcInBpY3R1cmVJblBpY3R1cmVXaW5kb3ctMUI1cVNlXCIsXHJcbi8vICAgICBcIm1heFhcIjogMTk2OSxcclxuLy8gICAgIFwibWF4WVwiOiB0aGlzLm1heFksXHJcbi8vICAgICBcIm9uRHJhZ1N0YXJ0XCI6IFwixpIgKCkge31cIixcclxuLy8gICAgIFwib25EcmFnXCI6IFwixpIgKCkge31cIixcclxuLy8gICAgIFwib25EcmFnRW5kXCI6IFwixpIgKCkge31cIixcclxuLy8gICAgIFwiY2hpbGRyZW5cIjogXCI8ZGl2IC8+XCIsXHJcbi8vICAgICBcImluaXRpYWxYXCI6IDAsXHJcbi8vICAgICBcImluaXRpYWxZXCI6IDBcclxuLy8gICB9XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbG9hdGluZ1dpbmRvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7bW9kYWxPcGVuOiBmYWxzZX07XHJcblxyXG4gICAgICAgIHRoaXMub2ZmWCA9IDA7XHJcbiAgICAgICAgdGhpcy5vZmZZID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhYID0gdGhpcy5wcm9wcy5tYXhYIHx8IFNjcmVlbi53aWR0aDtcclxuICAgICAgICB0aGlzLm1heFkgPSB0aGlzLnByb3BzLm1heFkgfHwgU2NyZWVuLmhlaWdodDtcclxuICAgICAgICB0aGlzLm1pblggPSB0aGlzLnByb3BzLm1pblggfHwgMDtcclxuICAgICAgICB0aGlzLm1pblkgPSB0aGlzLnByb3BzLm1pblkgfHwgMDtcclxuXHJcbiAgICAgICAgdGhpcy50aXRsZWJhciA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmNsb3NlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5tYXhpbWl6ZSA9IHRoaXMubWF4aW1pemUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uRHJhZyA9IHRoaXMub25EcmFnLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkRyYWdTdGFydCA9IHRoaXMub25EcmFnU3RhcnQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uRHJhZ1N0b3AgPSB0aGlzLm9uRHJhZ1N0b3AuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uUmVzaXplU3RhcnQgPSB0aGlzLm9uUmVzaXplU3RhcnQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLndpbmRvdy5jdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdGhpcy5vblJlc2l6ZVN0YXJ0LCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy50aXRsZWJhci5jdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdGhpcy5vbkRyYWdTdGFydCwgZmFsc2UpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMub25EcmFnU3RvcCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVzaXplU3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSB0aGlzLndpbmRvdy5jdXJyZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IHRoaXMud2luZG93LmN1cnJlbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJhZ1N0b3AoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLm9uRHJhZywgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpbmRvdy5jdXJyZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMud2luZG93LmN1cnJlbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIGlmICh3aWR0aCAhPSB0aGlzLmN1cnJlbnRXaWR0aCB8fCBoZWlnaHQgIT0gdGhpcy5jdXJyZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm9uUmVzaXplKSB0aGlzLnByb3BzLm9uUmVzaXplKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBwYXJzZUludCh0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLmxlZnQpO1xyXG4gICAgICAgICAgICBjb25zdCB0b3AgPSBwYXJzZUludCh0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLnRvcCk7XHJcbiAgICAgICAgICAgIGlmIChsZWZ0ICsgd2lkdGggPj0gdGhpcy5tYXhYKSB0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLndpZHRoID0gKHRoaXMubWF4WCAtIGxlZnQpICsgXCJweFwiO1xyXG4gICAgICAgICAgICBpZiAodG9wICsgaGVpZ2h0ID49IHRoaXMubWF4WSkgdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS5oZWlnaHQgPSAodGhpcy5tYXhZIC0gdG9wKSArIFwicHhcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25EcmFnU3RhcnQoZSkge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IHRoaXMud2luZG93LmN1cnJlbnQ7XHJcbiAgICAgICAgdGhpcy5vZmZZID0gZS5jbGllbnRZIC0gcGFyc2VJbnQoZGl2Lm9mZnNldFRvcCk7XHJcbiAgICAgICAgdGhpcy5vZmZYID0gZS5jbGllbnRYIC0gcGFyc2VJbnQoZGl2Lm9mZnNldExlZnQpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbkRyYWcsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJhZyhlKSB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gdGhpcy53aW5kb3cuY3VycmVudDtcclxuICAgICAgICBsZXQgbmV3VG9wID0gKGUuY2xpZW50WSAtIHRoaXMub2ZmWSk7XHJcbiAgICAgICAgaWYgKG5ld1RvcCA8PSB0aGlzLm1pblkpIG5ld1RvcCA9IHRoaXMubWluWTtcclxuICAgICAgICBpZiAobmV3VG9wICsgdGhpcy5jdXJyZW50SGVpZ2h0ID49IHRoaXMubWF4WSkgbmV3VG9wID0gdGhpcy5tYXhZIC0gdGhpcy5jdXJyZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICBsZXQgbmV3TGVmdCA9IChlLmNsaWVudFggLSB0aGlzLm9mZlgpO1xyXG4gICAgICAgIGlmIChuZXdMZWZ0IDw9IHRoaXMubWluWCkgbmV3TGVmdCA9IHRoaXMubWluWDtcclxuICAgICAgICBpZiAobmV3TGVmdCArIHRoaXMuY3VycmVudFdpZHRoID49IHRoaXMubWF4WCkgbmV3TGVmdCA9IHRoaXMubWF4WCAtIHRoaXMuY3VycmVudFdpZHRoO1xyXG5cclxuICAgICAgICBkaXYuc3R5bGUudG9wID0gbmV3VG9wICsgXCJweFwiO1xyXG4gICAgICAgIGRpdi5zdHlsZS5sZWZ0ID0gbmV3TGVmdCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLnRpdGxlYmFyLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCB0aGlzLm9uRHJhZ1N0YXJ0LCBmYWxzZSk7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5vbkRyYWdTdG9wLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMucHJvcHMuY2VudGVyID8gKFNjcmVlbi5oZWlnaHQgLyAyKSAtICh0aGlzLnByb3BzLmhlaWdodCAvIDIpIDogdGhpcy5wcm9wcy50b3A7XHJcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMucHJvcHMuY2VudGVyID8gKFNjcmVlbi53aWR0aCAvIDIpIC0gKHRoaXMucHJvcHMud2lkdGggLyAyKSA6IHRoaXMucHJvcHMubGVmdCA7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codG9wLCBsZWZ0KTtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBgZmxvYXRpbmctd2luZG93JHtgICR7dGhpcy5wcm9wcy5jbGFzc05hbWV9YCB8fCBcIlwifSR7dGhpcy5wcm9wcy5yZXNpemFibGUgPyBcIiByZXNpemFibGVcIiA6IFwiXCJ9JHt0aGlzLnN0YXRlLm1vZGFsT3BlbiA/IFwiIG1vZGFsLW9wZW5cIiA6IFwiXCJ9YDtcclxuICAgICAgICBjb25zdCBzdHlsZXMgPSB7aGVpZ2h0OiB0aGlzLnByb3BzLmhlaWdodCwgd2lkdGg6IHRoaXMucHJvcHMud2lkdGgsIGxlZnQ6IGxlZnQgfHwgMCwgdG9wOiB0b3AgfHwgMH07XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgaWQ9e3RoaXMucHJvcHMuaWR9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSByZWY9e3RoaXMud2luZG93fSBzdHlsZT17c3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb2F0aW5nLXdpbmRvdy10aXRsZWJhclwiIHJlZj17dGhpcy50aXRsZWJhcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRpdGxlXCI+e3RoaXMucHJvcHMudGl0bGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb2F0aW5nLXdpbmRvdy1idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJ1dHRvbiBtYXhpbWl6ZS1idXR0b25cIiBvbkNsaWNrPXt0aGlzLm1heGltaXplfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWF4aW1pemVJY29uIHNpemU9XCIxOHB4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b24gY2xvc2UtYnV0dG9uXCIgb25DbGljaz17dGhpcy5jbG9zZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENsb3NlQnV0dG9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbG9hdGluZy13aW5kb3ctY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZSgpIHtcclxuICAgICAgICBsZXQgc2hvdWxkQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1DbG9zZSA9IHR5cGVvZih0aGlzLnByb3BzLmNvbmZpcm1DbG9zZSkgPT0gXCJmdW5jdGlvblwiID8gdGhpcy5wcm9wcy5jb25maXJtQ2xvc2UoKSA6IHRoaXMucHJvcHMuY29uZmlybUNsb3NlO1xyXG4gICAgICAgIGlmIChjb25maXJtQ2xvc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kYWxPcGVuOiB0cnVlfSk7XHJcbiAgICAgICAgICAgIHNob3VsZENsb3NlID0gYXdhaXQgdGhpcy5jb25maXJtQ2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kYWxPcGVuOiBmYWxzZX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jbG9zZSAmJiBzaG91bGRDbG9zZSkgdGhpcy5wcm9wcy5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG1heGltaXplKCkge1xyXG4gICAgICAgIHRoaXMud2luZG93LmN1cnJlbnQuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcclxuICAgICAgICB0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uUmVzaXplKSB0aGlzLnByb3BzLm9uUmVzaXplKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aW5kb3cuY3VycmVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLndpbmRvdy5jdXJyZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBjb25zdCBsZWZ0ID0gcGFyc2VJbnQodGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS5sZWZ0KTtcclxuICAgICAgICBjb25zdCB0b3AgPSBwYXJzZUludCh0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLnRvcCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKGJvdHRvbSA+IHRoaXMubWF4WSkgdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS50b3AgPSAodGhpcy5tYXhZIC0gaGVpZ2h0KSArIFwicHhcIjtcclxuICAgICAgICBpZiAocmlnaHQgPiB0aGlzLm1heFgpIHRoaXMud2luZG93LmN1cnJlbnQuc3R5bGUubGVmdCA9ICh0aGlzLm1heFggLSB3aWR0aCkgKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybUNsb3NlKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgTW9kYWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChTdHJpbmdzLk1vZGFscy5jb25maXJtQWN0aW9uLCB0aGlzLnByb3BzLmNvbmZpcm1hdGlvblRleHQsIHtcclxuICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBTdHJpbmdzLk1vZGFscy5jbG9zZSxcclxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge3Jlc29sdmUodHJ1ZSk7fSxcclxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7cmVzb2x2ZShmYWxzZSk7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/floating/window.jsx\n"); /***/ }), @@ -947,7 +935,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 Modals; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _structs_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../structs/string */ \"./src/structs/string.js\");\n\n\n\nclass Modals {\n static get shouldShowAddonErrors() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(\"settings\", \"addons\", \"addonErrors\");\n }\n\n static get ModalStack() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n }\n\n static get AlertModal() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByPrototypes(\"handleCancel\", \"handleSubmit\", \"handleMinorConfirm\");\n }\n\n static get TextElement() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Sizes\", \"Weights\");\n }\n\n static get ConfirmationModal() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.key && m.key() == \"confirm-modal\");\n }\n\n static get Markdown() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].findByDisplayName(\"Markdown\");\n }\n\n static default(title, content) {\n const modal = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(`
\n
\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 modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n document.querySelector(\"#app-mount\").append(modal);\n }\n\n static alert(title, content) {\n this.showConfirmationModal(title, content);\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. Everything 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 Markdown = this.Markdown;\n const ConfirmationModal = this.ConfirmationModal;\n const ModalStack = this.ModalStack;\n if (content instanceof _structs_string__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) content = content.toString();\n if (!this.ModalStack || !this.ConfirmationModal || !this.Markdown) return this.default(title, content);\n\n const emptyFunction = () => {};\n\n const {\n onConfirm = emptyFunction,\n onCancel = emptyFunction,\n confirmText = modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.okay,\n cancelText = modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.cancel,\n danger = false,\n key = undefined\n } = options;\n if (!Array.isArray(content)) content = [content];\n content = content.map(c => typeof c === \"string\" ? modules__WEBPACK_IMPORTED_MODULE_1__[\"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 showAddonErrors({\n plugins: pluginErrors = [],\n themes: themeErrors = []\n }) {\n if (!pluginErrors || !themeErrors || !this.shouldShowAddonErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n const modal = $(`
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.addonErrors}
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Panels.plugins}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Panels.themes}
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.name}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.message}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.error}
\n
\n
\n
\n\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n\n const generateTab = function (errors) {\n const container = $(`
`);\n\n for (const err of errors) {\n const error = $(`
\n
${err.name ? err.name : err.file}
\n
${err.message}
\n \n
`);\n container.append(error);\n\n if (err.error) {\n error.find(\"a\").on(\"click\", e => {\n e.preventDefault();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Logger\"].stacktrace(\"AddonError\", `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.find(\".tab-bar-item\").on(\"click\", e => {\n e.preventDefault();\n modal.find(\".tab-bar-item\").removeClass(\"selected\");\n $(e.target).addClass(\"selected\");\n modal.find(\".scroller\").empty().append(tabs[$(e.target).index()]);\n });\n modal.find(\".footer button\").on(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.find(\".bd-backdrop\").on(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.appendTo(\"#app-mount\");\n if (pluginErrors.length) modal.find(\".tab-bar-item\")[0].click();else modal.find(\".tab-bar-item\")[1].click();\n }\n\n static showChangelogModal(options = {}) {\n const ModalStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const ChangelogClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"fixed\", \"improved\");\n const TextElement = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].findByDisplayName(\"Text\");\n const FlexChild = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Child\");\n const Titles = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Tags\", \"default\");\n const Changelog = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.selectable == false);\n const MarkdownParser = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"defaultRules\", \"parse\");\n if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return modules__WEBPACK_IMPORTED_MODULE_1__[\"Logger\"].warn(\"Modals\", \"showChangelogModal missing modules\");\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${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].bbdVersion}`,\n footer\n } = options;\n const ce = modules__WEBPACK_IMPORTED_MODULE_1__[\"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 = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.displayName == \"Anchor\");\n const AnchorClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"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 modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].InviteActions.acceptInviteAndTransitionToInviteChannel(\"2HScm8j\");\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(Changelog, {\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL21vZGFscy5qcz8zYWIyIl0sIm5hbWVzIjpbIk1vZGFscyIsInNob3VsZFNob3dBZGRvbkVycm9ycyIsIlNldHRpbmdzIiwiZ2V0IiwiTW9kYWxTdGFjayIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsIkFsZXJ0TW9kYWwiLCJnZXRCeVByb3RvdHlwZXMiLCJUZXh0RWxlbWVudCIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZ2V0TW9kdWxlIiwibSIsImRlZmF1bHRQcm9wcyIsImtleSIsIk1hcmtkb3duIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJkZWZhdWx0IiwidGl0bGUiLCJjb250ZW50IiwibW9kYWwiLCJVdGlsaXRpZXMiLCJwYXJzZUhUTUwiLCJTdHJpbmdzIiwib2theSIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkQ2xhc3MiLCJzZXRUaW1lb3V0IiwicmVtb3ZlIiwiZG9jdW1lbnQiLCJhcHBlbmQiLCJhbGVydCIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsIm9wdGlvbnMiLCJGb3JtYXR0YWJsZVN0cmluZyIsInRvU3RyaW5nIiwiZW1wdHlGdW5jdGlvbiIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwiY2FuY2VsIiwiZGFuZ2VyIiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiYyIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsInB1c2giLCJoZWFkZXIiLCJjaGlsZHJlbiIsInJlZCIsInNob3dBZGRvbkVycm9ycyIsInBsdWdpbnMiLCJwbHVnaW5FcnJvcnMiLCJ0aGVtZXMiLCJ0aGVtZUVycm9ycyIsImxlbmd0aCIsIiQiLCJhZGRvbkVycm9ycyIsIlBhbmVscyIsIm5hbWUiLCJtZXNzYWdlIiwiZXJyb3IiLCJnZW5lcmF0ZVRhYiIsImVycm9ycyIsImNvbnRhaW5lciIsImVyciIsImZpbGUiLCJmaW5kIiwib24iLCJlIiwicHJldmVudERlZmF1bHQiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwidGFicyIsInJlbW92ZUNsYXNzIiwidGFyZ2V0IiwiZW1wdHkiLCJpbmRleCIsImFwcGVuZFRvIiwiY2xpY2siLCJzaG93Q2hhbmdlbG9nTW9kYWwiLCJDaGFuZ2Vsb2dDbGFzc2VzIiwiRmxleENoaWxkIiwiVGl0bGVzIiwiQ2hhbmdlbG9nIiwic2VsZWN0YWJsZSIsIk1hcmtkb3duUGFyc2VyIiwid2FybiIsImltYWdlIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2VzIiwic3VidGl0bGUiLCJDb25maWciLCJiYmRWZXJzaW9uIiwiZm9vdGVyIiwiY2UiLCJjaGFuZ2Vsb2dJdGVtcyIsInNyYyIsInBhcnNlIiwiZW50cnkiLCJ0eXBlIiwiYWRkZWQiLCJtYXJnaW4iLCJtYXJnaW5Ub3AiLCJjbGFzc05hbWUiLCJsaXN0IiwiaXRlbXMiLCJpIiwicmVuZGVySGVhZGVyIiwiQ2hpbGQiLCJncm93Iiwic2hyaW5rIiwidGFnIiwiVGFncyIsIkg0Iiwic2l6ZSIsIlNpemVzIiwiU01BTEwiLCJjb2xvciIsIkNvbG9ycyIsIlNUQU5EQVJEIiwiZGF0ZSIsInJlbmRlckZvb3RlciIsIkFuY2hvciIsImRpc3BsYXlOYW1lIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsInN0b3BQcm9wYWdhdGlvbiIsInBvcCIsIkRpc2NvcmRNb2R1bGVzIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJzdXBwb3J0TGluayIsIm9uQ2xpY2siLCJkZWZhdWx0Rm9vdGVyIiwib25TY3JvbGwiLCJfIiwib25DbG9zZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLE1BQU4sQ0FBYTtBQUV4QixhQUFXQyxxQkFBWCxHQUFtQztBQUFD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QWNBLFdBQU96SSxVQUFVLENBQUMrQyxJQUFYLENBQWdCc0MsU0FBaEIsRUFBMkI7QUFDOUJvQixlQUFTLEVBQUV2QixnQkFBZ0IsQ0FBQ2pCLFNBREU7QUFFOUJxQixnQkFBVSxFQUFFLElBRmtCO0FBRzlCb0QsY0FBUSxFQUFFQyxDQUFDLElBQUlBLENBSGU7QUFJOUJDLGFBQU8sRUFBRUQsQ0FBQyxJQUFJQSxDQUpnQjtBQUs5QjlCLGtCQUFZLEVBQUVBLFlBTGdCO0FBTTlCYyxrQkFBWSxFQUFFQSxZQU5nQjtBQU85QjFFLGNBQVEsRUFBRWdEO0FBUG9CLEtBQTNCLENBQVA7QUFTSDs7QUFqTnVCIiwiZmlsZSI6Ii4vc3JjL3VpL21vZGFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge0xvZ2dlciwgV2VicGFja01vZHVsZXMsIFV0aWxpdGllcywgUmVhY3QsIFNldHRpbmdzLCBTdHJpbmdzLCBET00sIERpc2NvcmRNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgRm9ybWF0dGFibGVTdHJpbmcgZnJvbSBcIi4uL3N0cnVjdHMvc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RhbHMge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgc2hvdWxkU2hvd0FkZG9uRXJyb3JzKCkge3JldHVybiBTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImFkZG9uc1wiLCBcImFkZG9uRXJyb3JzXCIpO31cclxuXHJcbiAgICBzdGF0aWMgZ2V0IE1vZGFsU3RhY2soKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTt9XHJcbiAgICBzdGF0aWMgZ2V0IEFsZXJ0TW9kYWwoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvdG90eXBlcyhcImhhbmRsZUNhbmNlbFwiLCBcImhhbmRsZVN1Ym1pdFwiLCBcImhhbmRsZU1pbm9yQ29uZmlybVwiKTt9XHJcbiAgICBzdGF0aWMgZ2V0IFRleHRFbGVtZW50KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiU2l6ZXNcIiwgXCJXZWlnaHRzXCIpO31cclxuICAgIHN0YXRpYyBnZXQgQ29uZmlybWF0aW9uTW9kYWwoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdFByb3BzICYmIG0ua2V5ICYmIG0ua2V5KCkgPT0gXCJjb25maXJtLW1vZGFsXCIpO31cclxuICAgIHN0YXRpYyBnZXQgTWFya2Rvd24oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWFya2Rvd25cIik7fVxyXG5cclxuICAgIHN0YXRpYyBkZWZhdWx0KHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSBVdGlsaXRpZXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgYmFja2Ryb3AtMXdybUtCXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgbW9kYWwtMVVHZG5SXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyIGlubmVyLTFKZUdWY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIGhlYWRlci0xUl9BakZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgZm9vdGVyLTJ5ZkNnWCBmb290ZXItM3JEV2RDIGZvb3Rlci0yZ0wxcHBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYmQtYnV0dG9uXCI+JHtTdHJpbmdzLk1vZGFscy5va2F5fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgbW9kYWwuYWRkQ2xhc3MoXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBtb2RhbC5hZGRDbGFzcyhcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhbGVydCh0aXRsZSwgY29udGVudCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5dGhpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgTWFya2Rvd24gPSB0aGlzLk1hcmtkb3duO1xyXG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gdGhpcy5Db25maXJtYXRpb25Nb2RhbDtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gdGhpcy5Nb2RhbFN0YWNrO1xyXG4gICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRm9ybWF0dGFibGVTdHJpbmcpIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLk1vZGFsU3RhY2sgfHwgIXRoaXMuQ29uZmlybWF0aW9uTW9kYWwgfHwgIXRoaXMuTWFya2Rvd24pIHJldHVybiB0aGlzLmRlZmF1bHQodGl0bGUsIGNvbnRlbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBlbXB0eUZ1bmN0aW9uID0gKCkgPT4ge307XHJcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBTdHJpbmdzLk1vZGFscy5va2F5LCBjYW5jZWxUZXh0ID0gU3RyaW5ncy5Nb2RhbHMuY2FuY2VsLCBkYW5nZXIgPSBmYWxzZSwga2V5ID0gdW5kZWZpbmVkfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250ZW50ID0gW2NvbnRlbnRdO1xyXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFya2Rvd24sIG51bGwsIGMpIDogYyk7XHJcblxyXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goQ29uZmlybWF0aW9uTW9kYWwsIHtcclxuICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IGNvbnRlbnQsXHJcbiAgICAgICAgICAgIHJlZDogZGFuZ2VyLFxyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXHJcbiAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtLFxyXG4gICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcclxuICAgICAgICB9LCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93QWRkb25FcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycyA9IFtdLCB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW119KSB7XHJcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzIHx8ICF0aGlzLnNob3VsZFNob3dBZGRvbkVycm9ycykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSAkKGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCBiYWNrZHJvcC0xd3JtS0JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsIGJkLWNvbnRlbnQtbW9kYWwgbW9kYWwtMVVHZG5SXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgaW5uZXItMUplR1ZjXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciBoZWFkZXItMVJfQWpGXCI+PGRpdiBjbGFzcz1cInRpdGxlXCI+JHtTdHJpbmdzLk1vZGFscy5hZGRvbkVycm9yc308L2Rpdj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyIFRPUFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj4ke1N0cmluZ3MuUGFuZWxzLnBsdWdpbnN9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPiR7U3RyaW5ncy5QYW5lbHMudGhlbWVzfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+JHtTdHJpbmdzLk1vZGFscy5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7U3RyaW5ncy5Nb2RhbHMubWVzc2FnZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+JHtTdHJpbmdzLk1vZGFscy5lcnJvcn08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIGZvb3Rlci0yeWZDZ1ggZm9vdGVyLTNyRFdkQyBmb290ZXItMmdMMXBwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYmQtYnV0dG9uXCI+JHtTdHJpbmdzLk1vZGFscy5va2F5fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG5cclxuICAgICAgICBjb25zdCBnZW5lcmF0ZVRhYiA9IGZ1bmN0aW9uKGVycm9ycykge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSAkKGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAkKGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtlcnIubWVzc2FnZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj48YSBjbGFzcz1cImVycm9yLWxpbmtcIiBocmVmPVwiXCI+JHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IubWVzc2FnZSA6IFwiXCJ9PC9hPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuZmluZChcImFcIikub24oXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5zdGFja3RyYWNlKFwiQWRkb25FcnJvclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XHJcblxyXG4gICAgICAgIG1vZGFsLmZpbmQoXCIudGFiLWJhci1pdGVtXCIpLm9uKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKFwiLnRhYi1iYXItaXRlbVwiKS5yZW1vdmVDbGFzcyhcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAkKGUudGFyZ2V0KS5hZGRDbGFzcyhcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKFwiLnNjcm9sbGVyXCIpLmVtcHR5KCkuYXBwZW5kKHRhYnNbJChlLnRhcmdldCkuaW5kZXgoKV0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBtb2RhbC5maW5kKFwiLmZvb3RlciBidXR0b25cIikub24oXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLmZpbmQoXCIuYmQtYmFja2Ryb3BcIikub24oXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLmFwcGVuZFRvKFwiI2FwcC1tb3VudFwiKTtcclxuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwuZmluZChcIi50YWItYmFyLWl0ZW1cIilbMF0uY2xpY2soKTtcclxuICAgICAgICBlbHNlIG1vZGFsLmZpbmQoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZml4ZWRcIiwgXCJpbXByb3ZlZFwiKTtcclxuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcclxuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQ2hpbGRcIik7XHJcbiAgICAgICAgY29uc3QgVGl0bGVzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xyXG4gICAgICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLnNlbGVjdGFibGUgPT0gZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRlZmF1bHRSdWxlc1wiLCBcInBhcnNlXCIpO1xyXG4gICAgICAgIGlmICghQ2hhbmdlbG9nIHx8ICFNb2RhbFN0YWNrIHx8ICFDaGFuZ2Vsb2dDbGFzc2VzIHx8ICFUZXh0RWxlbWVudCB8fCAhRmxleENoaWxkIHx8ICFUaXRsZXMgfHwgIU1hcmtkb3duUGFyc2VyKSByZXR1cm4gTG9nZ2VyLndhcm4oXCJNb2RhbHNcIiwgXCJzaG93Q2hhbmdlbG9nTW9kYWwgbWlzc2luZyBtb2R1bGVzXCIpO1xyXG4gICAgXHJcbiAgICAgICAgY29uc3Qge2ltYWdlID0gXCJodHRwczovL3JlcG9zaXRvcnktaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMDU0NzM1MzcvOTU3YjU0ODAtN2MyNi0xMWU5LTg0MDEtNTBmYTgyMGNiYWU1XCIsIGRlc2NyaXB0aW9uID0gXCJcIiwgY2hhbmdlcyA9IFtdLCB0aXRsZSA9IFwiQmFuZGFnZWRCRFwiLCBzdWJ0aXRsZSA9IGB2JHtDb25maWcuYmJkVmVyc2lvbn1gLCBmb290ZXJ9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBjZSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nSXRlbXMgPSBbY2UoXCJpbWdcIiwge3NyYzogaW1hZ2V9KV07XHJcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA/IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gOiBDaGFuZ2Vsb2dDbGFzc2VzLmFkZGVkO1xyXG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XHJcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7Y2xhc3NOYW1lOiBgJHt0eXBlfSAke21hcmdpbn1gLH0sIGVudHJ5LnRpdGxlKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XHJcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcclxuICAgICAgICAgICAgICAgIGNlKFRpdGxlcy5kZWZhdWx0LCB7dGFnOiBUaXRsZXMuVGFncy5INH0sIHRpdGxlKSxcclxuICAgICAgICAgICAgICAgIGNlKFRleHRFbGVtZW50LCB7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkQsIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5kYXRlfSwgc3VidGl0bGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgICAgIERpc2NvcmRNb2R1bGVzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gY2UoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IGNlKFwiYVwiLCB7Y2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCwgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LCB7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkR9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xyXG4gICAgICAgIH07XHJcbiAgICBcclxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKENoYW5nZWxvZywge1xyXG4gICAgICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuY29udGFpbmVyLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxyXG4gICAgICAgICAgICBvbkNsb3NlOiBfID0+IF8sXHJcbiAgICAgICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxyXG4gICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcclxuICAgICAgICAgICAgY2hpbGRyZW46IGNoYW5nZWxvZ0l0ZW1zXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/modals.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Modals; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _structs_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../structs/string */ \"./src/structs/string.js\");\n\n\n\nclass Modals {\n static get shouldShowAddonErrors() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(\"settings\", \"addons\", \"addonErrors\");\n }\n\n static get ModalStack() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n }\n\n static get AlertModal() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByPrototypes(\"handleCancel\", \"handleSubmit\", \"handleMinorConfirm\");\n }\n\n static get TextElement() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Sizes\", \"Weights\");\n }\n\n static get ConfirmationModal() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.key && m.key() == \"confirm-modal\");\n }\n\n static get Markdown() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].findByDisplayName(\"Markdown\");\n }\n\n static default(title, content) {\n const modal = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
\n
\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 modal.classList.add(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n modal.classList.add(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n document.querySelector(\"#app-mount\").append(modal);\n }\n\n static alert(title, content) {\n this.showConfirmationModal(title, content);\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. Everything 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 Markdown = this.Markdown;\n const ConfirmationModal = this.ConfirmationModal;\n const ModalStack = this.ModalStack;\n if (content instanceof _structs_string__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) content = content.toString();\n if (!this.ModalStack || !this.ConfirmationModal || !this.Markdown) return this.default(title, content);\n\n const emptyFunction = () => {};\n\n const {\n onConfirm = emptyFunction,\n onCancel = emptyFunction,\n confirmText = modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.okay,\n cancelText = modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.cancel,\n danger = false,\n key = undefined\n } = options;\n if (!Array.isArray(content)) content = [content];\n content = content.map(c => typeof c === \"string\" ? modules__WEBPACK_IMPORTED_MODULE_1__[\"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 showAddonErrors({\n plugins: pluginErrors = [],\n themes: themeErrors = []\n }) {\n if (!pluginErrors || !themeErrors || !this.shouldShowAddonErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n const modal = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.addonErrors}
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Panels.plugins}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Panels.themes}
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.name}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.message}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.error}
\n
\n
\n
\n\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n\n const generateTab = function (errors) {\n const container = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
`);\n\n for (const err of errors) {\n const error = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].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 modules__WEBPACK_IMPORTED_MODULE_1__[\"Logger\"].stacktrace(\"AddonError\", `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) modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].removeClass(selected, \"selected\");\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].addClass(e.target, \"selected\");\n const scroller = modal.querySelector(\".scroller\");\n scroller.innerHTML = \"\";\n scroller.append(tabs[modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].index(e.target)]);\n }));\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].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 = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const ChangelogClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"fixed\", \"improved\");\n const TextElement = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].findByDisplayName(\"Text\");\n const FlexChild = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Child\");\n const Titles = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Tags\", \"default\");\n const Changelog = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.selectable == false);\n const MarkdownParser = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"defaultRules\", \"parse\");\n if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return modules__WEBPACK_IMPORTED_MODULE_1__[\"Logger\"].warn(\"Modals\", \"showChangelogModal missing modules\");\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${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].bbdVersion}`,\n footer\n } = options;\n const ce = modules__WEBPACK_IMPORTED_MODULE_1__[\"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 = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.displayName == \"Anchor\");\n const AnchorClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"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 modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].InviteActions.acceptInviteAndTransitionToInviteChannel(\"2HScm8j\");\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(Changelog, {\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL21vZGFscy5qcz8zYWIyIl0sIm5hbWVzIjpbIk1vZGFscyIsInNob3VsZFNob3dBZGRvbkVycm9ycyIsIlNldHRpbmdzIiwiZ2V0IiwiTW9kYWxTdGFjayIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsIkFsZXJ0TW9kYWwiLCJnZXRCeVByb3RvdHlwZXMiLCJUZXh0RWxlbWVudCIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZ2V0TW9kdWxlIiwibSIsImRlZmF1bHRQcm9wcyIsImtleSIsIk1hcmtkb3duIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJkZWZhdWx0IiwidGl0bGUiLCJjb250ZW50IiwibW9kYWwiLCJET00iLCJjcmVhdGVFbGVtZW50IiwiU3RyaW5ncyIsIm9rYXkiLCJxdWVyeVNlbGVjdG9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsYXNzTGlzdCIsImFkZCIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJkb2N1bWVudCIsImFwcGVuZCIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwib3B0aW9ucyIsIkZvcm1hdHRhYmxlU3RyaW5nIiwidG9TdHJpbmciLCJlbXB0eUZ1bmN0aW9uIiwib25Db25maXJtIiwib25DYW5jZWwiLCJjb25maXJtVGV4dCIsImNhbmNlbFRleHQiLCJjYW5jZWwiLCJkYW5nZXIiLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJjIiwiUmVhY3QiLCJwdXNoIiwiaGVhZGVyIiwiY2hpbGRyZW4iLCJyZWQiLCJzaG93QWRkb25FcnJvcnMiLCJwbHVnaW5zIiwicGx1Z2luRXJyb3JzIiwidGhlbWVzIiwidGhlbWVFcnJvcnMiLCJsZW5ndGgiLCJhZGRvbkVycm9ycyIsIlBhbmVscyIsIm5hbWUiLCJtZXNzYWdlIiwiZXJyb3IiLCJnZW5lcmF0ZVRhYiIsImVycm9ycyIsImNvbnRhaW5lciIsImVyciIsImZpbGUiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImVsIiwiZSIsInByZXZlbnREZWZhdWx0IiwiTG9nZ2VyIiwic3RhY2t0cmFjZSIsInRhYnMiLCJzZWxlY3RlZCIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJ0YXJnZXQiLCJzY3JvbGxlciIsImlubmVySFRNTCIsImluZGV4IiwicXVlcnkiLCJjbGljayIsInNob3dDaGFuZ2Vsb2dNb2RhbCIsIkNoYW5nZWxvZ0NsYXNzZXMiLCJGbGV4Q2hpbGQiLCJUaXRsZXMiLCJDaGFuZ2Vsb2ciLCJzZWxlY3RhYmxlIiwiTWFya2Rvd25QYXJzZXIiLCJ3YXJuIiwiaW1hZ2UiLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJzdWJ0aXRsZSIsIkNvbmZpZyIsImJiZFZlcnNpb24iLCJmb290ZXIiLCJjZSIsImNoYW5nZWxvZ0l0ZW1zIiwic3JjIiwicGFyc2UiLCJlbnRyeSIsInR5cGUiLCJhZGRlZCIsIm1hcmdpbiIsIm1hcmdpblRvcCIsImNsYXNzTmFtZSIsImxpc3QiLCJpdGVtcyIsImkiLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJzaXplIiwiU2l6ZXMiLCJTTUFMTCIsImNvbG9yIiwiQ29sb3JzIiwiU1RBTkRBUkQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiQW5jaG9yIiwiZGlzcGxheU5hbWUiLCJBbmNob3JDbGFzc2VzIiwiYW5jaG9yIiwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlciIsImpvaW5TdXBwb3J0U2VydmVyIiwic3RvcFByb3BhZ2F0aW9uIiwicG9wIiwiRGlzY29yZE1vZHVsZXMiLCJJbnZpdGVBY3Rpb25zIiwiYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbCIsInN1cHBvcnRMaW5rIiwib25DbGljayIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIl8iLCJvbkNsb3NlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRWUsTUFB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QUE1RTtBQUErRVEsZUFBTyxFQUFFUDtBQUF4RixPQUFOLEVBQWtILDBCQUFsSCxDQUF0RztBQUNBLFlBQU1RLGFBQWEsR0FBR3pDLEVBQUUsQ0FBQzlGLFdBQUQsRUFBYztBQUFDa0gsWUFBSSxFQUFFbEgsV0FBVyxDQUFDbUgsS0FBWixDQUFrQkMsS0FBekI7QUFBZ0NDLGFBQUssRUFBRXJILFdBQVcsQ0FBQ3NILE1BQVosQ0FBbUJDO0FBQTFELE9BQWQsRUFBbUYsZ0JBQW5GLEVBQXFHYyxXQUFyRyxDQUF4QjtBQUNBLGFBQU92QyxFQUFFLENBQUNiLFNBQVMsQ0FBQzJCLEtBQVgsRUFBa0I7QUFBQ0MsWUFBSSxFQUFFLENBQVA7QUFBVUMsY0FBTSxFQUFFO0FBQWxCLE9BQWxCLEVBQXdDakIsTUFBTSxHQUFHQSxNQUFILEdBQVkwQyxhQUExRCxDQUFUO0FBQ0gsS0FaRDs7QUFjQSxXQUFPNUksVUFBVSxDQUFDK0MsSUFBWCxDQUFnQnlDLFNBQWhCLEVBQTJCO0FBQzlCb0IsZUFBUyxFQUFFdkIsZ0JBQWdCLENBQUNyQixTQURFO0FBRTlCeUIsZ0JBQVUsRUFBRSxJQUZrQjtBQUc5Qm9ELGNBQVEsRUFBRUMsQ0FBQyxJQUFJQSxDQUhlO0FBSTlCQyxhQUFPLEVBQUVELENBQUMsSUFBSUEsQ0FKZ0I7QUFLOUI5QixrQkFBWSxFQUFFQSxZQUxnQjtBQU05QmMsa0JBQVksRUFBRUEsWUFOZ0I7QUFPOUI3RSxjQUFRLEVBQUVtRDtBQVBvQixLQUEzQixDQUFQO0FBU0g7O0FBcE51QiIsImZpbGUiOiIuL3NyYy91aS9tb2RhbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IHtMb2dnZXIsIFdlYnBhY2tNb2R1bGVzLCBSZWFjdCwgU2V0dGluZ3MsIFN0cmluZ3MsIERPTSwgRGlzY29yZE1vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBGb3JtYXR0YWJsZVN0cmluZyBmcm9tIFwiLi4vc3RydWN0cy9zdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZGFscyB7XHJcblxyXG4gICAgc3RhdGljIGdldCBzaG91bGRTaG93QWRkb25FcnJvcnMoKSB7cmV0dXJuIFNldHRpbmdzLmdldChcInNldHRpbmdzXCIsIFwiYWRkb25zXCIsIFwiYWRkb25FcnJvcnNcIik7fVxyXG5cclxuICAgIHN0YXRpYyBnZXQgTW9kYWxTdGFjaygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO31cclxuICAgIHN0YXRpYyBnZXQgQWxlcnRNb2RhbCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm90b3R5cGVzKFwiaGFuZGxlQ2FuY2VsXCIsIFwiaGFuZGxlU3VibWl0XCIsIFwiaGFuZGxlTWlub3JDb25maXJtXCIpO31cclxuICAgIHN0YXRpYyBnZXQgVGV4dEVsZW1lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJTaXplc1wiLCBcIldlaWdodHNcIik7fVxyXG4gICAgc3RhdGljIGdldCBDb25maXJtYXRpb25Nb2RhbCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5rZXkgJiYgbS5rZXkoKSA9PSBcImNvbmZpcm0tbW9kYWxcIik7fVxyXG4gICAgc3RhdGljIGdldCBNYXJrZG93bigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNYXJrZG93blwiKTt9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHQodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgYmFja2Ryb3AtMXdybUtCXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgbW9kYWwtMVVHZG5SXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyIGlubmVyLTFKZUdWY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIGhlYWRlci0xUl9BakZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgZm9vdGVyLTJ5ZkNnWCBmb290ZXItM3JEV2RDIGZvb3Rlci0yZ0wxcHBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYmQtYnV0dG9uXCI+JHtTdHJpbmdzLk1vZGFscy5va2F5fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZChcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYWxlcnQodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgICAgICB0aGlzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeXRoaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IE1hcmtkb3duID0gdGhpcy5NYXJrZG93bjtcclxuICAgICAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IHRoaXMuQ29uZmlybWF0aW9uTW9kYWw7XHJcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IHRoaXMuTW9kYWxTdGFjaztcclxuICAgICAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIEZvcm1hdHRhYmxlU3RyaW5nKSBjb250ZW50ID0gY29udGVudC50b1N0cmluZygpO1xyXG4gICAgICAgIGlmICghdGhpcy5Nb2RhbFN0YWNrIHx8ICF0aGlzLkNvbmZpcm1hdGlvbk1vZGFsIHx8ICF0aGlzLk1hcmtkb3duKSByZXR1cm4gdGhpcy5kZWZhdWx0KHRpdGxlLCBjb250ZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgZW1wdHlGdW5jdGlvbiA9ICgpID0+IHt9O1xyXG4gICAgICAgIGNvbnN0IHtvbkNvbmZpcm0gPSBlbXB0eUZ1bmN0aW9uLCBvbkNhbmNlbCA9IGVtcHR5RnVuY3Rpb24sIGNvbmZpcm1UZXh0ID0gU3RyaW5ncy5Nb2RhbHMub2theSwgY2FuY2VsVGV4dCA9IFN0cmluZ3MuTW9kYWxzLmNhbmNlbCwgZGFuZ2VyID0gZmFsc2UsIGtleSA9IHVuZGVmaW5lZH0gPSBvcHRpb25zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgY29udGVudCA9IFtjb250ZW50XTtcclxuICAgICAgICBjb250ZW50ID0gY29udGVudC5tYXAoYyA9PiB0eXBlb2YoYykgPT09IFwic3RyaW5nXCIgPyBSZWFjdC5jcmVhdGVFbGVtZW50KE1hcmtkb3duLCBudWxsLCBjKSA6IGMpO1xyXG5cclxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKENvbmZpcm1hdGlvbk1vZGFsLCB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogdGl0bGUsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50LFxyXG4gICAgICAgICAgICByZWQ6IGRhbmdlcixcclxuICAgICAgICAgICAgY29uZmlybVRleHQ6IGNvbmZpcm1UZXh0LFxyXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0LFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcclxuICAgICAgICAgICAgb25DYW5jZWw6IG9uQ2FuY2VsXHJcbiAgICAgICAgfSwga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2hvd0FkZG9uRXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMgPSBbXSwgdGhlbWVzOiB0aGVtZUVycm9ycyA9IFtdfSkge1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzIHx8ICF0aGVtZUVycm9ycyB8fCAhdGhpcy5zaG91bGRTaG93QWRkb25FcnJvcnMpIHJldHVybjtcclxuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycy5sZW5ndGggJiYgIXRoZW1lRXJyb3JzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wIGJhY2tkcm9wLTF3cm1LQlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgYmQtY29udGVudC1tb2RhbCBtb2RhbC0xVUdkblJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciBpbm5lci0xSmVHVmNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIGhlYWRlci0xUl9BakZcIj48ZGl2IGNsYXNzPVwidGl0bGVcIj4ke1N0cmluZ3MuTW9kYWxzLmFkZG9uRXJyb3JzfTwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXIgVE9QXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPiR7U3RyaW5ncy5QYW5lbHMucGx1Z2luc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+JHtTdHJpbmdzLlBhbmVscy50aGVtZXN9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj4ke1N0cmluZ3MuTW9kYWxzLm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtTdHJpbmdzLk1vZGFscy5tZXNzYWdlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj4ke1N0cmluZ3MuTW9kYWxzLmVycm9yfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgZm9vdGVyLTJ5ZkNnWCBmb290ZXItM3JEV2RDIGZvb3Rlci0yZ0wxcHBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJiZC1idXR0b25cIj4ke1N0cmluZ3MuTW9kYWxzLm9rYXl9PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlVGFiID0gZnVuY3Rpb24oZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj4ke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+PGEgY2xhc3M9XCJlcnJvci1saW5rXCIgaHJlZj1cIlwiPiR7ZXJyLmVycm9yID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBcIlwifTwvYT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nZ2VyLnN0YWNrdHJhY2UoXCJBZGRvbkVycm9yXCIsIGBFcnJvciBkZXRhaWxzIGZvciAke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX0uYCwgZXJyLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XHJcblxyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSBET00ucmVtb3ZlQ2xhc3Moc2VsZWN0ZWQsIFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhlLnRhcmdldCwgXCJzZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xyXG4gICAgICAgICAgICBzY3JvbGxlci5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQodGFic1tET00uaW5kZXgoZS50YXJnZXQpXSk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xyXG4gICAgICAgIGlmIChwbHVnaW5FcnJvcnMubGVuZ3RoKSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbVwiKS5jbGljaygpO1xyXG4gICAgICAgIGVsc2UgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIilbMV0uY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XHJcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmaXhlZFwiLCBcImltcHJvdmVkXCIpO1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IEZsZXhDaGlsZCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJDaGlsZFwiKTtcclxuICAgICAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVGFnc1wiLCBcImRlZmF1bHRcIik7XHJcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgTWFya2Rvd25QYXJzZXIgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZGVmYXVsdFJ1bGVzXCIsIFwicGFyc2VcIik7XHJcbiAgICAgICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybiBMb2dnZXIud2FybihcIk1vZGFsc1wiLCBcInNob3dDaGFuZ2Vsb2dNb2RhbCBtaXNzaW5nIG1vZHVsZXNcIik7XHJcbiAgICBcclxuICAgICAgICBjb25zdCB7aW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgZGVzY3JpcHRpb24gPSBcIlwiLCBjaGFuZ2VzID0gW10sIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIHN1YnRpdGxlID0gYHYke0NvbmZpZy5iYmRWZXJzaW9ufWAsIGZvb3Rlcn0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGNlID0gUmVhY3QuY3JlYXRlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dJdGVtcyA9IFtjZShcImltZ1wiLCB7c3JjOiBpbWFnZX0pXTtcclxuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbmdlcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNoYW5nZXNbY107XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IGMgPT0gMCA/IENoYW5nZWxvZ0NsYXNzZXMubWFyZ2luVG9wIDogXCJcIjtcclxuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcImgxXCIsIHtjbGFzc05hbWU6IGAke3R5cGV9ICR7bWFyZ2lufWAsfSwgZW50cnkudGl0bGUpKTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcclxuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LFxyXG4gICAgICAgICAgICAgICAgY2UoVGl0bGVzLmRlZmF1bHQsIHt0YWc6IFRpdGxlcy5UYWdzLkg0fSwgdGl0bGUpLFxyXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQsIHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRCwgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmRhdGV9LCBzdWJ0aXRsZSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIikgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07XHJcbiAgICAgICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgY2xpY2suc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMkhTY204alwiKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Rm9vdGVyID0gY2UoVGV4dEVsZW1lbnQsIHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSwgZm9vdGVyID8gZm9vdGVyIDogZGVmYXVsdEZvb3Rlcik7XHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goQ2hhbmdlbG9nLCB7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIG9uU2Nyb2xsOiBfID0+IF8sXHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcclxuICAgICAgICAgICAgcmVuZGVySGVhZGVyOiByZW5kZXJIZWFkZXIsXHJcbiAgICAgICAgICAgIHJlbmRlckZvb3RlcjogcmVuZGVyRm9vdGVyLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/modals.js\n"); /***/ }), @@ -971,7 +959,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 PublicServers; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings/title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _card__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./card */ \"./src/ui/publicservers/card.jsx\");\n/* harmony import */ var _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../structs/psconnection */ \"./src/structs/psconnection.js\");\n/* harmony import */ var _settings_components_search__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../settings/components/search */ \"./src/ui/settings/components/search.jsx\");\n\n\n\n\n\nconst SettingsView = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"SettingsView\");\nclass PublicServers extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n get categoryButtons() {\n return [\"All\", \"FPS Games\", \"MMO Games\", \"Strategy Games\", \"MOBA Games\", \"RPG Games\", \"Tabletop Games\", \"Sandbox Games\", \"Simulation Games\", \"Music\", \"Community\", \"Language\", \"Programming\", \"Other\"];\n }\n\n constructor(props) {\n super(props);\n this.state = {\n category: \"All\",\n query: \"\",\n loading: true,\n user: null,\n results: {\n servers: [],\n size: 0,\n from: 0,\n total: 0,\n next: null\n }\n };\n this.changeCategory = this.changeCategory.bind(this);\n this.searchKeyDown = this.searchKeyDown.bind(this);\n this.connect = this.connect.bind(this);\n this.loadNextPage = this.loadNextPage.bind(this);\n }\n\n componentDidMount() {\n this.checkConnection();\n }\n\n async checkConnection() {\n const userData = await _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].checkConnection();\n\n if (!userData) {\n return this.setState({\n loading: true,\n user: null\n });\n }\n\n this.setState({\n user: userData\n });\n this.search();\n }\n\n async connect() {\n await _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].connect();\n this.checkConnection();\n }\n\n searchKeyDown(e) {\n if (this.state.loading || e.which !== 13) return;\n this.search(e.target.value);\n }\n\n async search(term = \"\", from = 0) {\n this.setState({\n query: term,\n loading: true\n });\n const results = await _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].search({\n term,\n category: this.state.category == \"All\" ? \"\" : this.state.category,\n from\n });\n\n if (!results) {\n return this.setState({\n results: {\n servers: [],\n size: 0,\n from: 0,\n total: 0,\n next: null\n }\n });\n }\n\n this.setState({\n loading: false,\n results\n });\n }\n\n async changeCategory(id) {\n if (this.state.loading) return;\n await new Promise(resolve => this.setState({\n category: id\n }, resolve));\n this.search();\n }\n\n loadNextPage() {\n if (this.state.loading) return;\n this.search(this.state.query, this.state.results.next);\n }\n\n async join(id, native = false) {\n return await _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].join(id, native);\n }\n\n get searchBox() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_components_search__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onKeyDown: this.searchKeyDown,\n placeholder: `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.search}...`\n });\n }\n\n get title() {\n if (!this.state.user) return modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.notConnected;\n if (this.state.loading) return `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.loading}...`;\n const start = this.state.results.from + 1;\n const total = this.state.results.total;\n const end = this.state.results.next ? this.state.results.next : total;\n let title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.results.format({\n start,\n end,\n total,\n category: this.state.category\n });\n if (this.state.query) title += \" \" + modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.query.format({\n query: this.state.query\n });\n return title;\n }\n\n get content() {\n const connectButton = this.state.user ? null : {\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.connect,\n onClick: this.connect\n };\n const pinned = this.state.category == \"All\" || !this.state.user ? this.bdServer : null;\n const servers = this.state.results.servers.map(server => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: server.identifier,\n server: server,\n joined: _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].hasJoined(server.identifier),\n defaultAvatar: _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getDefaultAvatar\n });\n });\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: this.title,\n button: connectButton\n }), pinned, servers, this.state.results.next ? this.nextButton : null, this.state.results.servers.length > 0 && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: this.title\n })];\n }\n\n get nextButton() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"bd-button bd-button-next\",\n onClick: this.loadNextPage\n }, this.state.loading ? modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.loading : modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.loadMore);\n }\n\n get connection() {\n const {\n user\n } = this.state;\n if (!user) return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-connection\"\n });\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-connection\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-footnote\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.connection.format(user)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"bd-button bd-button-reconnect\",\n onClick: this.connect\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.reconnect));\n }\n\n get bdServer() {\n const server = {\n name: \"BetterDiscord\",\n online: \"7500+\",\n members: \"20000+\",\n categories: [\"community\", \"programming\", \"support\"],\n description: \"Official BetterDiscord server for plugins, themes, support, etc\",\n identifier: \"86004744966914048\",\n iconUrl: \"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp\",\n nativejoin: true,\n invite_code: \"0Tmfo5ZbORCRqbAd\",\n pinned: true\n };\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n server: server,\n pinned: true,\n joined: _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].hasJoined(server.identifier),\n defaultAvatar: _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getDefaultAvatar\n });\n }\n\n render() {\n const categories = this.categoryButtons.map(name => ({\n section: name,\n label: name,\n element: () => this.content\n }));\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(SettingsView, {\n onClose: this.props.close,\n onSetSection: this.changeCategory,\n section: this.state.category,\n sections: [{\n section: \"HEADER\",\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.search\n }, {\n section: \"CUSTOM\",\n element: () => this.searchBox\n }, {\n section: \"HEADER\",\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.categories\n }, ...categories, {\n section: \"DIVIDER\"\n }, {\n section: \"HEADER\",\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n href: \"https://discordservers.com\",\n target: \"_blank\"\n }, \"DiscordServers.com\")\n }, {\n section: \"DIVIDER\"\n }, {\n section: \"CUSTOM\",\n element: () => this.connection\n }],\n theme: \"dark\"\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvbWVudS5qcz85YWNkIl0sIm5hbWVzIjpbIlNldHRpbmdzVmlldyIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlEaXNwbGF5TmFtZSIsIlB1YmxpY1NlcnZlcnMiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNhdGVnb3J5QnV0dG9ucyIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsImNhdGVnb3J5IiwicXVlcnkiLCJsb2FkaW5nIiwidXNlciIsInJlc3VsdHMiLCJzZXJ2ZXJzIiwic2l6ZSIsImZyb20iLCJ0b3RhbCIsIm5leHQiLCJjaGFuZ2VDYXRlZ29yeSIsImJpbmQiLCJzZWFyY2hLZXlEb3duIiwiY29ubmVjdCIsImxvYWROZXh0UGFnZSIsImNvbXBvbmVudERpZE1vdW50IiwiY2hlY2tDb25uZWN0aW9uIiwidXNlckRhdGEiLCJDb25uZWN0aW9uIiwic2V0U3RhdGUiLCJzZWFyY2giLCJlIiwid2hpY2giLCJ0YXJnZXQiLCJ2YWx1ZSIsInRlcm0iLCJpZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiam9pbiIsIm5hdGl2ZSIsInNlYXJjaEJveCIsIlN0cmluZ3MiLCJ0aXRsZSIsIm5vdENvbm5lY3RlZCIsInN0YXJ0IiwiZW5kIiwiZm9ybWF0IiwiY29udGVudCIsImNvbm5lY3RCdXR0b24iLCJvbkNsaWNrIiwicGlubmVkIiwiYmRTZXJ2ZXIiLCJtYXAiLCJzZXJ2ZXIiLCJjcmVhdGVFbGVtZW50IiwiU2VydmVyQ2FyZCIsImtleSIsImlkZW50aWZpZXIiLCJqb2luZWQiLCJoYXNKb2luZWQiLCJkZWZhdWx0QXZhdGFyIiwiZ2V0RGVmYXVsdEF2YXRhciIsIlNldHRpbmdzVGl0bGUiLCJ0ZXh0IiwiYnV0dG9uIiwibmV4dEJ1dHRvbiIsImxlbmd0aCIsInR5cGUiLCJjbGFzc05hbWUiLCJsb2FkTW9yZSIsImNvbm5lY3Rpb24iLCJyZWNvbm5lY3QiLCJuYW1lIiwib25saW5lIiwibWVtYmVycyIsImNhdGVnb3JpZXMiLCJkZXNjcmlwdGlvbiIsImljb25VcmwiLCJuYXRpdmVqb2luIiwiaW52aXRlX2NvZGUiLCJyZW5kZXIiLCJzZWN0aW9uIiwibGFiZWwiLCJlbGVtZW50Iiwib25DbG9zZSIsImNsb3NlIiwib25TZXRTZWN0aW9uIiwic2VjdGlvbnMiLCJocmVmIiwidGhlbWUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFlBQVksR0FBR0Msc0RBQWMsQ0FBQ0MsZ0JBQWYsQ0FBZ0MsY0FBaEMsQ0FBckI7QUFFZSxNQUFNQyxhQUFOLFNBQTRCQyw2Q0FBSyxDQUFDQyxTQUFsQyxDQUE0QztBQUV2RCxNQUFJQyxlQUFKLEdBQXNCO0FBQ2xCLFdBQU8sQ0FBQyxLQUFELEVBQVEsV0FBUixFQUFxQixXQUFyQixFQUFrQyxnQkFBbEMsRUFBb0QsWUFBcEQsRUFBa0UsV0FBbEUsRUFBK0UsZ0JBQS9FLEVBQWlHLGVBQWpHLEVBQWtILGtCQUFsSCxFQUFzSSxPQUF0SSxFQUErSSxXQUEvSSxFQUE0SixVQUE1SixFQUF3SyxhQUF4SyxFQUF1TCxPQUF2TCxDQUFQO0FBQ0g7O0FBRURDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxjQUFRLEVBQUUsS0FERDtBQUVUQyxXQUFLLEVBQUUsRUFGRTtBQUdUQyxhQUFPLEVBQUUsSUFIQTtBQUlUQyxVQUFJLEVBQUUsSUFKRztBQUtUQyxhQUFPLEVBQUU7QUFDTEMsZUFBTyxFQUFFLEVBREo7QUFFTEMsWUFBSSxFQUFFLENBRkQ7QUFHTEMsWUFBSSxFQUFFLENBSEQ7QUFJTEMsYUFBSyxFQUFFLENBSkY7QUFLTEMsWUFBSSxFQUFFO0FBTEQ7QUFMQSxLQUFiO0FBY0EsU0FBS0MsY0FBTCxHQUFzQixLQUFLQSxjQUFMLENBQW9CQyxJQUFwQixDQUF5QixJQUF6QixDQUF0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QUFFLEtBQUt6RSxLQUFMLENBQVdDLFFBSGlCO0FBSXJDOEUsY0FBUSxFQUFFLENBQ047QUFBQ04sZUFBTyxFQUFFLFFBQVY7QUFBb0JDLGFBQUssRUFBRXpDLCtDQUFPLENBQUN2QyxhQUFSLENBQXNCMkI7QUFBakQsT0FETSxFQUVOO0FBQUNvRCxlQUFPLEVBQUUsUUFBVjtBQUFvQkUsZUFBTyxFQUFFLE1BQU0sS0FBSzNDO0FBQXhDLE9BRk0sRUFHTjtBQUFDeUMsZUFBTyxFQUFFLFFBQVY7QUFBb0JDLGFBQUssRUFBRXpDLCtDQUFPLENBQUN2QyxhQUFSLENBQXNCeUU7QUFBakQsT0FITSxFQUlOLEdBQUdBLFVBSkcsRUFLTjtBQUFDTSxlQUFPLEVBQUU7QUFBVixPQUxNLEVBTU47QUFBQ0EsZUFBTyxFQUFFLFFBQVY7QUFBb0JDLGFBQUssRUFBRS9FLDZDQUFLLENBQUNtRCxhQUFOLENBQW9CLEdBQXBCLEVBQXlCO0FBQUNrQyxjQUFJLEVBQUUsNEJBQVA7QUFBcUN4RCxnQkFBTSxFQUFFO0FBQTdDLFNBQXpCLEVBQWlGLG9CQUFqRjtBQUEzQixPQU5NLEVBT047QUFBQ2lELGVBQU8sRUFBRTtBQUFWLE9BUE0sRUFRTjtBQUFDQSxlQUFPLEVBQUUsUUFBVjtBQUFvQkUsZUFBTyxFQUFFLE1BQU0sS0FBS2I7QUFBeEMsT0FSTSxDQUoyQjtBQWNyQ21CLFdBQUssRUFBRTtBQWQ4QixLQUFsQyxDQUFQO0FBZ0JIOztBQWpLc0QiLCJmaWxlIjoiLi9zcmMvdWkvcHVibGljc2VydmVycy9tZW51LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgV2VicGFja01vZHVsZXMsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5ncy90aXRsZVwiO1xyXG5pbXBvcnQgU2VydmVyQ2FyZCBmcm9tIFwiLi9jYXJkXCI7XHJcbmltcG9ydCBDb25uZWN0aW9uIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL3BzY29ubmVjdGlvblwiO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gXCIuLi9zZXR0aW5ncy9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuY29uc3QgU2V0dGluZ3NWaWV3ID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlNldHRpbmdzVmlld1wiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1YmxpY1NlcnZlcnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGdldCBjYXRlZ29yeUJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeTogXCJBbGxcIixcclxuICAgICAgICAgICAgcXVlcnk6IFwiXCIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIHJlc3VsdHM6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogMCxcclxuICAgICAgICAgICAgICAgIGZyb206IDAsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgICAgIG5leHQ6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlEb3duID0gdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ID0gdGhpcy5jb25uZWN0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2FkTmV4dFBhZ2UgPSB0aGlzLmxvYWROZXh0UGFnZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVzZXJEYXRhID0gYXdhaXQgQ29ubmVjdGlvbi5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICBpZiAoIXVzZXJEYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKHtsb2FkaW5nOiB0cnVlLCB1c2VyOiBudWxsfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3VzZXI6IHVzZXJEYXRhfSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb25uZWN0KCkge1xyXG4gICAgICAgIGF3YWl0IENvbm5lY3Rpb24uY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoS2V5RG93bihlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZWFyY2godGVybSA9IFwiXCIsIGZyb20gPSAwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cXVlcnk6IHRlcm0sIGxvYWRpbmc6IHRydWV9KTtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgQ29ubmVjdGlvbi5zZWFyY2goe3Rlcm0sIGNhdGVnb3J5OiB0aGlzLnN0YXRlLmNhdGVnb3J5ID09IFwiQWxsXCIgPyBcIlwiIDogdGhpcy5zdGF0ZS5jYXRlZ29yeSwgZnJvbX0pO1xyXG4gICAgICAgIGlmICghcmVzdWx0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7cmVzdWx0czoge1xyXG4gICAgICAgICAgICAgICAgc2VydmVyczogW10sXHJcbiAgICAgICAgICAgICAgICBzaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgZnJvbTogMCxcclxuICAgICAgICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgICAgICAgICAgbmV4dDogbnVsbFxyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2xvYWRpbmc6IGZhbHNlLCByZXN1bHRzfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hhbmdlQ2F0ZWdvcnkoaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnNldFN0YXRlKHtjYXRlZ29yeTogaWR9LCByZXNvbHZlKSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV4dFBhZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoKHRoaXMuc3RhdGUucXVlcnksIHRoaXMuc3RhdGUucmVzdWx0cy5uZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBqb2luKGlkLCBuYXRpdmUgPSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBDb25uZWN0aW9uLmpvaW4oaWQsIG5hdGl2ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlYXJjaEJveCgpIHtcclxuICAgICAgICByZXR1cm4gPFNlYXJjaCBvbktleURvd249e3RoaXMuc2VhcmNoS2V5RG93bn0gcGxhY2Vob2xkZXI9e2Ake1N0cmluZ3MuUHVibGljU2VydmVycy5zZWFyY2h9Li4uYH0gLz47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRpdGxlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS51c2VyKSByZXR1cm4gU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLm5vdENvbm5lY3RlZDtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5sb2FkaW5nKSByZXR1cm4gYCR7U3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLmxvYWRpbmd9Li4uYDtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhdGUucmVzdWx0cy5mcm9tICsgMTtcclxuICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMuc3RhdGUucmVzdWx0cy50b3RhbDtcclxuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnN0YXRlLnJlc3VsdHMubmV4dCA/IHRoaXMuc3RhdGUucmVzdWx0cy5uZXh0IDogdG90YWw7XHJcbiAgICAgICAgbGV0IHRpdGxlID0gU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLnJlc3VsdHMuZm9ybWF0KHtzdGFydCwgZW5kLCB0b3RhbCwgY2F0ZWdvcnk6IHRoaXMuc3RhdGUuY2F0ZWdvcnl9KTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5xdWVyeSkgdGl0bGUgKz0gXCIgXCIgKyBTdHJpbmdzLlB1YmxpY1NlcnZlcnMucXVlcnkuZm9ybWF0KHtxdWVyeTogdGhpcy5zdGF0ZS5xdWVyeX0pO1xyXG4gICAgICAgIHJldHVybiB0aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGVudCgpIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0QnV0dG9uID0gdGhpcy5zdGF0ZS51c2VyID8gbnVsbCA6IHt0aXRsZTogU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLmNvbm5lY3QsIG9uQ2xpY2s6IHRoaXMuY29ubmVjdH07XHJcbiAgICAgICAgY29uc3QgcGlubmVkID0gdGhpcy5zdGF0ZS5jYXRlZ29yeSA9PSBcIkFsbFwiIHx8ICF0aGlzLnN0YXRlLnVzZXIgPyB0aGlzLmJkU2VydmVyIDogbnVsbDtcclxuICAgICAgICBjb25zdCBzZXJ2ZXJzID0gdGhpcy5zdGF0ZS5yZXN1bHRzLnNlcnZlcnMubWFwKChzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge2tleTogc2VydmVyLmlkZW50aWZpZXIsIHNlcnZlcjogc2VydmVyLCBqb2luZWQ6IENvbm5lY3Rpb24uaGFzSm9pbmVkKHNlcnZlci5pZGVudGlmaWVyKSwgZGVmYXVsdEF2YXRhcjogQ29ubmVjdGlvbi5nZXREZWZhdWx0QXZhdGFyfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIFtSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aGlzLnRpdGxlLCBidXR0b246IGNvbm5lY3RCdXR0b259KSxcclxuICAgICAgICAgICAgcGlubmVkLFxyXG4gICAgICAgICAgICBzZXJ2ZXJzLFxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdHMubmV4dCA/IHRoaXMubmV4dEJ1dHRvbiA6IG51bGwsXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUucmVzdWx0cy5zZXJ2ZXJzLmxlbmd0aCA+IDAgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGhpcy50aXRsZX0pXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmV4dEJ1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJkLWJ1dHRvbiBiZC1idXR0b24tbmV4dFwiLCBvbkNsaWNrOiB0aGlzLmxvYWROZXh0UGFnZX0sIHRoaXMuc3RhdGUubG9hZGluZyA/IFN0cmluZ3MuUHVibGljU2VydmVycy5sb2FkaW5nIDogU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLmxvYWRNb3JlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCB7dXNlcn0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgIGlmICghdXNlcikgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWNvbm5lY3Rpb25cIn0pO1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jb25uZWN0aW9uXCJ9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtZm9vdG5vdGVcIn0sIFN0cmluZ3MuUHVibGljU2VydmVycy5jb25uZWN0aW9uLmZvcm1hdCh1c2VyKSksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmQtYnV0dG9uLXJlY29ubmVjdFwiLCBvbkNsaWNrOiB0aGlzLmNvbm5lY3R9LCBTdHJpbmdzLlB1YmxpY1NlcnZlcnMucmVjb25uZWN0KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJkU2VydmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlcnZlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJEaXNjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCI3NTAwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjIwMDAwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIEJldHRlckRpc2NvcmQgc2VydmVyIGZvciBwbHVnaW5zLCB0aGVtZXMsIHN1cHBvcnQsIGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvODYwMDQ3NDQ5NjY5MTQwNDgvMjkyZTdmNmJmZmYyYjcxZGZkMTNlNTA4YTg1OWFlZGQud2VicFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCIwVG1mbzVaYk9SQ1JxYkFkXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyLCBwaW5uZWQ6IHRydWUsIGpvaW5lZDogQ29ubmVjdGlvbi5oYXNKb2luZWQoc2VydmVyLmlkZW50aWZpZXIpLCBkZWZhdWx0QXZhdGFyOiBDb25uZWN0aW9uLmdldERlZmF1bHRBdmF0YXJ9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcChuYW1lID0+ICh7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiAoKSA9PiB0aGlzLmNvbnRlbnRcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVmlldywge1xyXG4gICAgICAgICAgICBvbkNsb3NlOiB0aGlzLnByb3BzLmNsb3NlLFxyXG4gICAgICAgICAgICBvblNldFNlY3Rpb246IHRoaXMuY2hhbmdlQ2F0ZWdvcnksXHJcbiAgICAgICAgICAgIHNlY3Rpb246IHRoaXMuc3RhdGUuY2F0ZWdvcnksXHJcbiAgICAgICAgICAgIHNlY3Rpb25zOiBbXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJIRUFERVJcIiwgbGFiZWw6IFN0cmluZ3MuUHVibGljU2VydmVycy5zZWFyY2h9LFxyXG4gICAgICAgICAgICAgICAge3NlY3Rpb246IFwiQ1VTVE9NXCIsIGVsZW1lbnQ6ICgpID0+IHRoaXMuc2VhcmNoQm94fSxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkhFQURFUlwiLCBsYWJlbDogU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLmNhdGVnb3JpZXN9LFxyXG4gICAgICAgICAgICAgICAgLi4uY2F0ZWdvcmllcyxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkRJVklERVJcIn0sXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJIRUFERVJcIiwgbGFiZWw6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtocmVmOiBcImh0dHBzOi8vZGlzY29yZHNlcnZlcnMuY29tXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sIFwiRGlzY29yZFNlcnZlcnMuY29tXCIpfSxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkRJVklERVJcIn0sXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJDVVNUT01cIiwgZWxlbWVudDogKCkgPT4gdGhpcy5jb25uZWN0aW9ufVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB0aGVtZTogXCJkYXJrXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/publicservers/menu.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PublicServers; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings/title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _card__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./card */ \"./src/ui/publicservers/card.jsx\");\n/* harmony import */ var _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../structs/psconnection */ \"./src/structs/psconnection.js\");\n/* harmony import */ var _settings_components_search__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../settings/components/search */ \"./src/ui/settings/components/search.jsx\");\n\n\n\n\n\nconst SettingsView = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"SettingsView\");\nclass PublicServers extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n get categoryButtons() {\n return [\"All\", \"FPS Games\", \"MMO Games\", \"Strategy Games\", \"MOBA Games\", \"RPG Games\", \"Tabletop Games\", \"Sandbox Games\", \"Simulation Games\", \"Music\", \"Community\", \"Language\", \"Programming\", \"Other\"];\n }\n\n constructor(props) {\n super(props);\n this.state = {\n category: \"All\",\n query: \"\",\n loading: true,\n user: null,\n results: {\n servers: [],\n size: 0,\n from: 0,\n total: 0,\n next: null\n }\n };\n this.changeCategory = this.changeCategory.bind(this);\n this.searchKeyDown = this.searchKeyDown.bind(this);\n this.connect = this.connect.bind(this);\n this.loadNextPage = this.loadNextPage.bind(this);\n this.join = this.join.bind(this);\n }\n\n componentDidMount() {\n this.checkConnection();\n }\n\n async checkConnection() {\n const userData = await _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].checkConnection();\n\n if (!userData) {\n return this.setState({\n loading: true,\n user: null\n });\n }\n\n this.setState({\n user: userData\n });\n this.search();\n }\n\n async connect() {\n await _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].connect();\n this.checkConnection();\n }\n\n searchKeyDown(e) {\n if (this.state.loading || e.which !== 13) return;\n this.search(e.target.value);\n }\n\n async search(term = \"\", from = 0) {\n this.setState({\n query: term,\n loading: true\n });\n const results = await _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].search({\n term,\n category: this.state.category == \"All\" ? \"\" : this.state.category,\n from\n });\n\n if (!results) {\n return this.setState({\n results: {\n servers: [],\n size: 0,\n from: 0,\n total: 0,\n next: null\n }\n });\n }\n\n this.setState({\n loading: false,\n results\n });\n }\n\n async changeCategory(id) {\n if (this.state.loading) return;\n await new Promise(resolve => this.setState({\n category: id\n }, resolve));\n this.search();\n }\n\n loadNextPage() {\n if (this.state.loading) return;\n this.search(this.state.query, this.state.results.next);\n }\n\n async join(id, native = false) {\n return await _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].join(id, native);\n }\n\n get searchBox() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_components_search__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onKeyDown: this.searchKeyDown,\n placeholder: `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.search}...`\n });\n }\n\n get title() {\n if (!this.state.user) return modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.notConnected;\n if (this.state.loading) return `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.loading}...`;\n const start = this.state.results.from + 1;\n const total = this.state.results.total;\n const end = this.state.results.next ? this.state.results.next : total;\n let title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.results.format({\n start,\n end,\n total,\n category: this.state.category\n });\n if (this.state.query) title += \" \" + modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.query.format({\n query: this.state.query\n });\n return title;\n }\n\n get content() {\n const connectButton = this.state.user ? null : {\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.connect,\n onClick: this.connect\n };\n const pinned = this.state.category == \"All\" || !this.state.user ? this.bdServer : null;\n const servers = this.state.results.servers.map(server => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: server.identifier,\n server: server,\n joined: _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].hasJoined(server.identifier),\n join: this.join,\n defaultAvatar: _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getDefaultAvatar\n });\n });\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: this.title,\n button: connectButton\n }), pinned, servers, this.state.results.next ? this.nextButton : null, this.state.results.servers.length > 0 && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: this.title\n })];\n }\n\n get nextButton() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"bd-button bd-button-next\",\n onClick: this.loadNextPage\n }, this.state.loading ? modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.loading : modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.loadMore);\n }\n\n get connection() {\n const {\n user\n } = this.state;\n if (!user) return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-connection\"\n });\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-connection\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-footnote\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.connection.format(user)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"bd-button bd-button-reconnect\",\n onClick: this.connect\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.reconnect));\n }\n\n get bdServer() {\n const server = {\n name: \"BetterDiscord\",\n online: \"7500+\",\n members: \"20000+\",\n categories: [\"community\", \"programming\", \"support\"],\n description: \"Official BetterDiscord server for plugins, themes, support, etc\",\n identifier: \"86004744966914048\",\n iconUrl: \"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp\",\n nativejoin: true,\n invite_code: \"0Tmfo5ZbORCRqbAd\",\n pinned: true\n };\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n server: server,\n pinned: true,\n joined: _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].hasJoined(server.identifier),\n defaultAvatar: _structs_psconnection__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getDefaultAvatar\n });\n }\n\n render() {\n const categories = this.categoryButtons.map(name => ({\n section: name,\n label: name,\n element: () => this.content\n }));\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(SettingsView, {\n onClose: this.props.close,\n onSetSection: this.changeCategory,\n section: this.state.category,\n sections: [{\n section: \"HEADER\",\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.search\n }, {\n section: \"CUSTOM\",\n element: () => this.searchBox\n }, {\n section: \"HEADER\",\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].PublicServers.categories\n }, ...categories, {\n section: \"DIVIDER\"\n }, {\n section: \"HEADER\",\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n href: \"https://discordservers.com\",\n target: \"_blank\"\n }, \"DiscordServers.com\")\n }, {\n section: \"DIVIDER\"\n }, {\n section: \"CUSTOM\",\n element: () => this.connection\n }],\n theme: \"dark\"\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvbWVudS5qcz85YWNkIl0sIm5hbWVzIjpbIlNldHRpbmdzVmlldyIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlEaXNwbGF5TmFtZSIsIlB1YmxpY1NlcnZlcnMiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNhdGVnb3J5QnV0dG9ucyIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsImNhdGVnb3J5IiwicXVlcnkiLCJsb2FkaW5nIiwidXNlciIsInJlc3VsdHMiLCJzZXJ2ZXJzIiwic2l6ZSIsImZyb20iLCJ0b3RhbCIsIm5leHQiLCJjaGFuZ2VDYXRlZ29yeSIsImJpbmQiLCJzZWFyY2hLZXlEb3duIiwiY29ubmVjdCIsImxvYWROZXh0UGFnZSIsImpvaW4iLCJjb21wb25lbnREaWRNb3VudCIsImNoZWNrQ29ubmVjdGlvbiIsInVzZXJEYXRhIiwiQ29ubmVjdGlvbiIsInNldFN0YXRlIiwic2VhcmNoIiwiZSIsIndoaWNoIiwidGFyZ2V0IiwidmFsdWUiLCJ0ZXJtIiwiaWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm5hdGl2ZSIsInNlYXJjaEJveCIsIlN0cmluZ3MiLCJ0aXRsZSIsIm5vdENvbm5lY3RlZCIsInN0YXJ0IiwiZW5kIiwiZm9ybWF0IiwiY29udGVudCIsImNvbm5lY3RCdXR0b24iLCJvbkNsaWNrIiwicGlubmVkIiwiYmRTZXJ2ZXIiLCJtYXAiLCJzZXJ2ZXIiLCJjcmVhdGVFbGVtZW50IiwiU2VydmVyQ2FyZCIsImtleSIsImlkZW50aWZpZXIiLCJqb2luZWQiLCJoYXNKb2luZWQiLCJkZWZhdWx0QXZhdGFyIiwiZ2V0RGVmYXVsdEF2YXRhciIsIlNldHRpbmdzVGl0bGUiLCJ0ZXh0IiwiYnV0dG9uIiwibmV4dEJ1dHRvbiIsImxlbmd0aCIsInR5cGUiLCJjbGFzc05hbWUiLCJsb2FkTW9yZSIsImNvbm5lY3Rpb24iLCJyZWNvbm5lY3QiLCJuYW1lIiwib25saW5lIiwibWVtYmVycyIsImNhdGVnb3JpZXMiLCJkZXNjcmlwdGlvbiIsImljb25VcmwiLCJuYXRpdmVqb2luIiwiaW52aXRlX2NvZGUiLCJyZW5kZXIiLCJzZWN0aW9uIiwibGFiZWwiLCJlbGVtZW50Iiwib25DbG9zZSIsImNsb3NlIiwib25TZXRTZWN0aW9uIiwic2VjdGlvbnMiLCJocmVmIiwidGhlbWUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFlBQVksR0FBR0Msc0RBQWMsQ0FBQ0MsZ0JBQWYsQ0FBZ0MsY0FBaEMsQ0FBckI7QUFFZSxNQUFNQyxhQUFOLFNBQTRCQyw2Q0FBSyxDQUFDQyxTQUFsQyxDQUE0QztBQUV2RCxNQUFJQyxlQUFKLEdBQXNCO0FBQ2xCLFdBQU8sQ0FBQyxLQUFELEVBQVEsV0FBUixFQUFxQixXQUFyQixFQUFrQyxnQkFBbEMsRUFBb0QsWUFBcEQsRUFBa0UsV0FBbEUsRUFBK0UsZ0JBQS9FLEVBQWlHLGVBQWpHLEVBQWtILGtCQUFsSCxFQUFzSSxPQUF0SSxFQUErSSxXQUEvSSxFQUE0SixVQUE1SixFQUF3SyxhQUF4SyxFQUF1TCxPQUF2TCxDQUFQO0FBQ0g7O0FBRURDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxjQUFRLEVBQUUsS0FERDtBQUVUQyxXQUFLLEVBQUUsRUFGRTtBQUdUQyxhQUFPLEVBQUUsSUFIQTtBQUlUQyxVQUFJLEVBQUUsSUFKRztBQUtUQyxhQUFPLEVBQUU7QUFDTEMsZUFBTyxFQUFFLEVBREo7QUFFTEMsWUFBSSxFQUFFLENBRkQ7QUFHTEMsWUFBSSxFQUFFLENBSEQ7QUFJTEMsYUFBSyxFQUFFLENBSkY7QUFLTEMsWUFBSSxFQUFFO0FBTEQ7QUFMQSxLQUFiO0FBY0EsU0FBS0MsY0FBTCxHQUFzQixLQUFLQSxjQUFMLENBQW9CQyxJQUFwQixDQUF5QixJQUF6QixDQUF0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QztBQUNyQ3FGLGFBQU8sRUFBRSxLQUFLN0UsS0FBTCxDQUFXOEUsS0FEaUI7QUFFckNDLGtCQUFZLEVBQUUsS0FBS25FLGNBRmtCO0FBR3JDOEQsYUFBTyxFQUFFLEtBQUt6RSxLQUFMLENBQVdDLFFBSGlCO0FBSXJDOEUsY0FBUSxFQUFFLENBQ047QUFBQ04sZUFBTyxFQUFFLFFBQVY7QUFBb0JDLGFBQUssRUFBRXpDLCtDQUFPLENBQUN2QyxhQUFSLENBQXNCNEI7QUFBakQsT0FETSxFQUVOO0FBQUNtRCxlQUFPLEVBQUUsUUFBVjtBQUFvQkUsZUFBTyxFQUFFLE1BQU0sS0FBSzNDO0FBQXhDLE9BRk0sRUFHTjtBQUFDeUMsZUFBTyxFQUFFLFFBQVY7QUFBb0JDLGFBQUssRUFBRXpDLCtDQUFPLENBQUN2QyxhQUFSLENBQXNCeUU7QUFBakQsT0FITSxFQUlOLEdBQUdBLFVBSkcsRUFLTjtBQUFDTSxlQUFPLEVBQUU7QUFBVixPQUxNLEVBTU47QUFBQ0EsZUFBTyxFQUFFLFFBQVY7QUFBb0JDLGFBQUssRUFBRS9FLDZDQUFLLENBQUNtRCxhQUFOLENBQW9CLEdBQXBCLEVBQXlCO0FBQUNrQyxjQUFJLEVBQUUsNEJBQVA7QUFBcUN2RCxnQkFBTSxFQUFFO0FBQTdDLFNBQXpCLEVBQWlGLG9CQUFqRjtBQUEzQixPQU5NLEVBT047QUFBQ2dELGVBQU8sRUFBRTtBQUFWLE9BUE0sRUFRTjtBQUFDQSxlQUFPLEVBQUUsUUFBVjtBQUFvQkUsZUFBTyxFQUFFLE1BQU0sS0FBS2I7QUFBeEMsT0FSTSxDQUoyQjtBQWNyQ21CLFdBQUssRUFBRTtBQWQ4QixLQUFsQyxDQUFQO0FBZ0JIOztBQWxLc0QiLCJmaWxlIjoiLi9zcmMvdWkvcHVibGljc2VydmVycy9tZW51LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgV2VicGFja01vZHVsZXMsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5ncy90aXRsZVwiO1xyXG5pbXBvcnQgU2VydmVyQ2FyZCBmcm9tIFwiLi9jYXJkXCI7XHJcbmltcG9ydCBDb25uZWN0aW9uIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL3BzY29ubmVjdGlvblwiO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gXCIuLi9zZXR0aW5ncy9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuY29uc3QgU2V0dGluZ3NWaWV3ID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlNldHRpbmdzVmlld1wiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1YmxpY1NlcnZlcnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGdldCBjYXRlZ29yeUJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeTogXCJBbGxcIixcclxuICAgICAgICAgICAgcXVlcnk6IFwiXCIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIHJlc3VsdHM6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogMCxcclxuICAgICAgICAgICAgICAgIGZyb206IDAsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgICAgIG5leHQ6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlEb3duID0gdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ID0gdGhpcy5jb25uZWN0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2FkTmV4dFBhZ2UgPSB0aGlzLmxvYWROZXh0UGFnZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuam9pbiA9IHRoaXMuam9pbi5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVzZXJEYXRhID0gYXdhaXQgQ29ubmVjdGlvbi5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICBpZiAoIXVzZXJEYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKHtsb2FkaW5nOiB0cnVlLCB1c2VyOiBudWxsfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3VzZXI6IHVzZXJEYXRhfSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb25uZWN0KCkge1xyXG4gICAgICAgIGF3YWl0IENvbm5lY3Rpb24uY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoS2V5RG93bihlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZWFyY2godGVybSA9IFwiXCIsIGZyb20gPSAwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cXVlcnk6IHRlcm0sIGxvYWRpbmc6IHRydWV9KTtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgQ29ubmVjdGlvbi5zZWFyY2goe3Rlcm0sIGNhdGVnb3J5OiB0aGlzLnN0YXRlLmNhdGVnb3J5ID09IFwiQWxsXCIgPyBcIlwiIDogdGhpcy5zdGF0ZS5jYXRlZ29yeSwgZnJvbX0pO1xyXG4gICAgICAgIGlmICghcmVzdWx0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7cmVzdWx0czoge1xyXG4gICAgICAgICAgICAgICAgc2VydmVyczogW10sXHJcbiAgICAgICAgICAgICAgICBzaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgZnJvbTogMCxcclxuICAgICAgICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgICAgICAgICAgbmV4dDogbnVsbFxyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2xvYWRpbmc6IGZhbHNlLCByZXN1bHRzfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hhbmdlQ2F0ZWdvcnkoaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnNldFN0YXRlKHtjYXRlZ29yeTogaWR9LCByZXNvbHZlKSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV4dFBhZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoKHRoaXMuc3RhdGUucXVlcnksIHRoaXMuc3RhdGUucmVzdWx0cy5uZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBqb2luKGlkLCBuYXRpdmUgPSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBDb25uZWN0aW9uLmpvaW4oaWQsIG5hdGl2ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlYXJjaEJveCgpIHtcclxuICAgICAgICByZXR1cm4gPFNlYXJjaCBvbktleURvd249e3RoaXMuc2VhcmNoS2V5RG93bn0gcGxhY2Vob2xkZXI9e2Ake1N0cmluZ3MuUHVibGljU2VydmVycy5zZWFyY2h9Li4uYH0gLz47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRpdGxlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS51c2VyKSByZXR1cm4gU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLm5vdENvbm5lY3RlZDtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5sb2FkaW5nKSByZXR1cm4gYCR7U3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLmxvYWRpbmd9Li4uYDtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhdGUucmVzdWx0cy5mcm9tICsgMTtcclxuICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMuc3RhdGUucmVzdWx0cy50b3RhbDtcclxuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnN0YXRlLnJlc3VsdHMubmV4dCA/IHRoaXMuc3RhdGUucmVzdWx0cy5uZXh0IDogdG90YWw7XHJcbiAgICAgICAgbGV0IHRpdGxlID0gU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLnJlc3VsdHMuZm9ybWF0KHtzdGFydCwgZW5kLCB0b3RhbCwgY2F0ZWdvcnk6IHRoaXMuc3RhdGUuY2F0ZWdvcnl9KTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5xdWVyeSkgdGl0bGUgKz0gXCIgXCIgKyBTdHJpbmdzLlB1YmxpY1NlcnZlcnMucXVlcnkuZm9ybWF0KHtxdWVyeTogdGhpcy5zdGF0ZS5xdWVyeX0pO1xyXG4gICAgICAgIHJldHVybiB0aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGVudCgpIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0QnV0dG9uID0gdGhpcy5zdGF0ZS51c2VyID8gbnVsbCA6IHt0aXRsZTogU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLmNvbm5lY3QsIG9uQ2xpY2s6IHRoaXMuY29ubmVjdH07XHJcbiAgICAgICAgY29uc3QgcGlubmVkID0gdGhpcy5zdGF0ZS5jYXRlZ29yeSA9PSBcIkFsbFwiIHx8ICF0aGlzLnN0YXRlLnVzZXIgPyB0aGlzLmJkU2VydmVyIDogbnVsbDtcclxuICAgICAgICBjb25zdCBzZXJ2ZXJzID0gdGhpcy5zdGF0ZS5yZXN1bHRzLnNlcnZlcnMubWFwKChzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge2tleTogc2VydmVyLmlkZW50aWZpZXIsIHNlcnZlcjogc2VydmVyLCBqb2luZWQ6IENvbm5lY3Rpb24uaGFzSm9pbmVkKHNlcnZlci5pZGVudGlmaWVyKSwgam9pbjogdGhpcy5qb2luLCBkZWZhdWx0QXZhdGFyOiBDb25uZWN0aW9uLmdldERlZmF1bHRBdmF0YXJ9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHRoaXMudGl0bGUsIGJ1dHRvbjogY29ubmVjdEJ1dHRvbn0pLFxyXG4gICAgICAgICAgICBwaW5uZWQsXHJcbiAgICAgICAgICAgIHNlcnZlcnMsXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUucmVzdWx0cy5uZXh0ID8gdGhpcy5uZXh0QnV0dG9uIDogbnVsbCxcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHRzLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aGlzLnRpdGxlfSldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuZXh0QnV0dG9uKCkge1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtYnV0dG9uIGJkLWJ1dHRvbi1uZXh0XCIsIG9uQ2xpY2s6IHRoaXMubG9hZE5leHRQYWdlfSwgdGhpcy5zdGF0ZS5sb2FkaW5nID8gU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLmxvYWRpbmcgOiBTdHJpbmdzLlB1YmxpY1NlcnZlcnMubG9hZE1vcmUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHt1c2VyfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgaWYgKCF1c2VyKSByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY29ubmVjdGlvblwifSk7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWNvbm5lY3Rpb25cIn0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1mb290bm90ZVwifSwgU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLmNvbm5lY3Rpb24uZm9ybWF0KHVzZXIpKSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJkLWJ1dHRvbiBiZC1idXR0b24tcmVjb25uZWN0XCIsIG9uQ2xpY2s6IHRoaXMuY29ubmVjdH0sIFN0cmluZ3MuUHVibGljU2VydmVycy5yZWNvbm5lY3QpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYmRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjc1MDArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiMjAwMDArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHBsdWdpbnMsIHRoZW1lcywgc3VwcG9ydCwgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9pY29ucy84NjAwNDc0NDk2NjkxNDA0OC8yOTJlN2Y2YmZmZjJiNzFkZmQxM2U1MDhhODU5YWVkZC53ZWJwXCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZSwgam9pbmVkOiBDb25uZWN0aW9uLmhhc0pvaW5lZChzZXJ2ZXIuaWRlbnRpZmllciksIGRlZmF1bHRBdmF0YXI6IENvbm5lY3Rpb24uZ2V0RGVmYXVsdEF2YXRhcn0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5jYXRlZ29yeUJ1dHRvbnMubWFwKG5hbWUgPT4gKHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IG5hbWUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogbmFtZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6ICgpID0+IHRoaXMuY29udGVudFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NWaWV3LCB7XHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IHRoaXMucHJvcHMuY2xvc2UsXHJcbiAgICAgICAgICAgIG9uU2V0U2VjdGlvbjogdGhpcy5jaGFuZ2VDYXRlZ29yeSxcclxuICAgICAgICAgICAgc2VjdGlvbjogdGhpcy5zdGF0ZS5jYXRlZ29yeSxcclxuICAgICAgICAgICAgc2VjdGlvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkhFQURFUlwiLCBsYWJlbDogU3RyaW5ncy5QdWJsaWNTZXJ2ZXJzLnNlYXJjaH0sXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJDVVNUT01cIiwgZWxlbWVudDogKCkgPT4gdGhpcy5zZWFyY2hCb3h9LFxyXG4gICAgICAgICAgICAgICAge3NlY3Rpb246IFwiSEVBREVSXCIsIGxhYmVsOiBTdHJpbmdzLlB1YmxpY1NlcnZlcnMuY2F0ZWdvcmllc30sXHJcbiAgICAgICAgICAgICAgICAuLi5jYXRlZ29yaWVzLFxyXG4gICAgICAgICAgICAgICAge3NlY3Rpb246IFwiRElWSURFUlwifSxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkhFQURFUlwiLCBsYWJlbDogUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2hyZWY6IFwiaHR0cHM6Ly9kaXNjb3Jkc2VydmVycy5jb21cIiwgdGFyZ2V0OiBcIl9ibGFua1wifSwgXCJEaXNjb3JkU2VydmVycy5jb21cIil9LFxyXG4gICAgICAgICAgICAgICAge3NlY3Rpb246IFwiRElWSURFUlwifSxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiAoKSA9PiB0aGlzLmNvbm5lY3Rpb259XHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHRoZW1lOiBcImRhcmtcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/publicservers/menu.js\n"); /***/ }), @@ -983,7 +971,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 modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _settings_addonlist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settings/addonlist */ \"./src/ui/settings/addonlist.jsx\");\n/* harmony import */ var _settings_group__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/group */ \"./src/ui/settings/group.jsx\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings/title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _settings_sidebarheader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings/sidebarheader */ \"./src/ui/settings/sidebarheader.jsx\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsRenderer {\n constructor() {\n this.patchSections();\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(\"strings-updated\", this.forceUpdate);\n }\n\n onChange(onChange) {\n return (collection, category, id) => {\n const before = modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections.length + modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.length;\n onChange(collection, category, id);\n const after = modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections.length + modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.length;\n if (before != after) setTimeout(this.forceUpdate.bind(this), 50);\n };\n }\n\n buildSettingsPanel(title, config, state, onChange, button = null) {\n config.forEach(section => {\n section.settings.forEach(item => item.value = state[section.id][item.id]);\n });\n return this.getSettingsPanel(title, config, this.onChange(onChange), button);\n }\n\n getSettingsPanel(title, groups, onChange, button = null) {\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n text: title,\n button: button\n }), groups.map(section => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_group__WEBPACK_IMPORTED_MODULE_2__[\"default\"], Object.assign({}, section, {\n onChange\n }));\n })];\n }\n\n getAddonPanel(title, addonList, addonState, options = {}) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_addonlist__WEBPACK_IMPORTED_MODULE_1__[\"default\"], Object.assign({}, {\n title: title,\n addonList: addonList,\n addonState: addonState\n }, options));\n }\n\n async patchSections() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"ReactComponents\"].get(\"FluxContainer(GuildSettings)\", m => m.displayName == \"FluxContainer(GuildSettings)\").then(c => console.log(\"COMPONENT\", c)); // const GuildSettings = await ReactComponents.get(\"FluxContainer(GuildSettings)\", m => m.displayName == \"FluxContainer(GuildSettings)\");\n // Patcher.after(\"SettingsManager\", GuildSettings.prototype, \"render\", (thisObject) => {\n // thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = \"guild-settings\";\n // });\n\n const UserSettings = await modules__WEBPACK_IMPORTED_MODULE_0__[\"ReactComponents\"].get(\"UserSettings\", m => m.prototype && m.prototype.generateSections);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = \"user-settings\";\n });\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"generateSections\", (thisObject, args, returnValue) => {\n let location = returnValue.findIndex(s => s.section.toLowerCase() == \"linux\") + 1;\n\n const insert = section => {\n returnValue.splice(location, 0, section);\n location++;\n };\n\n insert({\n section: \"DIVIDER\"\n }); //Header\n\n insert({\n section: \"CUSTOM\",\n element: _settings_sidebarheader__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n });\n\n for (const collection of modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections) {\n if (collection.disabled) continue;\n insert({\n section: collection.name,\n label: collection.name,\n element: () => this.buildSettingsPanel(collection.name, collection.settings, modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].state[collection.id], modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].onSettingChange.bind(modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"], collection.id), collection.button ? collection.button : null)\n });\n }\n\n for (const panel of modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.sort((a, b) => a.order > b.order)) {\n if (panel.clickListener) panel.onClick = event => panel.clickListener(thisObject, event, returnValue);\n insert(panel);\n } // insert({section: \"CUSTOM\", element: Attribution});\n\n });\n this.forceUpdate();\n }\n\n forceUpdate() {\n const viewClass = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"standardSidebarView\").standardSidebarView.split(\" \")[0];\n const node = document.querySelector(`.${viewClass}`);\n if (!node) return;\n const stateNode = modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].findInReactTree(modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].getReactInstance(node), m => m && m.generateSections, {\n walkable: [\"return\", \"stateNode\"]\n });\n if (stateNode) stateNode.forceUpdate();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzLmpzPzc2YmUiXSwibmFtZXMiOlsiU2V0dGluZ3NSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwicGF0Y2hTZWN0aW9ucyIsIkV2ZW50cyIsIm9uIiwiZm9yY2VVcGRhdGUiLCJvbkNoYW5nZSIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiYmVmb3JlIiwiU2V0dGluZ3MiLCJjb2xsZWN0aW9ucyIsImxlbmd0aCIsInBhbmVscyIsImFmdGVyIiwic2V0VGltZW91dCIsImJpbmQiLCJidWlsZFNldHRpbmdzUGFuZWwiLCJ0aXRsZSIsImNvbmZpZyIsInN0YXRlIiwiYnV0dG9uIiwiZm9yRWFjaCIsInNlY3Rpb24iLCJzZXR0aW5ncyIsIml0ZW0iLCJ2YWx1ZSIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRBZGRvblBhbmVsIiwiYWRkb25MaXN0IiwiYWRkb25TdGF0ZSIsIm9wdGlvbnMiLCJBZGRvbkxpc3QiLCJSZWFjdENvbXBvbmVudHMiLCJnZXQiLCJtIiwiZGlzcGxheU5hbWUiLCJ0aGVuIiwiYyIsImNvbnNvbGUiLCJsb2ciLCJVc2VyU2V0dGluZ3MiLCJwcm90b3R5cGUiLCJnZW5lcmF0ZVNlY3Rpb25zIiwiUGF0Y2hlciIsInRoaXNPYmplY3QiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwicmV0dXJuIiwibWVtb2l6ZWRQcm9wcyIsImFyZ3MiLCJyZXR1cm5WYWx1ZSIsImxvY2F0aW9uIiwiZmluZEluZGV4IiwicyIsInRvTG93ZXJDYXNlIiwiaW5zZXJ0Iiwic3BsaWNlIiwiZWxlbWVudCIsIkhlYWRlciIsImRpc2FibGVkIiwibmFtZSIsImxhYmVsIiwib25TZXR0aW5nQ2hhbmdlIiwicGFuZWwiLCJzb3J0IiwiYSIsImIiLCJvcmRlciIsImNsaWNrTGlzdGVuZXIiLCJvbkNsaWNrIiwiZXZlbnQiLCJ2aWV3Q2xhc3MiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJzdGFuZGFyZFNpZGViYXJWaWV3Iiwic3BsaXQiLCJub2RlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic3RhdGVOb2RlIiwiVXRpbGl0aWVzIiwiZmluZEluUmVhY3RUcmVlIiwiZ2V0UmVhY3RJbnN0YW5jZSIsIndhbGthYmxlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsZ0JBQU4sQ0FBdUI7QUFFdENDLGFBQVcsR0FBRztBQUNWLFNBQUtDLGFBQUw7QUFDQUMsa0RBQU0sQ0FBQ0MsRUFBUCxDQUFVLGlCQUFWLEVBQTZCLEtBQUtDLFdBQWxDO0FBQ0g7O0FBRURDLFVBQVEsQ0FBQ0EsUUFBRCxFQUFXO0FBQ2YsV0FBTyxDQUFDQyxVQUFELEVBQWFDLFFBQWIsRUFBdUJDLEVBQXZCLEtBQThCO0FBQ2pDLFlBQU1DLE1BQU0sR0FBR0MsZ0RBQVEsQ0FBQ0MsV0FBVCxDQUFxQkMsTUFBckIsR0FBOEJGLGdEQUFRLENBQUNHLE1BQVQsQ0FBZ0JELE1BQTdEO0FBQ0FQLGNBQVEsQ0FBQ0MsVUFBRCxFQUFhQyxRQUFiLEVBQXVCQyxFQUF2QixDQUFSO0FBQ0EsWUFBTU0sS0FBSyxHQUFHSixnREFBUSxDQUFDQyxXQUFULENBQXFCQyxNQUFyQixHQUE4QkYsZ0RBQVEsQ0FBQ0csTUFBVCxDQUFnQkQsTUFBNUQ7QUFDQSxVQUFJSCxNQUFNLElBQUlLLEtBQWQsRUFBcUJDLFVBQVUsQ0FBQyxLQUFLWCxXQUFMLENBQWlCWSxJQUFqQixDQUFzQixJQUF0QixDQUFELEVBQThCLEVBQTlCLENBQVY7QUFDeEIsS0FMRDtBQU1IOztBQUVEQyxvQkFBa0IsQ0FBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxLQUFoQixFQUF1QmYsUUFBdkIsRUFBaUNnQixNQUFNLEdBQUcsSUFBMUMsRUFBZ0Q7QUFDOURGLFVBQU0sQ0FBQ0csT0FBUCxDQUFlQyxPQUFPLElBQUk7QUFDdEJBLGFBQU8sQ0FBQ0MsUUFBUixDQUFpQkYsT0FBakIsQ0FBeUJHLElBQUksSUFBSUEsSUFBSSxDQUFDQyxLQUFMLEdBQWFOLEtBQUssQ0FBQ0csT0FBTyxDQUFDZixFQUFULENBQUwsQ0FBa0JpQixJQUFJLENBQUNqQixFQUF2QixDQUE5QztBQUNILEtBRkQ7QUFHQSxXQUFPLEtBQUttQixnQkFBTCxDQUFzQlQsS0FBdEIsRUFBNkJDLE1BQTdCLEVBQXFDLEtBQUtkLFFBQUwsQ0FBY0EsUUFBZCxDQUFyQyxFQUE4RGdCLE1BQTlELENBQVA7QUFDSDs7QUFFRE0sa0JBQWdCLENBQUNULEtBQUQsRUFBUVUsTUFBUixFQUFnQnZCLFFBQWhCLEVBQTBCZ0IsTUFBTSxHQUFHLElBQW5DLEVBQXlDO0FBQ3JELFdBQU8sQ0FBQ1EsNkNBQUssQ0FBQ0MsYUFBTixDQUFvQkMsdURBQXBCLEVBQW1DO0FBQUNDLFVBQUksRUFBRWQsS0FBUDtBQUFjRyxZQUFNLEVBQUVBO0FBQXRCLEtBQW5DLENBQUQsRUFBb0VPLE1BQU0sQ0FBQ0ssR0FBUCxDQUFXVixPQUFPLElBQUk7QUFDN0YsYUFBT00sNkNBQUssQ0FBQ0MsYUFBTixDQUFvQkksdURBQXBCLEVBQW1DQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCYixPQUFsQixFQUEyQjtBQUFDbEI7QUFBRCxPQUEzQixDQUFuQyxDQUFQO0FBQ0gsS0FGMEUsQ0FBcEUsQ0FBUDtBQUdIOztBQUVEZ0MsZUFBYSxDQUFDbkIsS0FBRCxFQUFRb0IsU0FBUixFQUFtQkMsVUFBbkIsRUFBK0JDLE9BQU8sR0FBRyxFQUF6QyxFQUE2QztBQUN0RCxXQUFPWCw2Q0FBSyxDQUFDQyxhQUFOLENBQW9CVywyREFBcEIsRUFBK0JOLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0I7QUFDcERsQixXQUFLLEVBQUVBLEtBRDZDO0FBRXBEb0IsZUFBUyxFQUFFQSxTQUZ5QztBQUdwREMsZ0JBQVUsRUFBRUE7QUFId0MsS0FBbEIsRUFJbkNDLE9BSm1DLENBQS9CLENBQVA7QUFLSDs7QUFFRCxRQUFNdkMsYUFBTixHQUFzQjtBQUNsQnlDLDJEQUFlLENBQUNDLEdBQWhCLENBQW9CLDhCQUFwQixFQUFvREMsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLFdBQUYsSUFBaUIsOEJBQTFFLEVBQTBHQyxJQUExRyxDQUErR0MsQ0FBQyxJQUFJQyxPQUFPLENBQUNDLEdBQVIsQ0FBWSxXQUFaLEVBQXlCRixDQUF6QixDQUFwSCxFQURrQixDQUVsQjtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxVQUFNRyxZQUFZLEdBQUcsTUFBTVIsdURBQWUsQ0FBQ0MsR0FBaEIsQ0FBb0IsY0FBcEIsRUFBb0NDLENBQUMsSUFBSUEsQ0FBQyxDQUFDTyxTQUFGLElBQWVQLENBQUMsQ0FBQ08sU0FBRixDQUFZQyxnQkFBcEUsQ0FBM0I7QUFDQUMsbURBQU8sQ0FBQ3ZDLEtBQVIsQ0FBYyxpQkFBZCxFQUFpQ29DLFlBQVksQ0FBQ0MsU0FBOUMsRUFBeUQsUUFBekQsRUFBb0VHLFVBQUQsSUFBZ0I7QUFDL0VBLGdCQUFVLENBQUNDLG1CQUFYLENBQStCQyxNQUEvQixDQUFzQ0EsTUFBdEMsQ0FBNkNBLE1BQTdDLENBQW9EQSxNQUFwRCxDQUEyREEsTUFBM0QsQ0FBa0VBLE1BQWxFLENBQXlFQSxNQUF6RSxDQUFnRkMsYUFBaEYsQ0FBOEZqRCxFQUE5RixHQUFtRyxlQUFuRztBQUNILEtBRkQ7QUFHQTZDLG1EQUFPLENBQUN2QyxLQUFSLENBQWMsaUJBQWQsRUFBaUNvQyxZQUFZLENBQUNDLFNBQTlDLEVBQXlELGtCQUF6RCxFQUE2RSxDQUFDRyxVQUFELEVBQWFJLElBQWIsRUFBbUJDLFdBQW5CLEtBQW1DO0FBQzVHLFVBQUlDLFFBQVEsR0FBR0QsV0FBVyxDQUFDRSxTQUFaLENBQXNCQyxDQUFDLElBQUlBLENBQUMsQ0FBQ3ZDLE9BQUYsQ0FBVXdDLFdBQVYsTUFBMkIsT0FBdEQsSUFBaUUsQ0FBaEY7O0FBQ0EsWUFBTUMsTUFBTSxHQUFJekMsT0FBRCxJQUFhO0FBQ3hCb0MsbUJBQVcsQ0FBQ00sTUFBWixDQUFtQkwsUUFBbkIsRUFBNkIsQ0FBN0IsRUFBZ0NyQyxPQUFoQztBQUNBcUMsZ0JBQVE7QUFDWCxPQUhEOztBQUlBSSxZQUFNLENBQUM7QUFBQ3pDLGVBQU8sRUFBRTtBQUFWLE9BQUQsQ0FBTixDQU40RyxDQU81Rzs7QUFDQXlDLFlBQU0sQ0FBQztBQUFDekMsZUFBTyxFQUFFLFFBQVY7QUFBb0IyQyxlQUFPLEVBQUVDLCtEQUFNQTtBQUFuQyxPQUFELENBQU47O0FBQ0EsV0FBSyxNQUFNN0QsVUFBWCxJQUF5QkksZ0RBQVEsQ0FBQ0MsV0FBbEMsRUFBK0M7QUFDM0MsWUFBSUwsVUFBVSxDQUFDOEQsUUFBZixFQUF5QjtBQUN6QkosY0FBTSxDQUFDO0FBQ0h6QyxpQkFBTyxFQUFFakIsVUFBVSxDQUFDK0QsSUFEakI7QUFFSEMsZUFBSyxFQUFFaEUsVUFBVSxDQUFDK0QsSUFGZjtBQUdISCxpQkFBTyxFQUFFLE1BQU0sS0FBS2pELGtCQUFMLENBQXdCWCxVQUFVLENBQUMrRCxJQUFuQyxFQUF5Qy9ELFVBQVUsQ0FBQ2tCLFFBQXBELEVBQThEZCxnREFBUSxDQUFDVSxLQUFULENBQWVkLFVBQVUsQ0FBQ0UsRUFBMUIsQ0FBOUQsRUFBNkZFLGdEQUFRLENBQUM2RCxlQUFULENBQXlCdkQsSUFBekIsQ0FBOEJOLGdEQUE5QixFQUF3Q0osVUFBVSxDQUFDRSxFQUFuRCxDQUE3RixFQUFxSkYsVUFBVSxDQUFDZSxNQUFYLEdBQW9CZixVQUFVLENBQUNlLE1BQS9CLEdBQXdDLElBQTdMO0FBSFosU0FBRCxDQUFOO0FBS0g7O0FBQ0QsV0FBSyxNQUFNbUQsS0FBWCxJQUFvQjlELGdEQUFRLENBQUNHLE1BQVQsQ0FBZ0I0RCxJQUFoQixDQUFxQixDQUFDQyxDQUFELEVBQUdDLENBQUgsS0FBU0QsQ0FBQyxDQUFDRSxLQUFGLEdBQVVELENBQUMsQ0FBQ0MsS0FBMUMsQ0FBcEIsRUFBc0U7QUFDbEUsWUFBSUosS0FBSyxDQUFDSyxhQUFWLEVBQXlCTCxLQUFLLENBQUNNLE9BQU4sR0FBaUJDLEtBQUQsSUFBV1AsS0FBSyxDQUFDSyxhQUFOLENBQW9CdkIsVUFBcEIsRUFBZ0N5QixLQUFoQyxFQUF1Q3BCLFdBQXZDLENBQTNCO0FBQ3pCSyxjQUFNLENBQUNRLEtBQUQsQ0FBTjtBQUNILE9BcEIyRyxDQXFCNUc7O0FBQ0gsS0F0QkQ7QUF1QkEsU0FBS3BFLFdBQUw7QUFDSDs7QUFFREEsYUFBVyxHQUFHO0FBQ1YsVUFBTTRFLFNBQVMsR0FBR0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixxQkFBMUIsRUFBaURDLG1CQUFqRCxDQUFxRUMsS0FBckUsQ0FBMkUsR0FBM0UsRUFBZ0YsQ0FBaEYsQ0FBbEI7QUFDQSxVQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF3QixJQUFHUCxTQUFVLEVBQXJDLENBQWI7QUFDQSxRQUFJLENBQUNLLElBQUwsRUFBVztBQUNYLFVBQU1HLFNBQVMsR0FBR0MsaURBQVMsQ0FBQ0MsZUFBVixDQUEwQkQsaURBQVMsQ0FBQ0UsZ0JBQVYsQ0FBMkJOLElBQTNCLENBQTFCLEVBQTREekMsQ0FBQyxJQUFJQSxDQUFDLElBQUlBLENBQUMsQ0FBQ1EsZ0JBQXhFLEVBQTBGO0FBQUN3QyxjQUFRLEVBQUUsQ0FBQyxRQUFELEVBQVcsV0FBWDtBQUFYLEtBQTFGLENBQWxCO0FBQ0EsUUFBSUosU0FBSixFQUFlQSxTQUFTLENBQUNwRixXQUFWO0FBQ2xCOztBQS9FcUMsQ0FBM0IsRUFBZiIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIFdlYnBhY2tNb2R1bGVzLCBQYXRjaGVyLCBSZWFjdENvbXBvbmVudHMsIFV0aWxpdGllcywgU2V0dGluZ3MsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBBZGRvbkxpc3QgZnJvbSBcIi4vc2V0dGluZ3MvYWRkb25saXN0XCI7XHJcbmltcG9ydCBTZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzL2dyb3VwXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzL3RpdGxlXCI7XHJcbmltcG9ydCBIZWFkZXIgZnJvbSBcIi4vc2V0dGluZ3Mvc2lkZWJhcmhlYWRlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFNldHRpbmdzUmVuZGVyZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucGF0Y2hTZWN0aW9ucygpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcInN0cmluZ3MtdXBkYXRlZFwiLCB0aGlzLmZvcmNlVXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShvbkNoYW5nZSkge1xyXG4gICAgICAgIHJldHVybiAoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IFNldHRpbmdzLmNvbGxlY3Rpb25zLmxlbmd0aCArIFNldHRpbmdzLnBhbmVscy5sZW5ndGg7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gU2V0dGluZ3MuY29sbGVjdGlvbnMubGVuZ3RoICsgU2V0dGluZ3MucGFuZWxzLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGJlZm9yZSAhPSBhZnRlcikgc2V0VGltZW91dCh0aGlzLmZvcmNlVXBkYXRlLmJpbmQodGhpcyksIDUwKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkU2V0dGluZ3NQYW5lbCh0aXRsZSwgY29uZmlnLCBzdGF0ZSwgb25DaGFuZ2UsIGJ1dHRvbiA9IG51bGwpIHtcclxuICAgICAgICBjb25maWcuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbi5zZXR0aW5ncy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS52YWx1ZSA9IHN0YXRlW3NlY3Rpb24uaWRdW2l0ZW0uaWRdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIHRoaXMub25DaGFuZ2Uob25DaGFuZ2UpLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmdzUGFuZWwodGl0bGUsIGdyb3Vwcywgb25DaGFuZ2UsIGJ1dHRvbiA9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHRpdGxlLCBidXR0b246IGJ1dHRvbn0pLCBncm91cHMubWFwKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2V9KSk7XHJcbiAgICAgICAgfSldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZG9uUGFuZWwodGl0bGUsIGFkZG9uTGlzdCwgYWRkb25TdGF0ZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkb25MaXN0LCBPYmplY3QuYXNzaWduKHt9LCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgYWRkb25MaXN0OiBhZGRvbkxpc3QsXHJcbiAgICAgICAgICAgIGFkZG9uU3RhdGU6IGFkZG9uU3RhdGVcclxuICAgICAgICB9LCBvcHRpb25zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcGF0Y2hTZWN0aW9ucygpIHtcclxuICAgICAgICBSZWFjdENvbXBvbmVudHMuZ2V0KFwiRmx1eENvbnRhaW5lcihHdWlsZFNldHRpbmdzKVwiLCBtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIpLnRoZW4oYyA9PiBjb25zb2xlLmxvZyhcIkNPTVBPTkVOVFwiLCBjKSk7XHJcbiAgICAgICAgLy8gY29uc3QgR3VpbGRTZXR0aW5ncyA9IGF3YWl0IFJlYWN0Q29tcG9uZW50cy5nZXQoXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIsIG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkZsdXhDb250YWluZXIoR3VpbGRTZXR0aW5ncylcIik7XHJcbiAgICAgICAgLy8gUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBHdWlsZFNldHRpbmdzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLm1lbW9pemVkUHJvcHMuaWQgPSBcImd1aWxkLXNldHRpbmdzXCI7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgY29uc3QgVXNlclNldHRpbmdzID0gYXdhaXQgUmVhY3RDb21wb25lbnRzLmdldChcIlVzZXJTZXR0aW5nc1wiLCBtID0+IG0ucHJvdG90eXBlICYmIG0ucHJvdG90eXBlLmdlbmVyYXRlU2VjdGlvbnMpO1xyXG4gICAgICAgIFBhdGNoZXIuYWZ0ZXIoXCJTZXR0aW5nc01hbmFnZXJcIiwgVXNlclNldHRpbmdzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5tZW1vaXplZFByb3BzLmlkID0gXCJ1c2VyLXNldHRpbmdzXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBVc2VyU2V0dGluZ3MucHJvdG90eXBlLCBcImdlbmVyYXRlU2VjdGlvbnNcIiwgKHRoaXNPYmplY3QsIGFyZ3MsIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbiA9IHJldHVyblZhbHVlLmZpbmRJbmRleChzID0+IHMuc2VjdGlvbi50b0xvd2VyQ2FzZSgpID09IFwibGludXhcIikgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBpbnNlcnQgPSAoc2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUuc3BsaWNlKGxvY2F0aW9uLCAwLCBzZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uKys7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGluc2VydCh7c2VjdGlvbjogXCJESVZJREVSXCJ9KTtcclxuICAgICAgICAgICAgLy9IZWFkZXJcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiBIZWFkZXJ9KTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIFNldHRpbmdzLmNvbGxlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5kaXNhYmxlZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGNvbGxlY3Rpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sbGVjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6ICgpID0+IHRoaXMuYnVpbGRTZXR0aW5nc1BhbmVsKGNvbGxlY3Rpb24ubmFtZSwgY29sbGVjdGlvbi5zZXR0aW5ncywgU2V0dGluZ3Muc3RhdGVbY29sbGVjdGlvbi5pZF0sIFNldHRpbmdzLm9uU2V0dGluZ0NoYW5nZS5iaW5kKFNldHRpbmdzLCBjb2xsZWN0aW9uLmlkKSwgY29sbGVjdGlvbi5idXR0b24gPyBjb2xsZWN0aW9uLmJ1dHRvbiA6IG51bGwpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhbmVsIG9mIFNldHRpbmdzLnBhbmVscy5zb3J0KChhLGIpID0+IGEub3JkZXIgPiBiLm9yZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhbmVsLmNsaWNrTGlzdGVuZXIpIHBhbmVsLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHBhbmVsLmNsaWNrTGlzdGVuZXIodGhpc09iamVjdCwgZXZlbnQsIHJldHVyblZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGluc2VydChwYW5lbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaW5zZXJ0KHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiBBdHRyaWJ1dGlvbn0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JjZVVwZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCB2aWV3Q2xhc3MgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic3RhbmRhcmRTaWRlYmFyVmlld1wiKS5zdGFuZGFyZFNpZGViYXJWaWV3LnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dmlld0NsYXNzfWApO1xyXG4gICAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlTm9kZSA9IFV0aWxpdGllcy5maW5kSW5SZWFjdFRyZWUoVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2Uobm9kZSksIG0gPT4gbSAmJiBtLmdlbmVyYXRlU2VjdGlvbnMsIHt3YWxrYWJsZTogW1wicmV0dXJuXCIsIFwic3RhdGVOb2RlXCJdfSk7XHJcbiAgICAgICAgaWYgKHN0YXRlTm9kZSkgc3RhdGVOb2RlLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _settings_addonlist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settings/addonlist */ \"./src/ui/settings/addonlist.jsx\");\n/* harmony import */ var _settings_group__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/group */ \"./src/ui/settings/group.jsx\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings/title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _settings_sidebarheader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings/sidebarheader */ \"./src/ui/settings/sidebarheader.jsx\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsRenderer {\n constructor() {\n this.patchSections();\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(\"strings-updated\", this.forceUpdate);\n }\n\n onChange(onChange) {\n return (collection, category, id) => {\n const before = modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections.length + modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.length;\n onChange(collection, category, id);\n const after = modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections.length + modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.length;\n if (before != after) setTimeout(this.forceUpdate.bind(this), 50);\n };\n }\n\n buildSettingsPanel(title, config, state, onChange, button = null) {\n config.forEach(section => {\n section.settings.forEach(item => item.value = state[section.id][item.id]);\n });\n return this.getSettingsPanel(title, config, this.onChange(onChange), button);\n }\n\n getSettingsPanel(title, groups, onChange, button = null) {\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n text: title,\n button: button\n }), groups.map(section => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_group__WEBPACK_IMPORTED_MODULE_2__[\"default\"], Object.assign({}, section, {\n onChange\n }));\n })];\n }\n\n getAddonPanel(title, addonList, addonState, options = {}) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_addonlist__WEBPACK_IMPORTED_MODULE_1__[\"default\"], Object.assign({}, {\n title: title,\n addonList: addonList,\n addonState: addonState\n }, options));\n }\n\n async patchSections() {\n const UserSettings = await modules__WEBPACK_IMPORTED_MODULE_0__[\"ReactComponents\"].get(\"UserSettings\", m => m.prototype && m.prototype.generateSections);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = \"user-settings\";\n });\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"generateSections\", (thisObject, args, returnValue) => {\n let location = returnValue.findIndex(s => s.section.toLowerCase() == \"linux\") + 1;\n\n const insert = section => {\n returnValue.splice(location, 0, section);\n location++;\n };\n\n insert({\n section: \"DIVIDER\"\n }); // Header\n\n insert({\n section: \"CUSTOM\",\n element: _settings_sidebarheader__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n });\n\n for (const collection of modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections) {\n if (collection.disabled) continue;\n insert({\n section: collection.name,\n label: collection.name,\n element: () => this.buildSettingsPanel(collection.name, collection.settings, modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].state[collection.id], modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].onSettingChange.bind(modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"], collection.id), collection.button ? collection.button : null)\n });\n }\n\n for (const panel of modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.sort((a, b) => a.order > b.order)) {\n if (panel.clickListener) panel.onClick = event => panel.clickListener(thisObject, event, returnValue);\n insert(panel);\n } // insert({section: \"CUSTOM\", element: Attribution});\n\n });\n this.forceUpdate();\n }\n\n forceUpdate() {\n const viewClass = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"standardSidebarView\").standardSidebarView.split(\" \")[0];\n const node = document.querySelector(`.${viewClass}`);\n if (!node) return;\n const stateNode = modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].findInReactTree(modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].getReactInstance(node), m => m && m.generateSections, {\n walkable: [\"return\", \"stateNode\"]\n });\n if (stateNode) stateNode.forceUpdate();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzLmpzPzc2YmUiXSwibmFtZXMiOlsiU2V0dGluZ3NSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwicGF0Y2hTZWN0aW9ucyIsIkV2ZW50cyIsIm9uIiwiZm9yY2VVcGRhdGUiLCJvbkNoYW5nZSIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiYmVmb3JlIiwiU2V0dGluZ3MiLCJjb2xsZWN0aW9ucyIsImxlbmd0aCIsInBhbmVscyIsImFmdGVyIiwic2V0VGltZW91dCIsImJpbmQiLCJidWlsZFNldHRpbmdzUGFuZWwiLCJ0aXRsZSIsImNvbmZpZyIsInN0YXRlIiwiYnV0dG9uIiwiZm9yRWFjaCIsInNlY3Rpb24iLCJzZXR0aW5ncyIsIml0ZW0iLCJ2YWx1ZSIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRBZGRvblBhbmVsIiwiYWRkb25MaXN0IiwiYWRkb25TdGF0ZSIsIm9wdGlvbnMiLCJBZGRvbkxpc3QiLCJVc2VyU2V0dGluZ3MiLCJSZWFjdENvbXBvbmVudHMiLCJnZXQiLCJtIiwicHJvdG90eXBlIiwiZ2VuZXJhdGVTZWN0aW9ucyIsIlBhdGNoZXIiLCJ0aGlzT2JqZWN0IiwiX3JlYWN0SW50ZXJuYWxGaWJlciIsInJldHVybiIsIm1lbW9pemVkUHJvcHMiLCJhcmdzIiwicmV0dXJuVmFsdWUiLCJsb2NhdGlvbiIsImZpbmRJbmRleCIsInMiLCJ0b0xvd2VyQ2FzZSIsImluc2VydCIsInNwbGljZSIsImVsZW1lbnQiLCJIZWFkZXIiLCJkaXNhYmxlZCIsIm5hbWUiLCJsYWJlbCIsIm9uU2V0dGluZ0NoYW5nZSIsInBhbmVsIiwic29ydCIsImEiLCJiIiwib3JkZXIiLCJjbGlja0xpc3RlbmVyIiwib25DbGljayIsImV2ZW50Iiwidmlld0NsYXNzIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsInNwbGl0Iiwibm9kZSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInN0YXRlTm9kZSIsIlV0aWxpdGllcyIsImZpbmRJblJlYWN0VHJlZSIsImdldFJlYWN0SW5zdGFuY2UiLCJ3YWxrYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLGdCQUFOLENBQXVCO0FBRXRDQyxhQUFXLEdBQUc7QUFDVixTQUFLQyxhQUFMO0FBQ0FDLGtEQUFNLENBQUNDLEVBQVAsQ0FBVSxpQkFBVixFQUE2QixLQUFLQyxXQUFsQztBQUNIOztBQUVEQyxVQUFRLENBQUNBLFFBQUQsRUFBVztBQUNmLFdBQU8sQ0FBQ0MsVUFBRCxFQUFhQyxRQUFiLEVBQXVCQyxFQUF2QixLQUE4QjtBQUNqQyxZQUFNQyxNQUFNLEdBQUdDLGdEQUFRLENBQUNDLFdBQVQsQ0FBcUJDLE1BQXJCLEdBQThCRixnREFBUSxDQUFDRyxNQUFULENBQWdCRCxNQUE3RDtBQUNBUCxjQUFRLENBQUNDLFVBQUQsRUFBYUMsUUFBYixFQUF1QkMsRUFBdkIsQ0FBUjtBQUNBLFlBQU1NLEtBQUssR0FBR0osZ0RBQVEsQ0FBQ0MsV0FBVCxDQUFxQkMsTUFBckIsR0FBOEJGLGdEQUFRLENBQUNHLE1BQVQsQ0FBZ0JELE1BQTVEO0FBQ0EsVUFBSUgsTUFBTSxJQUFJSyxLQUFkLEVBQXFCQyxVQUFVLENBQUMsS0FBS1gsV0FBTCxDQUFpQlksSUFBakIsQ0FBc0IsSUFBdEIsQ0FBRCxFQUE4QixFQUE5QixDQUFWO0FBQ3hCLEtBTEQ7QUFNSDs7QUFFREMsb0JBQWtCLENBQUNDLEtBQUQsRUFBUUMsTUFBUixFQUFnQkMsS0FBaEIsRUFBdUJmLFFBQXZCLEVBQWlDZ0IsTUFBTSxHQUFHLElBQTFDLEVBQWdEO0FBQzlERixVQUFN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QUc7QUFDVixVQUFNdUUsU0FBUyxHQUFHQyxzREFBYyxDQUFDQyxVQUFmLENBQTBCLHFCQUExQixFQUFpREMsbUJBQWpELENBQXFFQyxLQUFyRSxDQUEyRSxHQUEzRSxFQUFnRixDQUFoRixDQUFsQjtBQUNBLFVBQU1DLElBQUksR0FBR0MsUUFBUSxDQUFDQyxhQUFULENBQXdCLElBQUdQLFNBQVUsRUFBckMsQ0FBYjtBQUNBLFFBQUksQ0FBQ0ssSUFBTCxFQUFXO0FBQ1gsVUFBTUcsU0FBUyxHQUFHQyxpREFBUyxDQUFDQyxlQUFWLENBQTBCRCxpREFBUyxDQUFDRSxnQkFBVixDQUEyQk4sSUFBM0IsQ0FBMUIsRUFBNERuQyxDQUFDLElBQUlBLENBQUMsSUFBSUEsQ0FBQyxDQUFDRSxnQkFBeEUsRUFBMEY7QUFBQ3dDLGNBQVEsRUFBRSxDQUFDLFFBQUQsRUFBVyxXQUFYO0FBQVgsS0FBMUYsQ0FBbEI7QUFDQSxRQUFJSixTQUFKLEVBQWVBLFNBQVMsQ0FBQy9FLFdBQVY7QUFDbEI7O0FBMUVxQyxDQUEzQixFQUFmIiwiZmlsZSI6Ii4vc3JjL3VpL3NldHRpbmdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgV2VicGFja01vZHVsZXMsIFBhdGNoZXIsIFJlYWN0Q29tcG9uZW50cywgVXRpbGl0aWVzLCBTZXR0aW5ncywgRXZlbnRzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEFkZG9uTGlzdCBmcm9tIFwiLi9zZXR0aW5ncy9hZGRvbmxpc3RcIjtcclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3MvZ3JvdXBcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3MvdGl0bGVcIjtcclxuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9zZXR0aW5ncy9zaWRlYmFyaGVhZGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgU2V0dGluZ3NSZW5kZXJlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wYXRjaFNlY3Rpb25zKCk7XHJcbiAgICAgICAgRXZlbnRzLm9uKFwic3RyaW5ncy11cGRhdGVkXCIsIHRoaXMuZm9yY2VVcGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKG9uQ2hhbmdlKSB7XHJcbiAgICAgICAgcmV0dXJuIChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gU2V0dGluZ3MuY29sbGVjdGlvbnMubGVuZ3RoICsgU2V0dGluZ3MucGFuZWxzLmxlbmd0aDtcclxuICAgICAgICAgICAgb25DaGFuZ2UoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKTtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBTZXR0aW5ncy5jb2xsZWN0aW9ucy5sZW5ndGggKyBTZXR0aW5ncy5wYW5lbHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoYmVmb3JlICE9IGFmdGVyKSBzZXRUaW1lb3V0KHRoaXMuZm9yY2VVcGRhdGUuYmluZCh0aGlzKSwgNTApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIHN0YXRlLCBvbkNoYW5nZSwgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIGNvbmZpZy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLmZvckVhY2goaXRlbSA9PiBpdGVtLnZhbHVlID0gc3RhdGVbc2VjdGlvbi5pZF1baXRlbS5pZF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzUGFuZWwodGl0bGUsIGNvbmZpZywgdGhpcy5vbkNoYW5nZShvbkNoYW5nZSksIGJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3NQYW5lbCh0aXRsZSwgZ3JvdXBzLCBvbkNoYW5nZSwgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBbUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGUsIGJ1dHRvbjogYnV0dG9ufSksIGdyb3Vwcy5tYXAoc2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZX0pKTtcclxuICAgICAgICB9KV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkb25QYW5lbCh0aXRsZSwgYWRkb25MaXN0LCBhZGRvblN0YXRlLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGRvbkxpc3QsIE9iamVjdC5hc3NpZ24oe30sIHtcclxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICBhZGRvbkxpc3Q6IGFkZG9uTGlzdCxcclxuICAgICAgICAgICAgYWRkb25TdGF0ZTogYWRkb25TdGF0ZVxyXG4gICAgICAgIH0sIG9wdGlvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwYXRjaFNlY3Rpb25zKCkge1xyXG4gICAgICAgIGNvbnN0IFVzZXJTZXR0aW5ncyA9IGF3YWl0IFJlYWN0Q29tcG9uZW50cy5nZXQoXCJVc2VyU2V0dGluZ3NcIiwgbSA9PiBtLnByb3RvdHlwZSAmJiBtLnByb3RvdHlwZS5nZW5lcmF0ZVNlY3Rpb25zKTtcclxuICAgICAgICBQYXRjaGVyLmFmdGVyKFwiU2V0dGluZ3NNYW5hZ2VyXCIsIFVzZXJTZXR0aW5ncy5wcm90b3R5cGUsIFwicmVuZGVyXCIsICh0aGlzT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXNPYmplY3QuX3JlYWN0SW50ZXJuYWxGaWJlci5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ubWVtb2l6ZWRQcm9wcy5pZCA9IFwidXNlci1zZXR0aW5nc1wiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFBhdGNoZXIuYWZ0ZXIoXCJTZXR0aW5nc01hbmFnZXJcIiwgVXNlclNldHRpbmdzLnByb3RvdHlwZSwgXCJnZW5lcmF0ZVNlY3Rpb25zXCIsICh0aGlzT2JqZWN0LCBhcmdzLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbG9jYXRpb24gPSByZXR1cm5WYWx1ZS5maW5kSW5kZXgocyA9PiBzLnNlY3Rpb24udG9Mb3dlckNhc2UoKSA9PSBcImxpbnV4XCIpICsgMTtcclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0ID0gKHNlY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnNwbGljZShsb2NhdGlvbiwgMCwgc2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbisrO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiRElWSURFUlwifSk7XHJcbiAgICAgICAgICAgIC8vIEhlYWRlclxyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiQ1VTVE9NXCIsIGVsZW1lbnQ6IEhlYWRlcn0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgU2V0dGluZ3MuY29sbGVjdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmRpc2FibGVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGluc2VydCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogY29sbGVjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2xsZWN0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogKCkgPT4gdGhpcy5idWlsZFNldHRpbmdzUGFuZWwoY29sbGVjdGlvbi5uYW1lLCBjb2xsZWN0aW9uLnNldHRpbmdzLCBTZXR0aW5ncy5zdGF0ZVtjb2xsZWN0aW9uLmlkXSwgU2V0dGluZ3Mub25TZXR0aW5nQ2hhbmdlLmJpbmQoU2V0dGluZ3MsIGNvbGxlY3Rpb24uaWQpLCBjb2xsZWN0aW9uLmJ1dHRvbiA/IGNvbGxlY3Rpb24uYnV0dG9uIDogbnVsbClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFuZWwgb2YgU2V0dGluZ3MucGFuZWxzLnNvcnQoKGEsYikgPT4gYS5vcmRlciA+IGIub3JkZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFuZWwuY2xpY2tMaXN0ZW5lcikgcGFuZWwub25DbGljayA9IChldmVudCkgPT4gcGFuZWwuY2xpY2tMaXN0ZW5lcih0aGlzT2JqZWN0LCBldmVudCwgcmV0dXJuVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaW5zZXJ0KHBhbmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpbnNlcnQoe3NlY3Rpb246IFwiQ1VTVE9NXCIsIGVsZW1lbnQ6IEF0dHJpYnV0aW9ufSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlVXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdDbGFzcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzdGFuZGFyZFNpZGViYXJWaWV3XCIpLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt2aWV3Q2xhc3N9YCk7XHJcbiAgICAgICAgaWYgKCFub2RlKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgc3RhdGVOb2RlID0gVXRpbGl0aWVzLmZpbmRJblJlYWN0VHJlZShVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKSwgbSA9PiBtICYmIG0uZ2VuZXJhdGVTZWN0aW9ucywge3dhbGthYmxlOiBbXCJyZXR1cm5cIiwgXCJzdGF0ZU5vZGVcIl19KTtcclxuICAgICAgICBpZiAoc3RhdGVOb2RlKSBzdGF0ZU5vZGUuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings.js\n"); /***/ }), @@ -995,7 +983,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modu /***/ (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 AddonCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _icons_edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/edit */ \"./src/ui/icons/edit.jsx\");\n/* harmony import */ var _icons_delete__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/delete */ \"./src/ui/icons/delete.jsx\");\n/* harmony import */ var _components_switch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/switch */ \"./src/ui/settings/components/switch.jsx\");\n/* harmony import */ var _errorboundary__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../errorboundary */ \"./src/ui/errorboundary.jsx\");\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\n\n\n\n\nconst Tooltip = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"Tooltip\");\nclass AddonCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n settingsOpen: false\n };\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.onChange = this.onChange.bind(this);\n this.reload = this.reload.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.closeSettings = this.closeSettings.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.addon = this.props.reload(this.props.addon.id);\n this.forceUpdate();\n }\n\n componentDidUpdate() {\n if (!this.state.settingsOpen) return;\n if (this.settingsPanel instanceof Node) this.panelRef.current.appendChild(this.settingsPanel); // if (!SettingsCookie[\"fork-ps-3\"]) return;\n // const isHidden = (container, element) => {\n // const cTop = container.scrollTop;\n // const cBottom = cTop + container.clientHeight;\n // const eTop = element.offsetTop;\n // const eBottom = eTop + element.clientHeight;\n // return (eTop < cTop || eBottom > cBottom);\n // };\n // const panel = $(this.panelRef.current);\n // const container = panel.parents(\".scroller-2FKFPG\");\n // if (!isHidden(container[0], panel[0])) return;\n // container.animate({\n // scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30\n // }, 300);\n\n setImmediate(() => {\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const thisNode = this.panelRef.current;\n const container = thisNode.closest(\".scroller\");\n if (!isHidden(container, thisNode)) return;\n const thisNodeOffset = modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].offset(thisNode);\n const containerOffset = modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].offset(container);\n const original = container.scrollTop;\n const endPoint = thisNodeOffset.top - containerOffset.top + container.scrollTop - 30;\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].animate({\n duration: 300,\n update: function (progress) {\n if (endPoint > original) container.scrollTop = original + progress * (endPoint - original);else container.scrollTop = original - progress * (original - endPoint);\n }\n });\n });\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n onChange() {\n this.props.onChange && this.props.onChange(this.props.addon.id);\n this.props.enabled = !this.props.enabled;\n }\n\n showSettings() {\n if (!this.props.hasSettings) return;\n this.setState({\n settingsOpen: true\n });\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({\n settingsOpen: false\n });\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-author\"\n }, author);\n return title.flat();\n }\n\n get settingsComponent() {\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n\n try {\n this.settingsPanel = this.props.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"Addon Settings\", \"Unable to get settings panel for \" + name + \".\", err);\n }\n\n const props = {\n id: `${name}-settings`,\n className: \"addon-settings\",\n ref: this.panelRef\n };\n\n if (typeof settingsPanel == \"string\") {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].warn(\"Addon Settings\", \"Using a DOMString is officially deprecated.\");\n props.dangerouslySetInnerHTML = this.settingsPanel;\n }\n\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-card settings-open bd-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-close\",\n onClick: this.closeSettings\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", props, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_errorboundary__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component || typeof this.settingsPanel === \"function\" ? this.settingsPanel : null)));\n }\n\n buildLink(which) {\n const url = this.props.addon[which];\n if (!url) return null;\n const link = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bd-link bd-link-website\",\n href: url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons[which]);\n\n if (which == \"invite\") {\n link.props.onClick = function (event) {\n event.preventDefault();\n event.stopPropagation();\n let code = url;\n const tester = /\\.gg\\/(.*)$/;\n if (tester.test(code)) code = code.match(tester)[1];\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DiscordModules\"].LayerStack.popLayer();\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DiscordModules\"].InviteActions.acceptInviteAndTransitionToInviteChannel(code);\n };\n }\n\n return link;\n }\n\n get footer() {\n const links = [\"website\", \"source\", \"invite\", \"donate\", \"patreon\"];\n if (!links.some(l => this.props.addon[l]) && !this.props.hasSettings) return null;\n const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-links\"\n }, linkComponents.map((comp, i) => i < linkComponents.length - 1 ? [comp, \" | \"] : comp).flat()), this.props.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bd-button bd-button-addon-settings\",\n disabled: !this.props.enabled\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.addonSettings));\n }\n\n makeButton(title, children, action) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(Tooltip, {\n color: \"black\",\n position: \"top\",\n text: title\n }, props => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", _extends({}, props, {\n className: \"bd-addon-button\",\n onClick: action\n }), children);\n });\n }\n\n render() {\n if (this.state.settingsOpen) return this.settingsComponent;\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n const author = this.getString(addon.author);\n const description = this.getString(addon.description);\n const version = this.getString(addon.version);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `${addon.id}-card`,\n className: \"bd-addon-card settings-closed\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls\"\n }, this.props.editAddon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.editAddon, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_edit__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), this.props.editAddon), this.props.deleteAddon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_delete__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null), this.props.deleteAddon), this.props.showReloadIcon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.reload, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload bd-reload-card\"\n }), this.reload), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_switch__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n checked: this.props.enabled,\n onChange: this.onChange\n }))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description scroller\"\n }, description)), this.footer);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9uY2FyZC5qc3g/NjM3MyJdLCJuYW1lcyI6WyJUb29sdGlwIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQWRkb25DYXJkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJzZXR0aW5nc09wZW4iLCJzZXR0aW5nc1BhbmVsIiwicGFuZWxSZWYiLCJjcmVhdGVSZWYiLCJvbkNoYW5nZSIsImJpbmQiLCJyZWxvYWQiLCJzaG93U2V0dGluZ3MiLCJjbG9zZVNldHRpbmdzIiwiYWRkb24iLCJpZCIsImZvcmNlVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiTm9kZSIsImN1cnJlbnQiLCJhcHBlbmRDaGlsZCIsInNldEltbWVkaWF0ZSIsImlzSGlkZGVuIiwiY29udGFpbmVyIiwiZWxlbWVudCIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiY2xpZW50SGVpZ2h0IiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJ0aGlzTm9kZSIsImNsb3Nlc3QiLCJ0aGlzTm9kZU9mZnNldCIsIkRPTSIsIm9mZnNldCIsImNvbnRhaW5lck9mZnNldCIsIm9yaWdpbmFsIiwiZW5kUG9pbnQiLCJ0b3AiLCJhbmltYXRlIiwiZHVyYXRpb24iLCJ1cGRhdGUiLCJwcm9ncmVzcyIsImdldFN0cmluZyIsInZhbHVlIiwidG9TdHJpbmciLCJlbmFibGVkIiwiaGFzU2V0dGluZ3MiLCJzZXRTdGF0ZSIsImlubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lIiwidmVyc2lvbiIsImF1dGhvciIsInRpdGxlIiwiU3RyaW5ncyIsIkFkZG9ucyIsInNwbGl0IiwibmFtZUluZGV4IiwiZmluZEluZGV4IiwicyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsImZsYXQiLCJzZXR0aW5nc0NvbXBvbmVudCIsImdldFNldHRpbmdzUGFuZWwiLCJlcnIiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwicmVmIiwid2FybiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRMaW5rIiwid2hpY2giLCJ1cmwiLCJsaW5rIiwib25DbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJjb2RlIiwidGVzdGVyIiwidGVzdCIsIm1hdGNoIiwiRGlzY29yZE1vZHVsZXMiLCJMYXllclN0YWNrIiwicG9wTGF5ZXIiLCJJbnZpdGVBY3Rpb25zIiwiYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbCIsImZvb3RlciIsImxpbmtzIiwic29tZSIsImwiLCJsaW5rQ29tcG9uZW50cyIsIm1hcCIsImZpbHRlciIsImMiLCJjb21wIiwiaSIsImxlbmd0aCIsImFkZG9uU2V0dGluZ3MiLCJtYWtlQnV0dG9uIiwiY2hpbGRyZW4iLCJhY3Rpb24iLCJyZW5kZXIiLCJkZXNjcmlwdGlvbiIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwic2hvd1JlbG9hZEljb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxPQUFPLEdBQUdDLHNEQUFjLENBQUNDLGdCQUFmLENBQWdDLFNBQWhDLENBQWhCO0FBRWUsTUFBTUMsU0FBTixTQUF3QkMsNkNBQUssQ0FBQ0MsU0FBOUIsQ0FBd0M7QUFFbkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxrQkFBWSxFQUFFO0FBREwsS0FBYjtBQUlBLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCUCw2Q0FBSyxDQUFDUSxTQUFOLEVBQWhCO0FBRUEsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIs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RCxLQUFLM0csS0FBTCxDQUFXMkcsU0FBbkUsQ0FEN0IsRUFFSyxLQUFLM0csS0FBTCxDQUFXNEcsV0FBWCxJQUEwQixLQUFLTixVQUFMLENBQWdCaEQsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlcUQsV0FBL0IsRUFBNEMsNERBQUMscURBQUQsT0FBNUMsRUFBNEQsS0FBSzVHLEtBQUwsQ0FBVzRHLFdBQXZFLENBRi9CLEVBR0ssS0FBSzVHLEtBQUwsQ0FBVzZHLGNBQVgsSUFBNkIsS0FBS1AsVUFBTCxDQUFnQmhELCtDQUFPLENBQUNDLE1BQVIsQ0FBZS9DLE1BQS9CLEVBQXVDLDREQUFDLHFEQUFEO0FBQVksZUFBUyxFQUFDO0FBQXRCLE1BQXZDLEVBQTRGLEtBQUtBLE1BQWpHLENBSGxDLEVBSUksNERBQUMsMERBQUQ7QUFBUSxhQUFPLEVBQUUsS0FBS1IsS0FBTCxDQUFXNkMsT0FBNUI7QUFBcUMsY0FBUSxFQUFFLEtBQUt2QztBQUFwRCxNQUpKLENBRlIsQ0FETCxFQVVLO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBd0Q7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUEwQ29HLFdBQTFDLENBQXhELENBVkwsRUFXTSxLQUFLaEIsTUFYWCxDQUFQO0FBYUg7O0FBN0trRCIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9hZGRvbmNhcmQuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgTG9nZ2VyLCBTdHJpbmdzLCBXZWJwYWNrTW9kdWxlcywgRE9NLCBEaXNjb3JkTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IENsb3NlQnV0dG9uIGZyb20gXCIuLi9pY29ucy9jbG9zZVwiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tIFwiLi4vaWNvbnMvZWRpdFwiO1xyXG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tIFwiLi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAgXCIuLi9lcnJvcmJvdW5kYXJ5XCI7XHJcblxyXG5jb25zdCBUb29sdGlwID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRvbkNhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbjogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3MgPSB0aGlzLnNob3dTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZXR0aW5ncyA9IHRoaXMuY2xvc2VTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVsb2FkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5hZGRvbiA9IHRoaXMucHJvcHMucmVsb2FkKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzT3BlbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBOb2RlKSB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuXHJcbiAgICAgICAgLy8gaWYgKCFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgIC8vIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAvLyAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIC8vICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgLy8gICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAvLyB9O1xyXG5cclxuICAgICAgICAvLyBjb25zdCBwYW5lbCA9ICQodGhpcy5wYW5lbFJlZi5jdXJyZW50KTtcclxuICAgICAgICAvLyBjb25zdCBjb250YWluZXIgPSBwYW5lbC5wYXJlbnRzKFwiLnNjcm9sbGVyLTJGS0ZQR1wiKTtcclxuICAgICAgICAvLyBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lclswXSwgcGFuZWxbMF0pKSByZXR1cm47XHJcbiAgICAgICAgLy8gY29udGFpbmVyLmFuaW1hdGUoe1xyXG4gICAgICAgIC8vICAgICBzY3JvbGxUb3A6IHBhbmVsLm9mZnNldCgpLnRvcCAtIGNvbnRhaW5lci5vZmZzZXQoKS50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wKCkgLSAzMFxyXG4gICAgICAgIC8vIH0sIDMwMCk7XHJcblxyXG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnBhbmVsUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCIuc2Nyb2xsZXJcIik7XHJcbiAgICAgICAgICAgIGlmICghaXNIaWRkZW4oY29udGFpbmVyLCB0aGlzTm9kZSkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGVPZmZzZXQgPSBET00ub2Zmc2V0KHRoaXNOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0ID0gRE9NLm9mZnNldChjb250YWluZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpc05vZGVPZmZzZXQudG9wIC0gY29udGFpbmVyT2Zmc2V0LnRvcCArIGNvbnRhaW5lci5zY3JvbGxUb3AgLSAzMDtcclxuICAgICAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQgPiBvcmlnaW5hbCkgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsICsgKHByb2dyZXNzICogKGVuZFBvaW50IC0gb3JpZ2luYWwpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBvcmlnaW5hbCAtIChwcm9ncmVzcyAqIChvcmlnaW5hbCAtIGVuZFBvaW50KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTt9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSAmJiB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMucHJvcHMuZW5hYmxlZCA9ICF0aGlzLnByb3BzLmVuYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKSB7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSBTdHJpbmdzLkFkZG9ucy50aXRsZS5zcGxpdCgvKHt7W0EtWmEtel0rfX0pLyk7XHJcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7bmFtZX19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW25hbWVJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLW5hbWVcIn0sIG5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtYXV0aG9yXCJ9LCBhdXRob3IpO1xyXG4gICAgICAgIHJldHVybiB0aXRsZS5mbGF0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoYWRkb24ubmFtZSk7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKFwiQWRkb24gU2V0dGluZ3NcIiwgXCJVbmFibGUgdG8gZ2V0IHNldHRpbmdzIHBhbmVsIGZvciBcIiArIG5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wcyA9IHtpZDogYCR7bmFtZX0tc2V0dGluZ3NgLCBjbGFzc05hbWU6IFwiYWRkb24tc2V0dGluZ3NcIiwgcmVmOiB0aGlzLnBhbmVsUmVmfTtcclxuICAgICAgICBpZiAodHlwZW9mKHNldHRpbmdzUGFuZWwpID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgTG9nZ2VyLndhcm4oXCJBZGRvbiBTZXR0aW5nc1wiLCBcIlVzaW5nIGEgRE9NU3RyaW5nIGlzIG9mZmljaWFsbHkgZGVwcmVjYXRlZC5cIik7XHJcbiAgICAgICAgICAgIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0gdGhpcy5zZXR0aW5nc1BhbmVsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1vcGVuIGJkLXN3aXRjaC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jbG9zZVwiIG9uQ2xpY2s9e3RoaXMuY2xvc2VTZXR0aW5nc30+PENsb3NlQnV0dG9uIC8+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB7Li4ucHJvcHN9PjxFcnJvckJvdW5kYXJ5Pnt0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBSZWFjdC5Db21wb25lbnQgfHwgdHlwZW9mKHRoaXMuc2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuc2V0dGluZ3NQYW5lbCA6IG51bGx9PC9FcnJvckJvdW5kYXJ5PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkTGluayh3aGljaCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucHJvcHMuYWRkb25bd2hpY2hdO1xyXG4gICAgICAgIGlmICghdXJsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBsaW5rID0gPGEgY2xhc3NOYW1lPVwiYmQtbGluayBiZC1saW5rLXdlYnNpdGVcIiBocmVmPXt1cmx9IHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj57U3RyaW5ncy5BZGRvbnNbd2hpY2hdfTwvYT47XHJcbiAgICAgICAgaWYgKHdoaWNoID09IFwiaW52aXRlXCIpIHtcclxuICAgICAgICAgICAgbGluay5wcm9wcy5vbkNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3Rlci50ZXN0KGNvZGUpKSBjb2RlID0gY29kZS5tYXRjaCh0ZXN0ZXIpWzFdO1xyXG4gICAgICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuTGF5ZXJTdGFjay5wb3BMYXllcigpO1xyXG4gICAgICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGluaztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gW1wid2Vic2l0ZVwiLCBcInNvdXJjZVwiLCBcImludml0ZVwiLCBcImRvbmF0ZVwiLCBcInBhdHJlb25cIl07XHJcbiAgICAgICAgaWYgKCFsaW5rcy5zb21lKGwgPT4gdGhpcy5wcm9wcy5hZGRvbltsXSkgJiYgIXRoaXMucHJvcHMuaGFzU2V0dGluZ3MpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGxpbmtDb21wb25lbnRzID0gbGlua3MubWFwKHRoaXMuYnVpbGRMaW5rLmJpbmQodGhpcykpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJkLWxpbmtzXCI+e2xpbmtDb21wb25lbnRzLm1hcCgoY29tcCwgaSkgPT4gaSA8IGxpbmtDb21wb25lbnRzLmxlbmd0aCAtIDEgPyBbY29tcCwgXCIgfCBcIl0gOiBjb21wKS5mbGF0KCl9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmhhc1NldHRpbmdzICYmIDxidXR0b24gb25DbGljaz17dGhpcy5zaG93U2V0dGluZ3N9IGNsYXNzTmFtZT1cImJkLWJ1dHRvbiBiZC1idXR0b24tYWRkb24tc2V0dGluZ3NcIiBkaXNhYmxlZD17IXRoaXMucHJvcHMuZW5hYmxlZH0+e1N0cmluZ3MuQWRkb25zLmFkZG9uU2V0dGluZ3N9PC9idXR0b24+fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VCdXR0b24odGl0bGUsIGNoaWxkcmVuLCBhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gIDxUb29sdGlwIGNvbG9yPVwiYmxhY2tcIiBwb3NpdGlvbj1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgICAgICAgICB7KHByb3BzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IHsuLi5wcm9wc30gY2xhc3NOYW1lPVwiYmQtYWRkb24tYnV0dG9uXCIgb25DbGljaz17YWN0aW9ufT57Y2hpbGRyZW59PC9kaXY+O1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5nc09wZW4pIHJldHVybiB0aGlzLnNldHRpbmdzQ29tcG9uZW50O1xyXG5cclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb247XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLmF1dGhvcik7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldFN0cmluZyhhZGRvbi5kZXNjcmlwdGlvbik7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnZlcnNpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBpZD17YCR7YWRkb24uaWR9LWNhcmRgfSBjbGFzc05hbWU9XCJiZC1hZGRvbi1jYXJkIHNldHRpbmdzLWNsb3NlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiZC10aXRsZVwiPnt0aGlzLmJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuZWRpdEFkZG9uICYmIHRoaXMubWFrZUJ1dHRvbihTdHJpbmdzLkFkZG9ucy5lZGl0QWRkb24sIDxFZGl0SWNvbiAvPiwgdGhpcy5wcm9wcy5lZGl0QWRkb24pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmRlbGV0ZUFkZG9uICYmIHRoaXMubWFrZUJ1dHRvbihTdHJpbmdzLkFkZG9ucy5kZWxldGVBZGRvbiwgPERlbGV0ZUljb24gLz4sIHRoaXMucHJvcHMuZGVsZXRlQWRkb24pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNob3dSZWxvYWRJY29uICYmIHRoaXMubWFrZUJ1dHRvbihTdHJpbmdzLkFkZG9ucy5yZWxvYWQsIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLXJlbG9hZCBiZC1yZWxvYWQtY2FyZFwiIC8+LCB0aGlzLnJlbG9hZCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaCBjaGVja2VkPXt0aGlzLnByb3BzLmVuYWJsZWR9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1kZXNjcmlwdGlvbi13cmFwIHNjcm9sbGVyLXdyYXAgZmFkZVwiPjxkaXYgY2xhc3NOYW1lPVwiYmQtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIj57ZGVzY3JpcHRpb259PC9kaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuZm9vdGVyfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/addoncard.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _icons_edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/edit */ \"./src/ui/icons/edit.jsx\");\n/* harmony import */ var _icons_delete__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/delete */ \"./src/ui/icons/delete.jsx\");\n/* harmony import */ var _components_switch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/switch */ \"./src/ui/settings/components/switch.jsx\");\n/* harmony import */ var _errorboundary__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../errorboundary */ \"./src/ui/errorboundary.jsx\");\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\n\n\n\n\nconst Tooltip = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"Tooltip\");\nclass AddonCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n settingsOpen: false\n };\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.onChange = this.onChange.bind(this);\n this.reload = this.reload.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.closeSettings = this.closeSettings.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.addon = this.props.reload(this.props.addon.id);\n this.forceUpdate();\n }\n\n componentDidUpdate() {\n if (!this.state.settingsOpen) return;\n if (this.settingsPanel instanceof Node) this.panelRef.current.appendChild(this.settingsPanel);\n setImmediate(() => {\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const thisNode = this.panelRef.current;\n const container = thisNode.closest(\".scroller\");\n if (!isHidden(container, thisNode)) return;\n const thisNodeOffset = modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].offset(thisNode);\n const containerOffset = modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].offset(container);\n const original = container.scrollTop;\n const endPoint = thisNodeOffset.top - containerOffset.top + container.scrollTop - 30;\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].animate({\n duration: 300,\n update: function (progress) {\n if (endPoint > original) container.scrollTop = original + progress * (endPoint - original);else container.scrollTop = original - progress * (original - endPoint);\n }\n });\n });\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n onChange() {\n this.props.onChange && this.props.onChange(this.props.addon.id);\n this.props.enabled = !this.props.enabled;\n }\n\n showSettings() {\n if (!this.props.hasSettings) return;\n this.setState({\n settingsOpen: true\n });\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({\n settingsOpen: false\n });\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-author\"\n }, author);\n return title.flat();\n }\n\n get settingsComponent() {\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n\n try {\n this.settingsPanel = this.props.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"Addon Settings\", \"Unable to get settings panel for \" + name + \".\", err);\n }\n\n const props = {\n id: `${name}-settings`,\n className: \"addon-settings\",\n ref: this.panelRef\n };\n\n if (typeof settingsPanel == \"string\") {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].warn(\"Addon Settings\", \"Using a DOMString is officially deprecated.\");\n props.dangerouslySetInnerHTML = this.settingsPanel;\n }\n\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-card settings-open bd-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-close\",\n onClick: this.closeSettings\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", props, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_errorboundary__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component || typeof this.settingsPanel === \"function\" ? this.settingsPanel : null)));\n }\n\n buildLink(which) {\n const url = this.props.addon[which];\n if (!url) return null;\n const link = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bd-link bd-link-website\",\n href: url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons[which]);\n\n if (which == \"invite\") {\n link.props.onClick = function (event) {\n event.preventDefault();\n event.stopPropagation();\n let code = url;\n const tester = /\\.gg\\/(.*)$/;\n if (tester.test(code)) code = code.match(tester)[1];\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DiscordModules\"].LayerStack.popLayer();\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DiscordModules\"].InviteActions.acceptInviteAndTransitionToInviteChannel(code);\n };\n }\n\n return link;\n }\n\n get footer() {\n const links = [\"website\", \"source\", \"invite\", \"donate\", \"patreon\"];\n if (!links.some(l => this.props.addon[l]) && !this.props.hasSettings) return null;\n const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-links\"\n }, linkComponents.map((comp, i) => i < linkComponents.length - 1 ? [comp, \" | \"] : comp).flat()), this.props.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bd-button bd-button-addon-settings\",\n disabled: !this.props.enabled\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.addonSettings));\n }\n\n makeButton(title, children, action) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(Tooltip, {\n color: \"black\",\n position: \"top\",\n text: title\n }, props => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", _extends({}, props, {\n className: \"bd-addon-button\",\n onClick: action\n }), children);\n });\n }\n\n render() {\n if (this.state.settingsOpen) return this.settingsComponent;\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n const author = this.getString(addon.author);\n const description = this.getString(addon.description);\n const version = this.getString(addon.version);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `${addon.id}-card`,\n className: \"bd-addon-card settings-closed\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls\"\n }, this.props.editAddon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.editAddon, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_edit__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), this.props.editAddon), this.props.deleteAddon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_delete__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null), this.props.deleteAddon), this.props.showReloadIcon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.reload, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload bd-reload-card\"\n }), this.reload), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_switch__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n checked: this.props.enabled,\n onChange: this.onChange\n }))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description scroller\"\n }, description)), this.footer);\n }\n\n}\nconst originalRender = AddonCard.prototype.render;\nObject.defineProperty(AddonCard.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function () {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].warn(\"AddonCard\", \"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");\n },\n get: () => originalRender\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9uY2FyZC5qc3g/NjM3MyJdLCJuYW1lcyI6WyJUb29sdGlwIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQWRkb25DYXJkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJzZXR0aW5nc09wZW4iLCJzZXR0aW5nc1BhbmVsIiwicGFuZWxSZWYiLCJjcmVhdGVSZWYiLCJvbkNoYW5nZSIsImJpbmQiLCJyZWxvYWQiLCJzaG93U2V0dGluZ3MiLCJjbG9zZVNldHRpbmdzIiwiYWRkb24iLCJpZCIsImZvcmNlVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiTm9kZSIsImN1cnJlbnQiLCJhcHBlbmRDaGlsZCIsInNldEltbWVkaWF0ZSIsImlzSGlkZGVuIiwiY29udGFpbmVyIiwiZWxlbWVudCIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiY2xpZW50SGVpZ2h0IiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJ0aGlzTm9kZSIsImNsb3Nlc3QiLCJ0aGlzTm9kZU9mZnNldCIsIkRPTSIsIm9mZnNldCIsImNvbnRhaW5lck9mZnNldCIsIm9yaWdpbmFsIiwiZW5kUG9pbnQiLCJ0b3AiLCJhbmltYXRlIiwiZHVyYXRpb24iLCJ1cGRhdGUiLCJwcm9ncmVzcyIsImdldFN0cmluZyIsInZhbHVlIiwidG9TdHJpbmciLCJlbmFibGVkIiwiaGFzU2V0dGluZ3MiLCJzZXRTdGF0ZSIsImlubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lIiwidmVyc2lvbiIsImF1dGhvciIsInRpdGxlIiwiU3RyaW5ncyIsIkFkZG9ucyIsInNwbGl0IiwibmFtZUluZGV4IiwiZmluZEluZGV4IiwicyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsImZsYXQiLCJzZXR0aW5nc0NvbXBvbmVudCIsImdldFNldHRpbmdzUGFuZWwiLCJlcnIiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwicmVmIiwid2FybiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRMaW5rIiwid2hpY2giLCJ1cmwiLCJsaW5rIiwib25DbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJjb2RlIiwidGVzdGVyIiwidGVzdCIsIm1hdGNoIiwiRGlzY29yZE1vZHVsZXMiLCJMYXllclN0YWNrIiwicG9wTGF5ZXIiLCJJbnZpdGVBY3Rpb25zIiwiYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbCIsImZvb3RlciIsImxpbmtzIiwic29tZSIsImwiLCJsaW5rQ29tcG9uZW50cyIsIm1hcCIsImZpbHRlciIsImMiLCJjb21wIiwiaSIsImxlbmd0aCIsImFkZG9uU2V0dGluZ3MiLCJtYWtlQnV0dG9uIiwiY2hpbGRyZW4iLCJhY3Rpb24iLCJyZW5kZXIiLCJkZXNjcmlwdGlvbiIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwic2hvd1JlbG9hZEljb24iLCJvcmlnaW5hbFJlbmRlciIsInByb3RvdHlwZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsInNldCIsImdldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLE9BQU8sR0FBR0Msc0RBQWMsQ0FBQ0MsZ0JBQWYsQ0FBZ0MsU0FBaEMsQ0FBaEI7QUFFZSxNQUFNQyxTQUFOLFNBQXdCQyw2Q0FBSyxDQUFDQyxTQUE5QixDQUF3QztBQUVuREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhO0FBQ1RDLGtCQUFZLEVBQUU7QUFETCxLQUFiO0FBSUEsU0FBS0MsYUFBTCxHQUFxQixFQUFyQjtBQUNBLFNB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bnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgTG9nZ2VyLCBTdHJpbmdzLCBXZWJwYWNrTW9kdWxlcywgRE9NLCBEaXNjb3JkTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IENsb3NlQnV0dG9uIGZyb20gXCIuLi9pY29ucy9jbG9zZVwiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tIFwiLi4vaWNvbnMvZWRpdFwiO1xyXG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tIFwiLi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAgXCIuLi9lcnJvcmJvdW5kYXJ5XCI7XHJcblxyXG5jb25zdCBUb29sdGlwID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRvbkNhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbjogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3MgPSB0aGlzLnNob3dTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZXR0aW5ncyA9IHRoaXMuY2xvc2VTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVsb2FkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5hZGRvbiA9IHRoaXMucHJvcHMucmVsb2FkKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzT3BlbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBOb2RlKSB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuXHJcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNIaWRkZW4gPSAoY29udGFpbmVyLCBlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNCb3R0b20gPSBjVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVUb3AgPSBlbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIChlVG9wIDwgY1RvcCB8fCBlQm90dG9tID4gY0JvdHRvbSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZSA9IHRoaXMucGFuZWxSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpc05vZGUuY2xvc2VzdChcIi5zY3JvbGxlclwiKTtcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO31cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlICYmIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5hZGRvbi5pZCk7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5lbmFibGVkID0gIXRoaXMucHJvcHMuZW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFN0cmluZ3MuQWRkb25zLnRpdGxlLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbYXV0aG9ySW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hdXRob3JcIn0sIGF1dGhvcik7XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5uYW1lKTtcclxuICAgICAgICB0cnkgeyB0aGlzLnNldHRpbmdzUGFuZWwgPSB0aGlzLnByb3BzLmdldFNldHRpbmdzUGFuZWwoKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgTG9nZ2VyLnN0YWNrdHJhY2UoXCJBZGRvbiBTZXR0aW5nc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgbmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3BzID0ge2lkOiBgJHtuYW1lfS1zZXR0aW5nc2AsIGNsYXNzTmFtZTogXCJhZGRvbi1zZXR0aW5nc1wiLCByZWY6IHRoaXMucGFuZWxSZWZ9O1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc2V0dGluZ3NQYW5lbCkgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBMb2dnZXIud2FybihcIkFkZG9uIFNldHRpbmdzXCIsIFwiVXNpbmcgYSBET01TdHJpbmcgaXMgb2ZmaWNpYWxseSBkZXByZWNhdGVkLlwiKTtcclxuICAgICAgICAgICAgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB0aGlzLnNldHRpbmdzUGFuZWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gYmQtc3dpdGNoLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNsb3NlXCIgb25DbGljaz17dGhpcy5jbG9zZVNldHRpbmdzfT48Q2xvc2VCdXR0b24gLz48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHsuLi5wcm9wc30+PEVycm9yQm91bmRhcnk+e3RoaXMuc2V0dGluZ3NQYW5lbCBpbnN0YW5jZW9mIFJlYWN0LkNvbXBvbmVudCB8fCB0eXBlb2YodGhpcy5zZXR0aW5nc1BhbmVsKSA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy5zZXR0aW5nc1BhbmVsIDogbnVsbH08L0Vycm9yQm91bmRhcnk+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRMaW5rKHdoaWNoKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5wcm9wcy5hZGRvblt3aGljaF07XHJcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSA8YSBjbGFzc05hbWU9XCJiZC1saW5rIGJkLWxpbmstd2Vic2l0ZVwiIGhyZWY9e3VybH0gdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPntTdHJpbmdzLkFkZG9uc1t3aGljaF19PC9hPjtcclxuICAgICAgICBpZiAod2hpY2ggPT0gXCJpbnZpdGVcIikge1xyXG4gICAgICAgICAgICBsaW5rLnByb3BzLm9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0ZXIgPSAvXFwuZ2dcXC8oLiopJC87XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBEaXNjb3JkTW9kdWxlcy5MYXllclN0YWNrLnBvcExheWVyKCk7XHJcbiAgICAgICAgICAgICAgICBEaXNjb3JkTW9kdWxlcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoY29kZSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaW5rO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBbXCJ3ZWJzaXRlXCIsIFwic291cmNlXCIsIFwiaW52aXRlXCIsIFwiZG9uYXRlXCIsIFwicGF0cmVvblwiXTtcclxuICAgICAgICBpZiAoIWxpbmtzLnNvbWUobCA9PiB0aGlzLnByb3BzLmFkZG9uW2xdKSAmJiAhdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgbGlua0NvbXBvbmVudHMgPSBsaW5rcy5tYXAodGhpcy5idWlsZExpbmsuYmluZCh0aGlzKSkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmQtbGlua3NcIj57bGlua0NvbXBvbmVudHMubWFwKChjb21wLCBpKSA9PiBpIDwgbGlua0NvbXBvbmVudHMubGVuZ3RoIC0gMSA/IFtjb21wLCBcIiB8IFwiXSA6IGNvbXApLmZsYXQoKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuaGFzU2V0dGluZ3MgJiYgPGJ1dHRvbiBvbkNsaWNrPXt0aGlzLnNob3dTZXR0aW5nc30gY2xhc3NOYW1lPVwiYmQtYnV0dG9uIGJkLWJ1dHRvbi1hZGRvbi1zZXR0aW5nc1wiIGRpc2FibGVkPXshdGhpcy5wcm9wcy5lbmFibGVkfT57U3RyaW5ncy5BZGRvbnMuYWRkb25TZXR0aW5nc308L2J1dHRvbj59XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUJ1dHRvbih0aXRsZSwgY2hpbGRyZW4sIGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiAgPFRvb2x0aXAgY29sb3I9XCJibGFja1wiIHBvc2l0aW9uPVwidG9wXCIgdGV4dD17dGl0bGV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHsocHJvcHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgey4uLnByb3BzfSBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj47XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD47XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnNldHRpbmdzT3BlbikgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoYWRkb24ubmFtZSk7XHJcbiAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRTdHJpbmcoYWRkb24uYXV0aG9yKTtcclxuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRTdHJpbmcoYWRkb24udmVyc2lvbik7XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGlkPXtgJHthZGRvbi5pZH0tY2FyZGB9IGNsYXNzTmFtZT1cImJkLWFkZG9uLWNhcmQgc2V0dGluZ3MtY2xvc2VkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJkLXRpdGxlXCI+e3RoaXMuYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5lZGl0QWRkb24gJiYgdGhpcy5tYWtlQnV0dG9uKFN0cmluZ3MuQWRkb25zLmVkaXRBZGRvbiwgPEVkaXRJY29uIC8+LCB0aGlzLnByb3BzLmVkaXRBZGRvbil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuZGVsZXRlQWRkb24gJiYgdGhpcy5tYWtlQnV0dG9uKFN0cmluZ3MuQWRkb25zLmRlbGV0ZUFkZG9uLCA8RGVsZXRlSWNvbiAvPiwgdGhpcy5wcm9wcy5kZWxldGVBZGRvbil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuc2hvd1JlbG9hZEljb24gJiYgdGhpcy5tYWtlQnV0dG9uKFN0cmluZ3MuQWRkb25zLnJlbG9hZCwgPFJlbG9hZEljb24gY2xhc3NOYW1lPVwiYmQtcmVsb2FkIGJkLXJlbG9hZC1jYXJkXCIgLz4sIHRoaXMucmVsb2FkKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoIGNoZWNrZWQ9e3RoaXMucHJvcHMuZW5hYmxlZH0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCI+PGRpdiBjbGFzc05hbWU9XCJiZC1kZXNjcmlwdGlvbiBzY3JvbGxlclwiPntkZXNjcmlwdGlvbn08L2Rpdj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5mb290ZXJ9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQWRkb25DYXJkLnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBZGRvbkNhcmQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge0xvZ2dlci53YXJuKFwiQWRkb25DYXJkXCIsIFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/addoncard.jsx\n"); /***/ }), @@ -1007,7 +995,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 AddonList; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _addoncard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addoncard */ \"./src/ui/settings/addoncard.jsx\");\n/* harmony import */ var _components_dropdown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/dropdown */ \"./src/ui/settings/components/dropdown.jsx\");\n/* harmony import */ var _components_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/search */ \"./src/ui/settings/components/search.jsx\");\n/* harmony import */ var _errorboundary__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../errorboundary */ \"./src/ui/errorboundary.jsx\");\n\n\n\n\n\n\n\n\nclass AddonList extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n sort: \"name\",\n ascending: true,\n query: \"\"\n };\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n this.update = this.update.bind(this);\n }\n\n componentDidMount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-unloaded`, this.update);\n }\n\n componentWillUnmount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-unloaded`, this.update);\n }\n\n update() {\n this.forceUpdate();\n }\n\n reload() {\n if (this.props.refreshList) this.props.refreshList();\n this.forceUpdate();\n }\n\n reverse(value) {\n this.setState({\n ascending: value\n });\n }\n\n sort(value) {\n this.setState({\n sort: value\n });\n }\n\n search(event) {\n this.setState({\n query: event.target.value.toLocaleLowerCase()\n });\n }\n\n get sortOptions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.name,\n value: \"name\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.author,\n value: \"author\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.version,\n value: \"version\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.added,\n value: \"added\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.modified,\n value: \"modified\"\n }];\n }\n\n get directions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.ascending,\n value: true\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.descending,\n value: false\n }];\n }\n\n render() {\n const {\n title,\n folder,\n addonList,\n addonState,\n onChange,\n reload\n } = this.props;\n const showReloadIcon = !modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"autoReload\");\n const button = folder ? {\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.openFolder.format({\n type: title\n }),\n onClick: () => {\n const shell = __webpack_require__(/*! electron */ \"electron\").shell;\n\n const open = shell.openItem || shell.openPath;\n open(folder);\n }\n } : null;\n const sortedAddons = addonList.sort((a, b) => {\n const first = a[this.state.sort];\n const second = b[this.state.sort];\n if (typeof first == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"title\",\n text: title,\n button: button,\n otherChildren: showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"bd-reload\",\n onClick: this.reload.bind(this)\n })\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls bd-addon-controls\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_search__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onChange: this.search,\n placeholder: `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.search.format({\n type: this.props.title\n })}...`\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-dropdowns\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.sortBy, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.sortOptions,\n onChange: this.sort,\n style: \"transparent\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.order, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.directions,\n onChange: this.reverse,\n style: \"transparent\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n key: \"addonList\",\n className: \"bd-addon-list\"\n }, sortedAddons.map(addon => {\n if (this.state.query) {\n let matches = addon.name.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.author.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.description.toLocaleLowerCase().includes(this.state.query);\n if (!matches) return null;\n }\n\n const hasSettings = addon.type && typeof addon.plugin.getSettingsPanel === \"function\";\n const getSettings = hasSettings && addon.plugin.getSettingsPanel.bind(addon.plugin);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_errorboundary__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_addoncard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n editAddon: this.editAddon.bind(this, addon.id),\n deleteAddon: this.deleteAddon.bind(this, addon.id),\n showReloadIcon: showReloadIcon,\n key: addon.id,\n enabled: addonState[addon.id],\n addon: addon,\n onChange: onChange,\n reload: reload,\n hasSettings: hasSettings,\n getSettingsPanel: getSettings\n }));\n }))];\n }\n\n editAddon(id) {\n if (this.props.editAddon) this.props.editAddon(id);\n }\n\n async deleteAddon(id) {\n const addon = this.props.addonList.find(a => a.id == id);\n const shouldDelete = await this.confirmDelete(addon);\n if (!shouldDelete) return;\n if (this.props.deleteAddon) this.props.deleteAddon(addon);\n }\n\n confirmDelete(addon) {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmAction, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.confirmDelete.format({\n name: addon.name\n }), {\n danger: true,\n confirmText: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon,\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9ubGlzdC5qc3g/NjRkMiJdLCJuYW1lcyI6WyJBZGRvbkxpc3QiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNvcnQiLCJhc2NlbmRpbmciLCJxdWVyeSIsImJpbmQiLCJyZXZlcnNlIiwic2VhcmNoIiwidXBkYXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJFdmVudHMiLCJvbiIsInByZWZpeCIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwib2ZmIiwiZm9yY2VVcGRhdGUiLCJyZWxvYWQiLCJyZWZyZXNoTGlzdCIsInZhbHVlIiwic2V0U3RhdGUiLCJldmVudCIsInRhcmdldCIsInRvTG9jYWxlTG93ZXJDYXNlIiwic29ydE9wdGlvbnMiLCJsYWJlbCIsIlN0cmluZ3MiLCJBZGRvbnMiLCJuYW1lIiwiYXV0aG9yIiwidmVyc2lvbiIsImFkZGVkIiwibW9kaWZpZWQiLCJkaXJlY3Rpb25zIiwiU29ydGluZyIsImRlc2NlbmRpbmciLCJyZW5kZXIiLCJ0aXRsZSIsImZvbGRlciIsImFkZG9uTGlzdCIsImFkZG9uU3RhdGUiLCJvbkNoYW5nZSIsInNob3dSZWxvYWRJY29uIiwiU2V0dGluZ3MiLCJnZXQiLCJidXR0b24iLCJvcGVuRm9sZGVyIiwiZm9ybWF0IiwidHlwZSIsIm9uQ2xpY2siLCJzaGVsbCIsInJlcXVpcmUiLCJvcGVuIiwib3Blbkl0ZW0iLCJvcGVuUGF0aCIsInNvcnRlZEFkZG9ucyIsImEiLCJiIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwic29ydEJ5Iiwib3JkZXIiLCJtYXAiLCJhZGRvbiIsIm1hdGNoZXMiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwiaGFzU2V0dGluZ3MiLCJwbHVnaW4iLCJnZXRTZXR0aW5nc1BhbmVsIiwiZ2V0U2V0dGluZ3MiLCJlZGl0QWRkb24iLCJpZCIsImRlbGV0ZUFkZG9uIiwiZmluZCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsImNvbmZpcm1BY3Rpb24iLCJkYW5nZXIiLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxNQUFNQSxTQUFOLFNBQXdCQyw2Q0FBSyxDQUFDQyxTQUE5QixDQUF3QztBQUVuREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhO0FBQUNDLFVBQUksRUFBRSxNQUFQO0FBQWVDLGVBQVMsRUFBRSxJQUExQjtBQUFnQ0MsV0FBSyxFQUFFO0FBQXZDLEtBQWI7QUFDQSxTQUFLRixJQUFMLEdBQVksS0FBS0EsSUFBTCxDQUFVRyxJQUFWLENBQWUsSUFBZixDQUFaO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtBLE9BQUwsQ0FBYUQsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBQ0EsU0FBS0UsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWUYsSUFBWixDQUFpQixJQUFqQixDQUFkO0FBQ0EsU0FBS0csTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWUgsSUFBWixDQUFpQixJQUFqQixDQUFkO0FBQ0g7O0FBRURJLG1CQUFpQixHQUFHO0FBQ2hCQyxrREFBTSxDQUFDQyxFQUFQLENBQVcsR0FBRSxLQUFLWCxLQUFMLENBQVdZLE1BQU8sU0FBL0IsRUFBeUMsS0FBS0osTUFBOUM7QUFDQUUsa0RBQU0sQ0FBQ0MsRUFBUCxDQUFXLEdBQUUsS0FBS1gsS0FBTCxDQUFXWSxNQUFPLFdBQS9CLEVBQTJDLEtBQUtKLE1BQWhEO0FBQ0g7O0FBRURLLHNCQUFvQixHQUFHO0FBQ25CSCxrREFBTSxDQUFD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QUFyQixDQUEwQm5CLENBQUMsSUFBSUEsQ0FBQyxDQUFDaUIsRUFBRixJQUFRQSxFQUF2QyxDQUFkO0FBQ0EsVUFBTUcsWUFBWSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxDQUFtQmIsS0FBbkIsQ0FBM0I7QUFDQSxRQUFJLENBQUNZLFlBQUwsRUFBbUI7QUFDbkIsUUFBSSxLQUFLM0UsS0FBTCxDQUFXeUUsV0FBZixFQUE0QixLQUFLekUsS0FBTCxDQUFXeUUsV0FBWCxDQUF1QlYsS0FBdkI7QUFDL0I7O0FBRURhLGVBQWEsQ0FBQ2IsS0FBRCxFQUFRO0FBQ2pCLFdBQU8sSUFBSWMsT0FBSixDQUFZQyxPQUFPLElBQUk7QUFDMUJDLHFEQUFNLENBQUNDLHFCQUFQLENBQTZCdkQsK0NBQU8sQ0FBQ3NELE1BQVIsQ0FBZUUsYUFBNUMsRUFBMkR4RCwrQ0FBTyxDQUFDQyxNQUFSLENBQWVrRCxhQUFmLENBQTZCOUIsTUFBN0IsQ0FBb0M7QUFBQ25CLFlBQUksRUFBRW9DLEtBQUssQ0FBQ3BDO0FBQWIsT0FBcEMsQ0FBM0QsRUFBb0g7QUFDaEh1RCxjQUFNLEVBQUUsSUFEd0c7QUFFaEhDLG1CQUFXLEVBQUUxRCwrQ0FBTyxDQUFDQyxNQUFSLENBQWUrQyxXQUZvRjtBQUdoSFcsaUJBQVMsRUFBRSxNQUFNO0FBQUNOLGlCQUFPLENBQUMsSUFBRCxDQUFQO0FBQWUsU0FIK0U7QUFJaEhPLGdCQUFRLEVBQUUsTUFBTTtBQUFDUCxpQkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUFnQjtBQUorRSxPQUFwSDtBQU1ILEtBUE0sQ0FBUDtBQVFIOztBQWhJa0QiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvYWRkb25saXN0LmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIFNldHRpbmdzLCBTdHJpbmdzLCBFdmVudHN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi9tb2RhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vdGl0bGVcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG5pbXBvcnQgQWRkb25DYXJkIGZyb20gXCIuL2FkZG9uY2FyZFwiO1xyXG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vY29tcG9uZW50cy9kcm9wZG93blwiO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gXCIuL2NvbXBvbmVudHMvc2VhcmNoXCI7XHJcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gIFwiLi4vZXJyb3Jib3VuZGFyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkb25MaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcclxuICAgICAgICB0aGlzLnNvcnQgPSB0aGlzLnNvcnQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJldmVyc2UgPSB0aGlzLnJldmVyc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBFdmVudHMub24oYCR7dGhpcy5wcm9wcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICBFdmVudHMub24oYCR7dGhpcy5wcm9wcy5wcmVmaXh9LXVubG9hZGVkYCwgdGhpcy51cGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIEV2ZW50cy5vZmYoYCR7dGhpcy5wcm9wcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICBFdmVudHMub2ZmKGAke3RoaXMucHJvcHMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZWZyZXNoTGlzdCkgdGhpcy5wcm9wcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzb3J0T3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLm5hbWUsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMuYXV0aG9yLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMudmVyc2lvbiwgdmFsdWU6IFwidmVyc2lvblwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLkFkZG9ucy5hZGRlZCwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMubW9kaWZpZWQsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuU29ydGluZy5hc2NlbmRpbmcsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLlNvcnRpbmcuZGVzY2VuZGluZywgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgZm9sZGVyLCBhZGRvbkxpc3QsIGFkZG9uU3RhdGUsIG9uQ2hhbmdlLCByZWxvYWR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBzaG93UmVsb2FkSWNvbiA9ICFTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImFkZG9uc1wiLCBcImF1dG9SZWxvYWRcIik7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZm9sZGVyID8ge3RpdGxlOiBTdHJpbmdzLkFkZG9ucy5vcGVuRm9sZGVyLmZvcm1hdCh7dHlwZTogdGl0bGV9KSwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaGVsbCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbDtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IHNoZWxsLm9wZW5JdGVtIHx8IHNoZWxsLm9wZW5QYXRoO1xyXG4gICAgICAgICAgICBvcGVuKGZvbGRlcik7XHJcbiAgICAgICAgfX0gOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEFkZG9ucyA9IGFkZG9uTGlzdC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gYVt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBiW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YoZmlyc3QpID09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdC50b0xvY2FsZUxvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoc2Vjb25kLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QgPiBzZWNvbmQpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoc2Vjb25kID4gZmlyc3QpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmFzY2VuZGluZykgc29ydGVkQWRkb25zLnJldmVyc2UoKTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8U2V0dGluZ3NUaXRsZSBrZXk9XCJ0aXRsZVwiIHRleHQ9e3RpdGxlfSBidXR0b249e2J1dHRvbn0gb3RoZXJDaGlsZHJlbj17c2hvd1JlbG9hZEljb24gJiYgPFJlbG9hZEljb24gY2xhc3NOYW1lPVwiYmQtcmVsb2FkXCIgb25DbGljaz17dGhpcy5yZWxvYWQuYmluZCh0aGlzKX0gLz59IC8+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzIGJkLWFkZG9uLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICA8U2VhcmNoIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH0gcGxhY2Vob2xkZXI9e2Ake1N0cmluZ3MuQWRkb25zLnNlYXJjaC5mb3JtYXQoe3R5cGU6IHRoaXMucHJvcHMudGl0bGV9KX0uLi5gfSAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPntTdHJpbmdzLlNvcnRpbmcuc29ydEJ5fTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5zb3J0T3B0aW9uc30gb25DaGFuZ2U9e3RoaXMuc29ydH0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57U3RyaW5ncy5Tb3J0aW5nLm9yZGVyfTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYga2V5PVwiYWRkb25MaXN0XCIgY2xhc3NOYW1lPXtcImJkLWFkZG9uLWxpc3RcIn0+XHJcbiAgICAgICAgICAgIHtzb3J0ZWRBZGRvbnMubWFwKGFkZG9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBhZGRvbi5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYWRkb24uYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYWRkb24uZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzU2V0dGluZ3MgPSBhZGRvbi50eXBlICYmIHR5cGVvZihhZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdldFNldHRpbmdzID0gaGFzU2V0dGluZ3MgJiYgYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwuYmluZChhZGRvbi5wbHVnaW4pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgZWRpdEFkZG9uPXt0aGlzLmVkaXRBZGRvbi5iaW5kKHRoaXMsIGFkZG9uLmlkKX0gZGVsZXRlQWRkb249e3RoaXMuZGVsZXRlQWRkb24uYmluZCh0aGlzLCBhZGRvbi5pZCl9IHNob3dSZWxvYWRJY29uPXtzaG93UmVsb2FkSWNvbn0ga2V5PXthZGRvbi5pZH0gZW5hYmxlZD17YWRkb25TdGF0ZVthZGRvbi5pZF19IGFkZG9uPXthZGRvbn0gb25DaGFuZ2U9e29uQ2hhbmdlfSByZWxvYWQ9e3JlbG9hZH0gaGFzU2V0dGluZ3M9e2hhc1NldHRpbmdzfSBnZXRTZXR0aW5nc1BhbmVsPXtnZXRTZXR0aW5nc30gLz48L0Vycm9yQm91bmRhcnk+O1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0QWRkb24oaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5lZGl0QWRkb24pIHRoaXMucHJvcHMuZWRpdEFkZG9uKGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVBZGRvbihpZCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbkxpc3QuZmluZChhID0+IGEuaWQgPT0gaWQpO1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShhZGRvbik7XHJcbiAgICAgICAgaWYgKCFzaG91bGREZWxldGUpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kZWxldGVBZGRvbikgdGhpcy5wcm9wcy5kZWxldGVBZGRvbihhZGRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShhZGRvbikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgTW9kYWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChTdHJpbmdzLk1vZGFscy5jb25maXJtQWN0aW9uLCBTdHJpbmdzLkFkZG9ucy5jb25maXJtRGVsZXRlLmZvcm1hdCh7bmFtZTogYWRkb24ubmFtZX0pLCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogU3RyaW5ncy5BZGRvbnMuZGVsZXRlQWRkb24sXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/addonlist.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonList; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _addoncard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addoncard */ \"./src/ui/settings/addoncard.jsx\");\n/* harmony import */ var _components_dropdown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/dropdown */ \"./src/ui/settings/components/dropdown.jsx\");\n/* harmony import */ var _components_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/search */ \"./src/ui/settings/components/search.jsx\");\n/* harmony import */ var _errorboundary__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../errorboundary */ \"./src/ui/errorboundary.jsx\");\n\n\n\n\n\n\n\n\nclass AddonList extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n sort: \"name\",\n ascending: true,\n query: \"\"\n };\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n this.update = this.update.bind(this);\n }\n\n componentDidMount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-unloaded`, this.update);\n }\n\n componentWillUnmount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-unloaded`, this.update);\n }\n\n update() {\n this.forceUpdate();\n }\n\n reload() {\n if (this.props.refreshList) this.props.refreshList();\n this.forceUpdate();\n }\n\n reverse(value) {\n this.setState({\n ascending: value\n });\n }\n\n sort(value) {\n this.setState({\n sort: value\n });\n }\n\n search(event) {\n this.setState({\n query: event.target.value.toLocaleLowerCase()\n });\n }\n\n get sortOptions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.name,\n value: \"name\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.author,\n value: \"author\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.version,\n value: \"version\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.added,\n value: \"added\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.modified,\n value: \"modified\"\n }];\n }\n\n get directions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.ascending,\n value: true\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.descending,\n value: false\n }];\n }\n\n render() {\n const {\n title,\n folder,\n addonList,\n addonState,\n onChange,\n reload\n } = this.props;\n const showReloadIcon = !modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"autoReload\");\n const button = folder ? {\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.openFolder.format({\n type: title\n }),\n onClick: () => {\n const shell = __webpack_require__(/*! electron */ \"electron\").shell;\n\n const open = shell.openItem || shell.openPath;\n open(folder);\n }\n } : null;\n const sortedAddons = addonList.sort((a, b) => {\n const first = a[this.state.sort];\n const second = b[this.state.sort];\n if (typeof first == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"title\",\n text: title,\n button: button,\n otherChildren: showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"bd-reload\",\n onClick: this.reload.bind(this)\n })\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls bd-addon-controls\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_search__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onChange: this.search,\n placeholder: `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.search.format({\n type: this.props.title\n })}...`\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-dropdowns\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.sortBy, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.sortOptions,\n onChange: this.sort,\n style: \"transparent\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.order, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.directions,\n onChange: this.reverse,\n style: \"transparent\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n key: \"addonList\",\n className: \"bd-addon-list\"\n }, sortedAddons.map(addon => {\n if (this.state.query) {\n let matches = addon.name.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.author.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.description.toLocaleLowerCase().includes(this.state.query);\n if (!matches) return null;\n }\n\n const hasSettings = addon.type && typeof addon.plugin.getSettingsPanel === \"function\";\n const getSettings = hasSettings && addon.plugin.getSettingsPanel.bind(addon.plugin);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_errorboundary__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_addoncard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n editAddon: this.editAddon.bind(this, addon.id),\n deleteAddon: this.deleteAddon.bind(this, addon.id),\n showReloadIcon: showReloadIcon,\n key: addon.id,\n enabled: addonState[addon.id],\n addon: addon,\n onChange: onChange,\n reload: reload,\n hasSettings: hasSettings,\n getSettingsPanel: getSettings\n }));\n }))];\n }\n\n editAddon(id) {\n if (this.props.editAddon) this.props.editAddon(id);\n }\n\n async deleteAddon(id) {\n const addon = this.props.addonList.find(a => a.id == id);\n const shouldDelete = await this.confirmDelete(addon);\n if (!shouldDelete) return;\n if (this.props.deleteAddon) this.props.deleteAddon(addon);\n }\n\n confirmDelete(addon) {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmAction, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.confirmDelete.format({\n name: addon.name\n }), {\n danger: true,\n confirmText: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon,\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}\nconst originalRender = AddonList.prototype.render;\nObject.defineProperty(AddonList.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function () {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].warn(\"AddonList\", \"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");\n },\n get: () => originalRender\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9ubGlzdC5qc3g/NjRkMiJdLCJuYW1lcyI6WyJBZGRvbkxpc3QiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNvcnQiLCJhc2NlbmRpbmciLCJxdWVyeSIsImJpbmQiLCJyZXZlcnNlIiwic2VhcmNoIiwidXBkYXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJFdmVudHMiLCJvbiIsInByZWZpeCIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwib2ZmIiwiZm9yY2VVcGRhdGUiLCJyZWxvYWQiLCJyZWZyZXNoTGlzdCIsInZhbHVlIiwic2V0U3RhdGUiLCJldmVudCIsInRhcmdldCIsInRvTG9jYWxlTG93ZXJDYXNlIiwic29ydE9wdGlvbnMiLCJsYWJlbCIsIlN0cmluZ3MiLCJBZGRvbnMiLCJuYW1lIiwiYXV0aG9yIiwidmVyc2lvbiIsImFkZGVkIiwibW9kaWZpZWQiLCJkaXJlY3Rpb25zIiwiU29ydGluZyIsImRlc2NlbmRpbmciLCJyZW5kZXIiLCJ0aXRsZSIsImZvbGRlciIsImFkZG9uTGlzdCIsImFkZG9uU3RhdGUiLCJvbkNoYW5nZSIsInNob3dSZWxvYWRJY29uIiwiU2V0dGluZ3MiLCJnZXQiLCJidXR0b24iLCJvcGVuRm9sZGVyIiwiZm9ybWF0IiwidHlwZSIsIm9uQ2xpY2siLCJzaGVsbCIsInJlcXVpcmUiLCJvcGVuIiwib3Blbkl0ZW0iLCJvcGVuUGF0aCIsInNvcnRlZEFkZG9ucyIsImEiLCJiIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwic29ydEJ5Iiwib3JkZXIiLCJtYXAiLCJhZGRvbiIsIm1hdGNoZXMiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwiaGFzU2V0dGluZ3MiLCJwbHVnaW4iLCJnZXRTZXR0aW5nc1BhbmVsIiwiZ2V0U2V0dGluZ3MiLCJlZGl0QWRkb24iLCJpZCIsImRlbGV0ZUFkZG9uIiwiZmluZCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsImNvbmZpcm1BY3Rpb24iLCJkYW5nZXIiLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwib3JpZ2luYWxSZW5kZXIiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJzZXQiLCJMb2dnZXIiLCJ3YXJuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxNQUFNQSxTQUFOLFNBQXdCQyw2Q0FBSyxDQUFDQyxTQUE5QixDQUF3QztBQUVuREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhO0FBQUNDLFVBQUksRUFBRSxNQUFQO0FBQWVDLGVBQVMsRUFBRSxJQUExQjtBQUFnQ0MsV0FBSyxFQUFFO0FBQXZDLEtBQWI7QUFDQSxTQUFLRixJQUFMLEdBQVksS0FBS0EsSUFBTCxDQUFVRyxJQUFWLENBQWUsSUFBZixDQUFaO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtBLE9BQUwsQ0FBYUQsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBQ0EsU0FBS0UsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWUYsSUFBWixDQUFpQixJQUFqQixDQUFkO0FBQ0EsU0FBS0csTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWUgsSUFBWixDQUFpQixJQUFqQixDQUFkO0FBQ0g7O0FBRURJLG1CQUFpQixHQUFHO0FBQ2hCQyxrREFBTSxDQUFDQyxFQUFQLENBQVcsR0FBRSxLQUFLWCxLQUFMLENBQVdZLE1BQU8sU0FBL0IsRUFBeUMsS0FBS0osTUFBOUM7QUFDQUUsa0RBQU0sQ0FB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U0FBaEMsRUFBMkMsUUFBM0MsRUFBcUQ7QUFDakRHLFlBQVUsRUFBRSxLQURxQztBQUVqREMsY0FBWSxFQUFFLEtBRm1DO0FBR2pEQyxLQUFHLEVBQUUsWUFBVztBQUFDQyxrREFBTSxDQUFDQyxJQUFQLENBQVksV0FBWixFQUF5QixxR0FBekI7QUFBaUksR0FIakc7QUFJakRuRCxLQUFHLEVBQUUsTUFBTTJDO0FBSnNDLENBQXJEIiwiZmlsZSI6Ii4vc3JjL3VpL3NldHRpbmdzL2FkZG9ubGlzdC5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBTZXR0aW5ncywgU3RyaW5ncywgRXZlbnRzLCBMb2dnZXJ9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi9tb2RhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vdGl0bGVcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG5pbXBvcnQgQWRkb25DYXJkIGZyb20gXCIuL2FkZG9uY2FyZFwiO1xyXG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vY29tcG9uZW50cy9kcm9wZG93blwiO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gXCIuL2NvbXBvbmVudHMvc2VhcmNoXCI7XHJcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gIFwiLi4vZXJyb3Jib3VuZGFyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkb25MaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcclxuICAgICAgICB0aGlzLnNvcnQgPSB0aGlzLnNvcnQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJldmVyc2UgPSB0aGlzLnJldmVyc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBFdmVudHMub24oYCR7dGhpcy5wcm9wcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICBFdmVudHMub24oYCR7dGhpcy5wcm9wcy5wcmVmaXh9LXVubG9hZGVkYCwgdGhpcy51cGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIEV2ZW50cy5vZmYoYCR7dGhpcy5wcm9wcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICBFdmVudHMub2ZmKGAke3RoaXMucHJvcHMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZWZyZXNoTGlzdCkgdGhpcy5wcm9wcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzb3J0T3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLm5hbWUsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMuYXV0aG9yLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMudmVyc2lvbiwgdmFsdWU6IFwidmVyc2lvblwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLkFkZG9ucy5hZGRlZCwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMubW9kaWZpZWQsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuU29ydGluZy5hc2NlbmRpbmcsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLlNvcnRpbmcuZGVzY2VuZGluZywgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgZm9sZGVyLCBhZGRvbkxpc3QsIGFkZG9uU3RhdGUsIG9uQ2hhbmdlLCByZWxvYWR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBzaG93UmVsb2FkSWNvbiA9ICFTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImFkZG9uc1wiLCBcImF1dG9SZWxvYWRcIik7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZm9sZGVyID8ge3RpdGxlOiBTdHJpbmdzLkFkZG9ucy5vcGVuRm9sZGVyLmZvcm1hdCh7dHlwZTogdGl0bGV9KSwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaGVsbCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbDtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IHNoZWxsLm9wZW5JdGVtIHx8IHNoZWxsLm9wZW5QYXRoO1xyXG4gICAgICAgICAgICBvcGVuKGZvbGRlcik7XHJcbiAgICAgICAgfX0gOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEFkZG9ucyA9IGFkZG9uTGlzdC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gYVt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBiW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YoZmlyc3QpID09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdC50b0xvY2FsZUxvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoc2Vjb25kLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QgPiBzZWNvbmQpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoc2Vjb25kID4gZmlyc3QpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmFzY2VuZGluZykgc29ydGVkQWRkb25zLnJldmVyc2UoKTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8U2V0dGluZ3NUaXRsZSBrZXk9XCJ0aXRsZVwiIHRleHQ9e3RpdGxlfSBidXR0b249e2J1dHRvbn0gb3RoZXJDaGlsZHJlbj17c2hvd1JlbG9hZEljb24gJiYgPFJlbG9hZEljb24gY2xhc3NOYW1lPVwiYmQtcmVsb2FkXCIgb25DbGljaz17dGhpcy5yZWxvYWQuYmluZCh0aGlzKX0gLz59IC8+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzIGJkLWFkZG9uLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICA8U2VhcmNoIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH0gcGxhY2Vob2xkZXI9e2Ake1N0cmluZ3MuQWRkb25zLnNlYXJjaC5mb3JtYXQoe3R5cGU6IHRoaXMucHJvcHMudGl0bGV9KX0uLi5gfSAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPntTdHJpbmdzLlNvcnRpbmcuc29ydEJ5fTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5zb3J0T3B0aW9uc30gb25DaGFuZ2U9e3RoaXMuc29ydH0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57U3RyaW5ncy5Tb3J0aW5nLm9yZGVyfTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYga2V5PVwiYWRkb25MaXN0XCIgY2xhc3NOYW1lPXtcImJkLWFkZG9uLWxpc3RcIn0+XHJcbiAgICAgICAgICAgIHtzb3J0ZWRBZGRvbnMubWFwKGFkZG9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBhZGRvbi5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYWRkb24uYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYWRkb24uZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzU2V0dGluZ3MgPSBhZGRvbi50eXBlICYmIHR5cGVvZihhZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdldFNldHRpbmdzID0gaGFzU2V0dGluZ3MgJiYgYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwuYmluZChhZGRvbi5wbHVnaW4pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgZWRpdEFkZG9uPXt0aGlzLmVkaXRBZGRvbi5iaW5kKHRoaXMsIGFkZG9uLmlkKX0gZGVsZXRlQWRkb249e3RoaXMuZGVsZXRlQWRkb24uYmluZCh0aGlzLCBhZGRvbi5pZCl9IHNob3dSZWxvYWRJY29uPXtzaG93UmVsb2FkSWNvbn0ga2V5PXthZGRvbi5pZH0gZW5hYmxlZD17YWRkb25TdGF0ZVthZGRvbi5pZF19IGFkZG9uPXthZGRvbn0gb25DaGFuZ2U9e29uQ2hhbmdlfSByZWxvYWQ9e3JlbG9hZH0gaGFzU2V0dGluZ3M9e2hhc1NldHRpbmdzfSBnZXRTZXR0aW5nc1BhbmVsPXtnZXRTZXR0aW5nc30gLz48L0Vycm9yQm91bmRhcnk+O1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0QWRkb24oaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5lZGl0QWRkb24pIHRoaXMucHJvcHMuZWRpdEFkZG9uKGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVBZGRvbihpZCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbkxpc3QuZmluZChhID0+IGEuaWQgPT0gaWQpO1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShhZGRvbik7XHJcbiAgICAgICAgaWYgKCFzaG91bGREZWxldGUpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kZWxldGVBZGRvbikgdGhpcy5wcm9wcy5kZWxldGVBZGRvbihhZGRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShhZGRvbikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgTW9kYWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChTdHJpbmdzLk1vZGFscy5jb25maXJtQWN0aW9uLCBTdHJpbmdzLkFkZG9ucy5jb25maXJtRGVsZXRlLmZvcm1hdCh7bmFtZTogYWRkb24ubmFtZX0pLCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogU3RyaW5ncy5BZGRvbnMuZGVsZXRlQWRkb24sXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQWRkb25MaXN0LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBZGRvbkxpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge0xvZ2dlci53YXJuKFwiQWRkb25MaXN0XCIsIFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/addonlist.jsx\n"); /***/ }), @@ -1079,7 +1067,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 Group; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _divider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./divider */ \"./src/ui/settings/divider.jsx\");\n/* harmony import */ var _components_switch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/switch */ \"./src/ui/settings/components/switch.jsx\");\n/* harmony import */ var _components_dropdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/dropdown */ \"./src/ui/settings/components/dropdown.jsx\");\n/* harmony import */ var _components_item__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/item */ \"./src/ui/settings/components/item.jsx\");\n\n\n\n\n\n\nconst baseClassName = \"bd-settings-group\";\nclass Group extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n\n if (this.props.button && this.props.collapsible) {\n const original = this.props.button.onClick;\n\n this.props.button.onClick = event => {\n event.stopPropagation();\n original(...arguments);\n };\n }\n\n if (!this.props.hasOwnProperty(\"shown\")) this.props.shown = true;\n this.container = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.state = {\n collapsed: this.props.collapsible && !this.props.shown\n };\n this.onChange = this.onChange.bind(this);\n this.toggleCollapse = this.toggleCollapse.bind(this);\n }\n\n toggleCollapse() {\n const container = this.container.current;\n const timeout = this.state.collapsed ? 300 : 1;\n container.style.setProperty(\"height\", container.scrollHeight + \"px\");\n container.classList.add(\"animating\");\n this.setState({\n collapsed: !this.state.collapsed\n }, () => setTimeout(() => {\n container.style.setProperty(\"height\", \"\");\n container.classList.remove(\"animating\");\n }, timeout));\n }\n\n onChange(id, value) {\n if (!this.props.onChange) return;\n if (this.props.id) this.props.onChange(this.props.id, id, value);else this.props.onChange(id, value);\n this.forceUpdate();\n }\n\n render() {\n const {\n settings\n } = this.props;\n const collapseClass = this.props.collapsible ? `collapsible ${this.state.collapsed ? \"collapsed\" : \"expanded\"}` : \"\";\n const groupClass = `${baseClassName} ${collapseClass}`;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: groupClass\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: this.props.name,\n collapsible: this.props.collapsible,\n onClick: this.toggleCollapse,\n button: this.props.button,\n isGroup: true\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-settings-container\",\n ref: this.container\n }, settings.filter(s => !s.hidden).map(setting => {\n let component = null;\n if (setting.type == \"dropdown\") component = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n disabled: setting.disabled,\n id: setting.id,\n options: setting.options,\n value: setting.value,\n onChange: this.onChange.bind(this, setting.id)\n });\n if (setting.type == \"switch\") component = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_switch__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n disabled: setting.disabled,\n id: setting.id,\n checked: setting.value,\n onChange: this.onChange.bind(this, setting.id)\n });\n if (!component) return null;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_item__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n id: setting.id,\n key: setting.id,\n name: setting.name,\n note: setting.note\n }, component);\n })), this.props.showDivider && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_divider__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2dyb3VwLmpzeD8xYjcyIl0sIm5hbWVzIjpbImJhc2VDbGFzc05hbWUiLCJHcm91cCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImJ1dHRvbiIsImNvbGxhcHNpYmxlIiwib3JpZ2luYWwiLCJvbkNsaWNrIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJhcmd1bWVudHMiLCJoYXNPd25Qcm9wZXJ0eSIsInNob3duIiwiY29udGFpbmVyIiwiY3JlYXRlUmVmIiwic3RhdGUiLCJjb2xsYXBzZWQiLCJvbkNoYW5nZSIsImJpbmQiLCJ0b2dnbGVDb2xsYXBzZSIsImN1cnJlbnQiLCJ0aW1lb3V0Iiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsInNjcm9sbEhlaWdodCIsImNsYXNzTGlzdCIsImFkZCIsInNldFN0YXRlIiwic2V0VGltZW91dCIsInJlbW92ZSIsImlkIiwidmFsdWUiLCJmb3JjZVVwZGF0ZSIsInJlbmRlciIsInNldHRpbmdzIiwiY29sbGFwc2VDbGFzcyIsImdyb3VwQ2xhc3MiLCJuYW1lIiwiZmlsdGVyIiwicyIsImhpZGRlbiIsIm1hcCIsInNldHRpbmciLCJjb21wb25lbnQiLCJ0eXBlIiwiZGlzYWJsZWQiLCJvcHRpb25zIiwibm90ZSIsInNob3dEaXZpZGVyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsYUFBYSxHQUFHLG1CQUF0QjtBQUVlLE1BQU1DLEtBQU4sU0FBb0JDLDZDQUFLLENBQUNDLFNBQTFCLENBQW9DO0FBQy9DQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47O0FBRUEsUUFBSSxLQUFLQSxLQUFMLENBQVdDLE1BQVgsSUFBcUIsS0FBS0QsS0FBTCxDQUFXRSxXQUFwQyxFQUFpRDtBQUM3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O0FBQXpFLFNBQWdGSixTQUFoRixDQUFQO0FBQ0gsS0FOQSxDQURMLENBRkwsRUFXTSxLQUFLeEMsS0FBTCxDQUFXNkMsV0FBWCxJQUEwQiw0REFBQyxnREFBRCxPQVhoQyxDQUFQO0FBYUg7O0FBM0Q4QyIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9ncm91cC5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0fSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgVGl0bGUgZnJvbSBcIi4vdGl0bGVcIjtcclxuaW1wb3J0IERpdmlkZXIgZnJvbSBcIi4vZGl2aWRlclwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XHJcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCBJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvaXRlbVwiO1xyXG5cclxuY29uc3QgYmFzZUNsYXNzTmFtZSA9IFwiYmQtc2V0dGluZ3MtZ3JvdXBcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5idXR0b24gJiYgdGhpcy5wcm9wcy5jb2xsYXBzaWJsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXMucHJvcHMuYnV0dG9uLm9uQ2xpY2s7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuYnV0dG9uLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luYWwoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcInNob3duXCIpKSB0aGlzLnByb3BzLnNob3duID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IHRoaXMucHJvcHMuY29sbGFwc2libGUgJiYgIXRoaXMucHJvcHMuc2hvd25cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQ29sbGFwc2UgPSB0aGlzLnRvZ2dsZUNvbGxhcHNlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQ29sbGFwc2UoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXIuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5zdGF0ZS5jb2xsYXBzZWQgPyAzMDAgOiAxO1xyXG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcImhlaWdodFwiLCBjb250YWluZXIuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiKTtcclxuICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZChcImFuaW1hdGluZ1wiKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjb2xsYXBzZWQ6ICF0aGlzLnN0YXRlLmNvbGxhcHNlZH0sICgpID0+IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJoZWlnaHRcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiYW5pbWF0aW5nXCIpO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMub25DaGFuZ2UpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5pZCkgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCBpZCwgdmFsdWUpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5wcm9wcy5vbkNoYW5nZShpZCwgdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NldHRpbmdzfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3QgY29sbGFwc2VDbGFzcyA9IHRoaXMucHJvcHMuY29sbGFwc2libGUgPyBgY29sbGFwc2libGUgJHt0aGlzLnN0YXRlLmNvbGxhcHNlZCA/IFwiY29sbGFwc2VkXCIgOiBcImV4cGFuZGVkXCJ9YCA6IFwiXCI7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDbGFzcyA9IGAke2Jhc2VDbGFzc05hbWV9ICR7Y29sbGFwc2VDbGFzc31gO1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2dyb3VwQ2xhc3N9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUaXRsZSB0ZXh0PXt0aGlzLnByb3BzLm5hbWV9IGNvbGxhcHNpYmxlPXt0aGlzLnByb3BzLmNvbGxhcHNpYmxlfSBvbkNsaWNrPXt0aGlzLnRvZ2dsZUNvbGxhcHNlfSBidXR0b249e3RoaXMucHJvcHMuYnV0dG9ufSBpc0dyb3VwPXt0cnVlfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2V0dGluZ3MtY29udGFpbmVyXCIgcmVmPXt0aGlzLmNvbnRhaW5lcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtzZXR0aW5ncy5maWx0ZXIocyA9PiAhcy5oaWRkZW4pLm1hcCgoc2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBvbmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy50eXBlID09IFwiZHJvcGRvd25cIikgY29tcG9uZW50ID0gPERyb3Bkb3duIGRpc2FibGVkPXtzZXR0aW5nLmRpc2FibGVkfSBpZD17c2V0dGluZy5pZH0gb3B0aW9ucz17c2V0dGluZy5vcHRpb25zfSB2YWx1ZT17c2V0dGluZy52YWx1ZX0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzLCBzZXR0aW5nLmlkKX0gLz47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy50eXBlID09IFwic3dpdGNoXCIpIGNvbXBvbmVudCA9IDxTd2l0Y2ggZGlzYWJsZWQ9e3NldHRpbmcuZGlzYWJsZWR9IGlkPXtzZXR0aW5nLmlkfSBjaGVja2VkPXtzZXR0aW5nLnZhbHVlfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMsIHNldHRpbmcuaWQpfSAvPjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8SXRlbSBpZD17c2V0dGluZy5pZH0ga2V5PXtzZXR0aW5nLmlkfSBuYW1lPXtzZXR0aW5nLm5hbWV9IG5vdGU9e3NldHRpbmcubm90ZX0+e2NvbXBvbmVudH08L0l0ZW0+O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5zaG93RGl2aWRlciAmJiA8RGl2aWRlciAvPn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/group.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Group; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _divider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./divider */ \"./src/ui/settings/divider.jsx\");\n/* harmony import */ var _components_switch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/switch */ \"./src/ui/settings/components/switch.jsx\");\n/* harmony import */ var _components_dropdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/dropdown */ \"./src/ui/settings/components/dropdown.jsx\");\n/* harmony import */ var _components_item__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/item */ \"./src/ui/settings/components/item.jsx\");\n\n\n\n\n\n\nconst baseClassName = \"bd-settings-group\";\nclass Group extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n\n if (this.props.button && this.props.collapsible) {\n const original = this.props.button.onClick;\n\n this.props.button.onClick = event => {\n event.stopPropagation();\n original(...arguments);\n };\n }\n\n if (!this.props.hasOwnProperty(\"shown\")) this.props.shown = true;\n this.container = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.state = {\n collapsed: this.props.collapsible && !this.props.shown\n };\n this.onChange = this.onChange.bind(this);\n this.toggleCollapse = this.toggleCollapse.bind(this);\n }\n\n toggleCollapse() {\n const container = this.container.current;\n const timeout = this.state.collapsed ? 300 : 1;\n container.style.setProperty(\"height\", container.scrollHeight + \"px\");\n container.classList.add(\"animating\");\n this.setState({\n collapsed: !this.state.collapsed\n }, () => setTimeout(() => {\n container.style.setProperty(\"height\", \"\");\n container.classList.remove(\"animating\");\n }, timeout));\n }\n\n onChange(id, value) {\n if (!this.props.onChange) return;\n if (this.props.id) this.props.onChange(this.props.id, id, value);else this.props.onChange(id, value);\n this.forceUpdate();\n }\n\n render() {\n const {\n settings\n } = this.props;\n const collapseClass = this.props.collapsible ? `collapsible ${this.state.collapsed ? \"collapsed\" : \"expanded\"}` : \"\";\n const groupClass = `${baseClassName} ${collapseClass}`;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: groupClass\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: this.props.name,\n collapsible: this.props.collapsible,\n onClick: this.toggleCollapse,\n button: this.props.button,\n isGroup: true\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-settings-container\",\n ref: this.container\n }, settings.filter(s => !s.hidden).map(setting => {\n let component = null;\n if (setting.type == \"dropdown\") component = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n disabled: setting.disabled,\n id: setting.id,\n options: setting.options,\n value: setting.value,\n onChange: this.onChange.bind(this, setting.id)\n });\n if (setting.type == \"switch\") component = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_switch__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n disabled: setting.disabled,\n id: setting.id,\n checked: setting.value,\n onChange: this.onChange.bind(this, setting.id)\n });\n if (!component) return null;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_item__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n id: setting.id,\n key: setting.id,\n name: setting.name,\n note: setting.note\n }, component);\n })), this.props.showDivider && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_divider__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null));\n }\n\n}\nconst originalRender = Group.prototype.render;\nObject.defineProperty(Group.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function () {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].warn(\"Group\", \"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");\n },\n get: () => originalRender\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2dyb3VwLmpzeD8xYjcyIl0sIm5hbWVzIjpbImJhc2VDbGFzc05hbWUiLCJHcm91cCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImJ1dHRvbiIsImNvbGxhcHNpYmxlIiwib3JpZ2luYWwiLCJvbkNsaWNrIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJhcmd1bWVudHMiLCJoYXNPd25Qcm9wZXJ0eSIsInNob3duIiwiY29udGFpbmVyIiwiY3JlYXRlUmVmIiwic3RhdGUiLCJjb2xsYXBzZWQiLCJvbkNoYW5nZSIsImJpbmQiLCJ0b2dnbGVDb2xsYXBzZSIsImN1cnJlbnQiLCJ0aW1lb3V0Iiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsInNjcm9sbEhlaWdodCIsImNsYXNzTGlzdCIsImFkZCIsInNldFN0YXRlIiwic2V0VGltZW91dCIsInJlbW92ZSIsImlkIiwidmFsdWUiLCJmb3JjZVVwZGF0ZSIsInJlbmRlciIsInNldHRpbmdzIiwiY29sbGFwc2VDbGFzcyIsImdyb3VwQ2xhc3MiLCJuYW1lIiwiZmlsdGVyIiwicyIsImhpZGRlbiIsIm1hcCIsInNldHRpbmciLCJjb21wb25lbnQiLCJ0eXBlIiwiZGlzYWJsZWQiLCJvcHRpb25zIiwibm90ZSIsInNob3dEaXZpZGVyIiwib3JpZ2luYWxSZW5kZXIiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJzZXQiLCJMb2dnZXIiLCJ3YXJuIiwiZ2V0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsYUFBYSxHQUFHLG1CQUF0QjtBQUVlLE1BQU1DLEtBQU4sU0FBb0JDLDZDQUFLLENBQUNDLFNBQTFCLENBQW9DO0FBQy9D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QUFPLENBQUNaLEVBQWxCO0FBQXNCLFdBQUcsRUFBRVksT0FBTyxDQUFDWixFQUFuQztBQUF1QyxZQUFJLEVBQUVZLE9BQU8sQ0FBQ0wsSUFBckQ7QUFBMkQsWUFBSSxFQUFFSyxPQUFPLENBQUNLO0FBQXpFLFNBQWdGSixTQUFoRixDQUFQO0FBQ0gsS0FOQSxDQURMLENBRkwsRUFXTSxLQUFLeEMsS0FBTCxDQUFXNkMsV0FBWCxJQUEwQiw0REFBQyxnREFBRCxPQVhoQyxDQUFQO0FBYUg7O0FBM0Q4QztBQThEbkQsTUFBTUMsY0FBYyxHQUFHbEQsS0FBSyxDQUFDbUQsU0FBTixDQUFnQmpCLE1BQXZDO0FBQ0FrQixNQUFNLENBQUNDLGNBQVAsQ0FBc0JyRCxLQUFLLENBQUNtRCxTQUE1QixFQUF1QyxRQUF2QyxFQUFpRDtBQUM3Q0csWUFBVSxFQUFFLEtBRGlDO0FBRTdDQyxjQUFZLEVBQUUsS0FGK0I7QUFHN0NDLEtBQUcsRUFBRSxZQUFXO0FBQUNDLGtEQUFNLENBQUNDLElBQVAsQ0FBWSxPQUFaLEVBQXFCLHFHQUFyQjtBQUE2SCxHQUhqRztBQUk3Q0MsS0FBRyxFQUFFLE1BQU1UO0FBSmtDLENBQWpEIiwiZmlsZSI6Ii4vc3JjL3VpL3NldHRpbmdzL2dyb3VwLmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIExvZ2dlcn0gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IFRpdGxlIGZyb20gXCIuL3RpdGxlXCI7XHJcbmltcG9ydCBEaXZpZGVyIGZyb20gXCIuL2RpdmlkZXJcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vY29tcG9uZW50cy9kcm9wZG93blwiO1xyXG5pbXBvcnQgSXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL2l0ZW1cIjtcclxuXHJcbmNvbnN0IGJhc2VDbGFzc05hbWUgPSBcImJkLXNldHRpbmdzLWdyb3VwXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuYnV0dG9uICYmIHRoaXMucHJvcHMuY29sbGFwc2libGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLnByb3BzLmJ1dHRvbi5vbkNsaWNrO1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmJ1dHRvbi5vbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJzaG93blwiKSkgdGhpcy5wcm9wcy5zaG93biA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY29sbGFwc2VkOiB0aGlzLnByb3BzLmNvbGxhcHNpYmxlICYmICF0aGlzLnByb3BzLnNob3duXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnRvZ2dsZUNvbGxhcHNlID0gdGhpcy50b2dnbGVDb2xsYXBzZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUNvbGxhcHNlKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLmN1cnJlbnQ7XHJcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHRoaXMuc3RhdGUuY29sbGFwc2VkID8gMzAwIDogMTtcclxuICAgICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJoZWlnaHRcIiwgY29udGFpbmVyLnNjcm9sbEhlaWdodCArIFwicHhcIik7XHJcbiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJhbmltYXRpbmdcIik7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y29sbGFwc2VkOiAhdGhpcy5zdGF0ZS5jb2xsYXBzZWR9LCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwiaGVpZ2h0XCIsIFwiXCIpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGluZ1wiKTtcclxuICAgICAgICB9LCB0aW1lb3V0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLm9uQ2hhbmdlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaWQpIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgaWQsIHZhbHVlKTtcclxuICAgICAgICBlbHNlIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIHZhbHVlKTtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzZXR0aW5nc30gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IGNvbGxhcHNlQ2xhc3MgPSB0aGlzLnByb3BzLmNvbGxhcHNpYmxlID8gYGNvbGxhcHNpYmxlICR7dGhpcy5zdGF0ZS5jb2xsYXBzZWQgPyBcImNvbGxhcHNlZFwiIDogXCJleHBhbmRlZFwifWAgOiBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2xhc3MgPSBgJHtiYXNlQ2xhc3NOYW1lfSAke2NvbGxhcHNlQ2xhc3N9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtncm91cENsYXNzfT5cclxuICAgICAgICAgICAgICAgICAgICA8VGl0bGUgdGV4dD17dGhpcy5wcm9wcy5uYW1lfSBjb2xsYXBzaWJsZT17dGhpcy5wcm9wcy5jb2xsYXBzaWJsZX0gb25DbGljaz17dGhpcy50b2dnbGVDb2xsYXBzZX0gYnV0dG9uPXt0aGlzLnByb3BzLmJ1dHRvbn0gaXNHcm91cD17dHJ1ZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNldHRpbmdzLWNvbnRhaW5lclwiIHJlZj17dGhpcy5jb250YWluZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2V0dGluZ3MuZmlsdGVyKHMgPT4gIXMuaGlkZGVuKS5tYXAoKHNldHRpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcudHlwZSA9PSBcImRyb3Bkb3duXCIpIGNvbXBvbmVudCA9IDxEcm9wZG93biBkaXNhYmxlZD17c2V0dGluZy5kaXNhYmxlZH0gaWQ9e3NldHRpbmcuaWR9IG9wdGlvbnM9e3NldHRpbmcub3B0aW9uc30gdmFsdWU9e3NldHRpbmcudmFsdWV9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcywgc2V0dGluZy5pZCl9IC8+O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcudHlwZSA9PSBcInN3aXRjaFwiKSBjb21wb25lbnQgPSA8U3dpdGNoIGRpc2FibGVkPXtzZXR0aW5nLmRpc2FibGVkfSBpZD17c2V0dGluZy5pZH0gY2hlY2tlZD17c2V0dGluZy52YWx1ZX0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzLCBzZXR0aW5nLmlkKX0gLz47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEl0ZW0gaWQ9e3NldHRpbmcuaWR9IGtleT17c2V0dGluZy5pZH0gbmFtZT17c2V0dGluZy5uYW1lfSBub3RlPXtzZXR0aW5nLm5vdGV9Pntjb21wb25lbnR9PC9JdGVtPjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuc2hvd0RpdmlkZXIgJiYgPERpdmlkZXIgLz59XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gR3JvdXAucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdyb3VwLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtMb2dnZXIud2FybihcIkdyb3VwXCIsIFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/group.jsx\n"); /***/ }), diff --git a/js/main.min.js b/js/main.min.js index 33398d1a..7c5dd782 100644 --- a/js/main.min.js +++ b/js/main.min.js @@ -1 +1 @@ -var Core=function(e){var t={};function s(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,s),i.l=!0,i.exports}return s.m=e,s.c=t,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)s.d(n,i,function(t){return e[t]}.bind(null,i));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=6)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("request")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("events")},function(e,t,s){"use strict";s.r(t);var n={};s.r(n),s.d(n,"EmoteModule",(function(){return Ie})),s.d(n,"CustomCSS",(function(){return Je})),s.d(n,"VoiceMode",(function(){return Ze})),s.d(n,"ClassNormalizer",(function(){return Ye})),s.d(n,"DeveloperMode",(function(){return Qe})),s.d(n,"PublicServers",(function(){return lt})),s.d(n,"DarkMode",(function(){return dt})),s.d(n,"MinimalMode",(function(){return ct})),s.d(n,"TwentyFourHour",(function(){return ht})),s.d(n,"ColoredText",(function(){return pt})),s.d(n,"VoiceDisconnect",(function(){return mt})),s.d(n,"EmoteMenu",(function(){return ft})),s.d(n,"EmoteAutocaps",(function(){return bt})),s.d(n,"WindowPrefs",(function(){return wt}));var i={local:!1,localServer:"//localhost:8080",minified:!0,version:"0.3.0",branch:"master",repo:"rauenzi",minSupportedVersion:"0.3.0",bbdVersion:"1.0.0"},o=[{type:"category",id:"general",name:"General",collapsible:!0,settings:[{type:"switch",id:"download",value:!0},{type:"switch",id:"emoteMenu",value:!0},{type:"switch",id:"hideEmojiMenu",value:!1,enableWith:"emoteMenu"},{type:"switch",id:"autoCaps",value:!1},{type:"switch",id:"showNames",value:!0},{type:"switch",id:"modifiers",value:!0},{type:"switch",id:"animateOnHover",value:!1}]},{type:"category",id:"categories",name:"Categories",collapsible:!0,settings:[{type:"switch",id:"twitchglobal",value:!0},{type:"switch",id:"twitchsubscriber",value:!1},{type:"switch",id:"frankerfacez",value:!0},{type:"switch",id:"bttv",value:!0}]}],r=[{type:"category",id:"general",collapsible:!0,settings:[{type:"switch",id:"emotes",value:!0},{type:"switch",id:"publicServers",value:!0},{type:"switch",id:"voiceDisconnect",value:!1},{type:"switch",id:"twentyFourHour",value:!1},{type:"switch",id:"classNormalizer",value:!0},{type:"switch",id:"showToasts",value:!0}]},{type:"category",id:"appearance",collapsible:!0,settings:[{type:"switch",id:"voiceMode",value:!1},{type:"switch",id:"minimalMode",value:!1},{type:"switch",id:"hideChannels",value:!1,enableWith:"minimalMode"},{type:"switch",id:"darkMode",value:!0},{type:"switch",id:"coloredText",value:!1}]},{type:"category",id:"addons",collapsible:!0,shown:!1,settings:[{type:"switch",id:"addonErrors",value:!0},{type:"switch",id:"autoScroll",value:!0},{type:"switch",id:"autoReload",value:!0},{type:"dropdown",id:"editAction",value:"detached",options:[{value:"detached"},{value:"system"}]}]},{type:"category",id:"customcss",collapsible:!0,shown:!1,settings:[{type:"switch",id:"customcss",value:!0},{type:"switch",id:"liveUpdate",value:!1},{type:"dropdown",id:"openAction",value:"settings",options:[{value:"settings"},{value:"detached"},{value:"system"}]}]},{type:"category",id:"developer",collapsible:!0,shown:!1,settings:[{type:"switch",id:"developerMode",value:!1},{type:"switch",id:"copySelector",value:!1,enableWith:"developerMode"}]},{type:"category",id:"window",collapsible:!0,shown:!1,settings:[{type:"switch",id:"transparency",value:!1},{type:"switch",id:"frame",value:!1,hidden:!0}]}],a={Panels:{plugins:"Plugins",themes:"Themes",customcss:"Custom CSS"},Collections:{settings:{name:"Settings",general:{name:"General",emotes:{name:"Emote System",note:"Enables BD's emote system"},publicServers:{name:"Public Servers",note:"Display public servers button"},voiceDisconnect:{name:"Voice Disconnect",note:"Disconnect from voice server when closing Discord"},twentyFourHour:{name:"24-Hour Timestamps",note:"Hides channels when in minimal mode"},classNormalizer:{name:"Normalize Classes",note:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)"},showToasts:{name:"Show Toasts",note:"Shows a small notification for important information"}},appearance:{name:"Appearance",voiceMode:{name:"Voice Mode",note:"Hides everything that isn't voice chat"},minimalMode:{name:"Minimal Mode",note:"Hide elements and reduce the size of elements"},hideChannels:{name:"Hide Channels",note:"Hides channels when in minimal mode"},darkMode:{name:"Dark Mode",note:"Make certain elements dark by default"},coloredText:{name:"Colored Text",note:"Make text colour the same as role color"}},addons:{name:"Addon Manager",addonErrors:{name:"Show Addon Errors",note:"Shows a modal with plugin/theme errors"},autoScroll:{name:"Scroll To Settings",note:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)"},autoReload:{name:"Automatic Loading",note:"Automatically loads, reloads, and unloads plugins and themes"},editAction:{name:"Edit Action",note:"Where plugins & themes appear when editing",options:{detached:"Detached Window",system:"System Editor"}}},customcss:{name:"Custom CSS",customcss:{name:"Custom CSS",note:"Enables the Custom CSS tab"},liveUpdate:{name:"Live Update",note:"Updates the css as you type"},startDetached:{name:"Start Detached",note:"Clicking the Custom CSS tab opens the editor in a separate window"},nativeOpen:{name:"Open in Native Editor",note:"Clicking the Custom CSS tab opens your custom css in your native editor"},openAction:{name:"Editor Location",note:"Where Custom CSS should open by default",options:{settings:"Settings Menu",detached:"Detached Window",system:"System Editor"}}},developer:{name:"Developer Settings",developerMode:{name:"Developer Mode",note:"Allows activating debugger when pressing F8"},copySelector:{name:"Copy Selector",note:'Adds a "Copy Selector" option to context menus when developer mode is active'}},window:{name:"Window Preferences",transparency:{name:"Enable Transparency",note:"Enables the main window to be see-through (requires restart)"},frame:{name:"Window Frame",note:"Adds the native os window frame to the main window"}}},emotes:{name:"Emotes",general:{name:"General",download:{name:"Download Emotes",note:"Download emotes whenever they are out of date"},emoteMenu:{name:"Emote Menu",note:"Show Twitch/Favourite emotes in emote menu"},hideEmojiMenu:{name:"Hide Emoji Menu",note:"Hides Discord's emoji menu when using emote menu"},autoCaps:{name:"Emote Autocapitalization",note:"Autocapitalize emote commands"},showNames:{name:"Show Names",note:"Show emote names on hover"},modifiers:{name:"Show Emote Modifiers",note:"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)"},animateOnHover:{name:"Animate On Hover",note:"Only animate the emote modifiers on hover"}},categories:{name:"Categories",twitchglobal:{name:"Twitch Globals",note:"Show Twitch global emotes"},twitchsubscriber:{name:"Twitch Subscribers",note:"Show Twitch subscriber emotes"},frankerfacez:{name:"FrankerFaceZ",note:"Show emotes from FFZ"},bttv:{name:"BetterTTV",note:"Show emotes from BTTV"}}}},Addons:{title:"{{name}} v{{version}} by {{author}}",openFolder:"Open {{type}} Folder",reload:"Reload",addonSettings:"Settings",website:"Website",source:"Source",server:"Support Server",donate:"Donate",name:"Name",author:"Author",version:"Version",added:"Date Added",modified:"Date Modified",search:"Search {{type}}",editAddon:"Edit",deleteAddon:"Delete",confirmDelete:"Are you sure you want to delete {{name}}?",confirmationText:"You have unsaved changes to {{name}}. Closing this window will lose all those changes."},Emotes:{loading:"Loading emotes in the background do not reload.",loaded:"All emotes successfully loaded.",clearEmotes:"Clear Emote Data",favoriteAction:"Favorite!"},CustomCSS:{confirmationText:"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes.",update:"Update",save:"Save",openNative:"Open in System Editor",openDetached:"Detach Window",settings:"Editor Settings",editorTitle:"Custom CSS Editor"},PublicServers:{button:"public",join:"Join",joining:"Joining",joined:"Joined",loading:"Loading",loadMore:"Load More",notConnected:"Not connected to DiscordServers.com!",search:"Search",connect:"Connect",reconnect:"Reconnect",categories:"Categories",connection:"Connected as: {{username}}#{{discriminator}}",results:"Showing {{start}}-{{end}} of {{total}} results in {{category}}",query:"for {{query}}"},Modals:{confirmAction:"Are You Sure?",okay:"Okay",cancel:"Cancel",close:"Close",name:"Name",message:"Message",error:"Error",addonErrors:"Addon Errors"},Sorting:{sortBy:"Sort By",order:"Order",ascending:"Ascending",descending:"Descending"}};const l={err:"error",error:"error",dbg:"debug",debug:"debug",log:"log",warn:"warn",info:"info"};class d{static stacktrace(e,t,s){console.error(`%c[${e}]%c ${t}\n\n%c`,"color: #3a71c1; font-weight: 700;","color: red; font-weight: 700;","color: red;",s)}static err(e,...t){d._log(e,t,"error")}static warn(e,...t){d._log(e,t,"warn")}static info(e,...t){d._log(e,t,"info")}static debug(e,...t){d._log(e,t,"debug")}static log(e,...t){d._log(e,t)}static _log(e,t,s="log"){s=d.parseType(s),Array.isArray(t)||(t=[t]),console[s](`%c[BandagedBD]%c [${e}]%c`,"color: #3E82E5; font-weight: 700;","color: #3a71c1;","",...t)}static parseType(e){return l.hasOwnProperty(e)?l[e]:"log"}}class c{static repoUrl(e){return`https://cdn.staticaly.com/gh/${i.repo}/BetterDiscordApp/${i.hash}/${e}`}static parseHTML(e,t=!1){const s=document.createElement("template");s.innerHTML=e;const n=s.content.cloneNode(!0);return t?n:n.childNodes.length>1?n.childNodes:n.childNodes[0]}static getTextArea(){return $(".channelTextArea-1LDbYG textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static suppressErrors(e,t){return(...s)=>{try{return e(...s)}catch(e){d.stacktrace("SuppressedError","Error occurred in "+t,e)}}}static onRemoved(e,t){const s=new MutationObserver(n=>{for(let i=0;i-1,l=r.some(t=>t.contains(e));(a||l)&&(s.disconnect(),t())}});s.observe(document.body,{subtree:!0,childList:!0})}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static memoizeObject(e){const t=new Proxy(e,{get:function(e,t){if(e.hasOwnProperty(t)){if(Object.getOwnPropertyDescriptor(e,t).get){const s=e[t];delete e[t],e[t]=s}return e[t]}},set:function(e,t,s){return e.hasOwnProperty(t)?d.error("MemoizedObject","Trying to overwrite existing property"):(e[t]=s,e[t])}});return Object.defineProperty(t,"hasOwnProperty",{value:function(e){return void 0!==this[e]}}),t}static extend(e,...t){for(let s=0;se.startsWith("__reactInternalInstance"))]||null}static getOwnerInstance(e,{include:t,exclude:s=["Popout","Tooltip","Scroller","BackgroundFlash"],filter:n=(e=>e)}={}){if(void 0===e)return;const i=void 0===t,o=i?s:t;function r(e){const t=function(e){const t=e.type;return t&&(t.displayName||t.name)||null}(e);return null!==t&&!!(o.includes(t)^i)}let a=this.getReactInstance(e);for(a=a&&a.return;null!==a;a=a.return){if(null===a)continue;const e=a.stateNode;if(null!==a&&!(e instanceof HTMLElement)&&r(a)&&n(e))return e}return null}}class h{static byProperties(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&e.every(e=>void 0!==n[e])}}static byPrototypeFields(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&(!!n.prototype&&e.every(e=>void 0!==n.prototype[e]))}}static byCode(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&-1!==n.toString([]).search(e)}}static byString(...e){return t=>{const s=t.toString([]);for(const t of e)if(!s.includes(t))return!1;return!0}}static byDisplayName(e){return t=>t&&t.displayName===e}static combine(...e){return t=>e.every(e=>e(t))}}class u{static find(e,t=!0){return this.getModule(e,t)}static findAll(e){return this.getModule(e,!1)}static findByUniqueProperties(e,t=!0){return t?this.getByProps(...e):this.getAllByProps(...e)}static findByDisplayName(e){return this.getByDisplayName(e)}static getModule(e,t=!0){const s=this.getAllModules(),n=[];for(const i in s){if(!s.hasOwnProperty(i))continue;const o=s[i],{exports:r}=o;let a=null;if(r&&(r.__esModule&&r.default&&e(r.default)&&(a=r.default),e(r)&&(a=r),a)){if(t)return a;n.push(a)}}return t||0==n.length?void 0:n}static getModules(e){return this.getModule(e,!1)}static getByDisplayName(e){return this.getModule(h.byDisplayName(e),!0)}static getByRegex(e,t=!0){return this.getModule(h.byCode(e),t)}static getByPrototypes(...e){return this.getModule(h.byPrototypeFields(e),!0)}static getAllByPrototypes(...e){return this.getModule(h.byPrototypeFields(e),!1)}static getByProps(...e){return this.getModule(h.byProperties(e),!0)}static getAllByProps(...e){return this.getModule(h.byProperties(e),!1)}static getByString(...e){return this.getModule(h.byString(...e),!0)}static getAllByString(...e){return this.getModule(h.byString(...e),!1)}static get require(){if(this._require)return this._require;const e="bbd-webpackmodules",t="function"==typeof window.webpackJsonp?window.webpackJsonp([],{[e]:(e,t,s)=>t.default=s},[e]).default:window.webpackJsonp.push([[],{[e]:(e,t,s)=>e.exports=s},[[e]]]);return delete t.m[e],delete t.c[e],this._require=t}static getAllModules(){return this.require.c}}var p=c.memoizeObject({get React(){return u.getByProps("createElement","cloneElement")},get ReactDOM(){return u.getByProps("render","findDOMNode")},get Flux(){return u.getByProps("connectStores")},get Events(){return u.getByPrototypes("setMaxListeners","emit")},get GuildStore(){return u.getByProps("getGuild")},get SortedGuildStore(){return u.getByProps("getSortedGuilds")},get SelectedGuildStore(){return u.getByProps("getLastSelectedGuildId")},get GuildSync(){return u.getByProps("getSyncedGuilds")},get GuildInfo(){return u.getByProps("getAcronym")},get GuildChannelsStore(){return u.getByProps("getChannels","getDefaultChannel")},get GuildMemberStore(){return u.getByProps("getMember")},get MemberCountStore(){return u.getByProps("getMemberCounts")},get GuildEmojiStore(){return u.getByProps("getEmojis")},get GuildActions(){return u.getByProps("markGuildAsRead")},get GuildPermissions(){return u.getByProps("getGuildPermissions")},get ChannelStore(){return u.getByProps("getChannels","getDMFromUserId")},get SelectedChannelStore(){return u.getByProps("getLastSelectedChannelId")},get ChannelActions(){return u.getByProps("selectChannel")},get PrivateChannelActions(){return u.getByProps("openPrivateChannel")},get ChannelSelector(){return u.getByProps("selectGuild","selectChannel")},get UserInfoStore(){return u.getByProps("getToken")},get UserSettingsStore(){return u.getByProps("guildPositions")},get AccountManager(){return u.getByProps("register","login")},get UserSettingsUpdater(){return u.getByProps("updateRemoteSettings")},get OnlineWatcher(){return u.getByProps("isOnline")},get CurrentUserIdle(){return u.getByProps("getIdleTime")},get RelationshipStore(){return u.getByProps("isBlocked","getFriendIDs")},get RelationshipManager(){return u.getByProps("addRelationship")},get MentionStore(){return u.getByProps("getMentions")},get UserStore(){return u.getByProps("getCurrentUser")},get UserStatusStore(){return u.getByProps("getStatus","getState")},get UserTypingStore(){return u.getByProps("isTyping")},get UserActivityStore(){return u.getByProps("getActivity")},get UserNameResolver(){return u.getByProps("getName")},get UserNoteStore(){return u.getByProps("getNote")},get UserNoteActions(){return u.getByProps("updateNote")},get EmojiInfo(){return u.getByProps("isEmojiDisabled")},get EmojiUtils(){return u.getByProps("getGuildEmoji")},get EmojiStore(){return u.getByProps("getByCategory","EMOJI_NAME_RE")},get InviteStore(){return u.getByProps("getInvites")},get InviteResolver(){return u.getByProps("findInvite")},get InviteActions(){return u.getByProps("acceptInvite")},get DiscordConstants(){return u.getByProps("Permissions","ActivityTypes","StatusTypes")},get DiscordPermissions(){return u.getByProps("Permissions","ActivityTypes","StatusTypes").Permissions},get PermissionUtils(){return u.getByProps("getHighestRole")},get ColorConverter(){return u.getByProps("hex2int")},get ColorShader(){return u.getByProps("darken")},get TinyColor(){return u.getByPrototypes("toRgb")},get ClassResolver(){return u.getByProps("getClass")},get ButtonData(){return u.getByProps("ButtonSizes")},get IconNames(){return u.getByProps("IconNames")},get NavigationUtils(){return u.getByProps("transitionTo","replaceWith","getHistory")},get MessageStore(){return u.getByProps("getMessages")},get MessageActions(){return u.getByProps("jumpToMessage","_sendMessage")},get MessageQueue(){return u.getByProps("enqueue")},get MessageParser(){return u.getByProps("createMessage","parse","unparse")},get hljs(){return u.getByProps("highlight","highlightBlock")},get SimpleMarkdown(){return u.getByProps("parseBlock","parseInline","defaultOutput")},get ExperimentStore(){return u.getByProps("getExperimentOverrides")},get ExperimentsManager(){return u.getByProps("isDeveloper")},get CurrentExperiment(){return u.getByProps("getExperimentId")},get ImageResolver(){return u.getByProps("getUserAvatarURL","getGuildIconURL")},get ImageUtils(){return u.getByProps("getSizedImageSrc")},get AvatarDefaults(){return u.getByProps("getUserAvatarURL","DEFAULT_AVATARS")},get WindowInfo(){return u.getByProps("isFocused","windowSize")},get TagInfo(){return u.getByProps("VALID_TAG_NAMES")},get DOMInfo(){return u.getByProps("canUseDOM")},get LocaleManager(){return u.getByProps("setLocale")},get Moment(){return u.getByProps("parseZone")},get LocationManager(){return u.getByProps("createLocation")},get Timestamps(){return u.getByProps("fromTimestamp")},get TimeFormatter(){return u.getByProps("dateFormat")},get Strings(){return u.getByProps("Messages").Messages},get StringFormats(){return u.getByProps("a","z")},get StringUtils(){return u.getByProps("toASCII")},get URLParser(){return u.getByProps("Url","parse")},get ExtraURLs(){return u.getByProps("getArticleURL")},get DNDActions(){return u.getByProps("beginDrag")},get DNDSources(){return u.getByProps("addTarget")},get DNDObjects(){return u.getByProps("DragSource")},get MediaDeviceInfo(){return u.getByProps("Codecs","SUPPORTED_BROWSERS")},get MediaInfo(){return u.getByProps("getOutputVolume")},get MediaEngineInfo(){return u.getByProps("MediaEngineFeatures")},get VoiceInfo(){return u.getByProps("EchoCancellation")},get VideoStream(){return u.getByProps("getVideoStream")},get SoundModule(){return u.getByProps("playSound")},get ElectronModule(){return u.getByProps("setBadge")},get Dispatcher(){return u.getByProps("dirtyDispatch")},get PathUtils(){return u.getByProps("hasBasename")},get NotificationModule(){return u.getByProps("showNotification")},get RouterModule(){return u.getByProps("Router")},get APIModule(){return u.getByProps("getAPIBaseURL")},get AnalyticEvents(){return u.getByProps("AnalyticEventConfigs")},get KeyGenerator(){return u.getByRegex(/"binary"/)},get Buffers(){return u.getByProps("Buffer","kMaxLength")},get DeviceStore(){return u.getByProps("getDevices")},get SoftwareInfo(){return u.getByProps("os")},get CurrentContext(){return u.getByProps("setTagsContext")},get GuildClasses(){const e=u.getByProps("wrapper","unreadMentionsBar"),t=u.getByProps("guildsError","selected"),s=u.getByProps("blobContainer");return Object.assign({},e,t,s)}});const m=s(5);var g=new class extends m{constructor(){super(),this.setMaxListeners(20)}dispatch(e,...t){this.emit(e,...t)}};const f=s(1),b=s(2),y=DiscordNative.globals.releaseChannel;var v=new class{constructor(){this.data={misc:{}},this.pluginData={},this.cacheData={}}initialize(){f.existsSync(this.baseFolder)||f.mkdirSync(this.baseFolder),f.existsSync(this.dataFolder)||f.mkdirSync(this.dataFolder),f.existsSync(this.localeFolder)||f.mkdirSync(this.localeFolder),f.existsSync(this.emoteFolder)||f.mkdirSync(this.emoteFolder),f.existsSync(this.cacheFile)||f.writeFileSync(this.cacheFile,JSON.stringify({})),f.existsSync(this.customCSS)||f.writeFileSync(this.customCSS,"");const e=f.readdirSync(this.dataFolder).filter(e=>!f.statSync(b.resolve(this.dataFolder,e)).isDirectory()&&e.endsWith(".json"));for(const t of e)this.data[t.split(".")[0]]=require(b.resolve(this.dataFolder,t));this.cacheData=c.testJSON(f.readFileSync(this.cacheFile).toString())||{}}get customCSS(){return this._customCSS||(this._customCSS=b.resolve(this.dataFolder,"custom.css"))}get baseFolder(){return this._baseFolder||(this._baseFolder=b.resolve(i.dataPath,"data"))}get dataFolder(){return this._dataFolder||(this._dataFolder=b.resolve(this.baseFolder,`${y}`))}get localeFolder(){return this._localeFolder||(this._localeFolder=b.resolve(this.baseFolder,"locales"))}get emoteFolder(){return this._emoteFolder||(this._emoteFolder=b.resolve(this.baseFolder,"emotes"))}get cacheFile(){return this._cacheFile||(this._cacheFile=b.resolve(this.baseFolder,".cache"))}getPluginFile(e){return b.resolve(i.dataPath,"plugins",e+".config.json")}_getFile(e){return"settings"==e||"plugins"==e||"themes"==e?b.resolve(this.dataFolder,`${e}.json`):b.resolve(this.dataFolder,"misc.json")}getBDData(e){return this.data.misc[e]||""}setBDData(e,t){this.data.misc[e]=t,f.writeFileSync(b.resolve(this.dataFolder,"misc.json"),JSON.stringify(this.data.misc,null,4))}getLocale(e){const t=b.resolve(this.localeFolder,`${e}.json`);return f.existsSync(t)?c.testJSON(f.readFileSync(t).toString()):null}saveLocale(e,t){f.writeFileSync(b.resolve(this.localeFolder,`${e}.json`),JSON.stringify(t,null,4))}getCacheHash(e,t){return this.cacheData[e]&&f.existsSync(b.resolve(this.baseFolder,e,`${t}.json`))&&this.cacheData[e][t]||""}setCacheHash(e,t,s){this.cacheData[e]||(this.cacheData[e]={}),this.cacheData[e][t]=s,f.writeFileSync(this.cacheFile,JSON.stringify(this.cacheData))}invalidateCache(e,t){this.cacheData[e]&&(delete this.cacheData[e][t],f.writeFileSync(this.cacheFile,JSON.stringify(this.cacheData)))}emotesExist(e){return f.existsSync(b.resolve(this.emoteFolder,`${e}.json`))}getEmoteData(e){const t=b.resolve(this.emoteFolder,`${e}.json`);return f.existsSync(t)?c.testJSON(f.readFileSync(t).toString()):null}saveEmoteData(e,t){f.writeFileSync(b.resolve(this.emoteFolder,`${e}.json`),JSON.stringify(t))}getData(e){return this.data[e]||""}setData(e,t){this.data[e]=t,f.writeFileSync(b.resolve(this.dataFolder,`${e}.json`),JSON.stringify(t,null,4))}loadCustomCSS(){return f.readFileSync(this.customCSS).toString()}saveCustomCSS(e){return f.writeFileSync(this.customCSS,e)}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]||void 0:f.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(f.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]||void 0):void 0}setPluginData(e,t,s){void 0!==s&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=s,f.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4)))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],f.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4))}};const w=s(3),{Dispatcher:C,DiscordConstants:S,UserSettingsStore:E}=p;var P=new class{get discordLocale(){return E.locale.split("-")[0]}get defaultLocale(){return"en"}constructor(){this.locale="",this.strings={}}async initialize(){await this.setLocale(this.discordLocale),C.subscribe(S.ActionTypes.USER_SETTINGS_UPDATE,({settings:e})=>{const t=e.locale;t&&t!=this.locale&&this.setLocale(t.split("-")[0])})}async setLocale(e){let t;if(e!=this.defaultLocale){if(t=await this.getLocaleStrings(e),!t)return this.setLocale(this.defaultLocale)}else t=a;this.locale=e,c.extend(this.strings,t),g.emit("strings-updated")}async getLocaleStrings(e){const t=v.getCacheHash("locales",e);if(!t)return await this.downloadLocale(e);const s=await this.downloadLocale(e,t);return s||v.getLocale(e)}downloadLocale(e,t=""){return new Promise(s=>{const n={url:c.repoUrl(`data/locales/${e}.json`),timeout:2e3,json:!0};t&&(n.headers={"If-None-Match":t}),w.get(n,(t,n,i)=>{if(t||200!==n.statusCode)return s(null);v.saveLocale(e,i),v.setCacheHash("locales",e,n.headers.etag),s(i)})})}};class x{static get bdHead(){return this.getElement("bd-head")}static get bdBody(){return this.getElement("bd-body")}static get bdScripts(){return this.getElement("bd-scripts")}static get bdStyles(){return this.getElement("bd-styles")}static get bdThemes(){return this.getElement("bd-themes")}static get bdCustomCSS(){return this.getElement("#customcss")}static initialize(){this.createElement("bd-head",{target:document.head}),this.createElement("bd-body",{target:document.body}),this.createElement("bd-scripts",{target:this.bdHead}),this.createElement("bd-styles",{target:this.bdHead}),this.createElement("bd-themes",{target:this.bdHead}),this.createElement("style",{id:"customcss",target:this.bdHead})}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static getElement(e,t=document){return e instanceof Node?e:t.querySelector(e)}static createElement(e,t={}){const{className:s,id:n,target:i}=t,o=document.createElement(e);return s&&(o.className=s),n&&(o.id=n),i&&this.getElement(i).append(o),o}static removeStyle(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdStyles);t&&t.remove()}static injectStyle(e,t){e=this.escapeID(e);const s=this.getElement(`#${e}`,this.bdStyles)||this.createElement("style",{id:e});s.textContent=t,this.bdStyles.append(s)}static removeTheme(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdThemes);t&&t.remove()}static injectTheme(e,t){e=this.escapeID(e);const s=this.getElement(`#${e}`,this.bdThemes)||this.createElement("style",{id:e});s.textContent=t,this.bdThemes.append(s)}static updateCustomCSS(e){this.bdCustomCSS.textContent=e}static removeScript(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdScripts);t&&t.remove()}static injectScript(e,t){return e=this.escapeID(e),new Promise(s=>{const n=this.getElement(`#${e}`,this.bdScripts)||this.createElement("script",{id:e});n.src=t,n.onload=s,this.bdScripts.append(n)})}}class k extends String{format(e){return c.formatString(this,e)}}var M=new Proxy(P.strings,{get:function(e,t){return e.hasOwnProperty(t)?new Proxy(e[t],{get:function(e,t){return"string"==typeof e[t]?new k(e[t]):e[t]}}):new Proxy({},{get:function(){return`String group "${t}" not found.`}})}}),A=new class{constructor(){this.state={},this.collections=[],this.panels=[],this.updateStrings=this.updateStrings.bind(this)}initialize(){this.registerCollection("settings","Settings",r),g.on("strings-updated",this.updateStrings)}registerCollection(e,t,s,n=null){if(this.collections.find(t=>t.id==e))return d.error("Settings","Already have a collection with id "+e);this.collections.push({type:"collection",id:e,name:t,settings:s,button:n}),this.setupCollection(e),this.loadCollection(e),this.updateStrings()}removeCollection(e){const t=this.collections.findIndex(t=>t.id==e);if(!t<0)return d.error("Settings","No collection with id "+e);this.collections.splice(t,1)}registerPanel(e,t,s){if(this.panels.find(t=>t.id==e))return d.error("Settings","Already have a panel with id "+e);const{element:n,onClick:i,order:o=1}=s,r={id:e,order:o,label:t,section:e};i&&(r.clickListener=i),n&&(r.element=n instanceof p.React.Component?()=>p.React.createElement(n,{}):"function"==typeof n?n:()=>n),this.panels.push(r)}removePanel(e){const t=this.panels.findIndex(t=>t.id==e);if(!t<0)return d.error("Settings","No collection with id "+e);this.panels.splice(t,1)}getPath(e,t="",s=""){return{collection:3==e.length?e[0]:t,category:3==e.length?e[1]:2==e.length?e[0]:s,setting:e[e.length-1]}}setupCollection(e){const t=this.collections.find(t=>t.id==e);if(!t)return;const s=t.settings;this.state[t.id]||(this.state[t.id]={});for(let e=0;e{const e=this.state[o.collection][o.category][o.setting];return s.enableWith?!e:e}})}}}}saveSettings(){for(const e in this.state)this.saveCollection(e)}loadSettings(){for(const e in this.state)this.loadCollection(e)}saveCollection(e){v.setData(e,this.state[e])}loadCollection(e){const t=v.getData(e);if(!t)return this.saveCollection(e);for(const s in this.state[e]){t[s]||Object.assign(t,{[s]:this.state[e][s]});for(const n in this.state[e][s]){if(null==t[s][n])continue;const i=this.getSetting(e,s,n);if("switch"==i.type&&(this.state[e][s][n]=t[s][n]),"dropdown"==i.type){i.options.some(e=>e.value==t[s][n])&&(this.state[e][s][n]=t[s][n])}}}this.saveCollection(e)}onSettingChange(e,t,s,n){this.state[e][t][s]=n,g.dispatch("setting-updated",e,t,s,n),this.saveCollection(e)}getSetting(e,t,s){return 2==arguments.length?this.collections[0].find(e=>e.id==arguments[0]).settings.find(e=>e.id==arguments[1]):this.collections.find(t=>t.id==e).settings.find(e=>e.id==t).settings.find(e=>e.id==s)}get(e,t,s){return 2==arguments.length&&(s=t,t=e,e="settings"),!(!this.state[e]||!this.state[e][t])&&this.state[e][t][s]}set(e,t,s,n){return 3==arguments.length&&(n=s,s=t,t=e,e="settings"),this.onSettingChange(e,t,s,n)}on(e,t,s,n){const i=(i,o,r,a)=>{i===e&&o===t&&r===s&&n(a)};return g.on("setting-updated",i),()=>{g.off("setting-updated",i)}}updateStrings(){for(let e=0;e"before"===e.type))try{t.callback(this,arguments)}catch(s){d.err("Patcher",`Could not fire before callback of ${e.functionName} for ${t.caller}`,s)}const s=e.children.filter(e=>"instead"===e.type);if(s.length)for(const n of s)try{const s=n.callback(this,arguments,e.originalFunction.bind(this));void 0!==s&&(t=s)}catch(t){d.err("Patcher",`Could not fire instead callback of ${e.functionName} for ${n.caller}`,t)}else t=e.originalFunction.apply(this,arguments);for(const s of e.children.filter(e=>"after"===e.type))try{const e=s.callback(this,arguments,t);void 0!==e&&(t=e)}catch(t){d.err("Patcher",`Could not fire after callback of ${e.functionName} for ${s.caller}`,t)}return t}}static rePatch(e){e.proxyFunction=e.module[e.functionName]=this.makeOverride(e)}static makePatch(e,t,s){const n={name:s,module:e,functionName:t,originalFunction:e[t],proxyFunction:null,revert:()=>{n.module[n.functionName]=n.originalFunction,n.proxyFunction=null,n.children=[]},counter:0,children:[]};return n.proxyFunction=e[t]=this.makeOverride(n),this.patches.push(n),n}static before(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"before"}))}static after(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"after"}))}static instead(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"instead"}))}static pushChildPatch(e,t,s,n,i={}){const{type:o="after",forcePatch:r=!0}=i,a=this.resolveModule(t);if(!a)return null;if(!a[s]&&r&&(a[s]=function(){}),!(a[s]instanceof Function))return null;"string"==typeof t&&(i.displayName=t);const l=`${i.displayName||a.displayName||a.name||a.constructor.displayName||a.constructor.name}.${s}`,d=this.patches.find(e=>e.module==a&&e.functionName==s)||this.makePatch(a,s,l);d.proxyFunction||this.rePatch(d);const c={caller:e,type:o,id:d.counter,callback:n,unpatch:()=>{if(d.children.splice(d.children.findIndex(e=>e.id===c.id&&e.type===o),1),d.children.length<=0){const e=this.patches.findIndex(e=>e.module==a&&e.functionName==s);this.patches[e].revert(),this.patches.splice(e,1)}}};return d.children.push(c),d.counter++,c.unpatch}}const F=p.React,T={},L=new Set,j=new Set;var O=new class{get named(){return T}get unknown(){return L}get listeners(){return j}constructor(){B.after("ReactComponents",F,"createElement",(e,t,s)=>{this.walkRenderTree(s)}),B.instead("ReactComponents",F.Component.prototype,"componentWillMount",e=>{this.addComponent(e.constructor)}),B.instead("ReactComponents",F.Component.prototype,"UNSAFE_componentWillMount",e=>{this.addComponent(e.constructor)}),B.instead("ReactComponents",F.PureComponent.prototype,"componentWillMount",e=>{this.addComponent(e.constructor)}),B.instead("ReactComponents",F.PureComponent.prototype,"UNSAFE_componentWillMount",e=>{this.addComponent(e.constructor)})}initialize(){this.walkReactTree(document.querySelector("#app-mount")._reactRootContainer._internalRoot.current)}get(e,t){return new Promise(s=>{if(T[e])return s(T[e]);if(j.add({name:e,filter:t,resolve:s}),t)for(const s of L)t(s)&&(s.displayName=e,L.delete(s),this.addNamedComponent(s))})}addNamedComponent(e){const t=e.displayName;if(!T[t]){T[t]=e;for(const s of j)s.name===t&&(s.resolve(e),j.delete(s))}}addUnknownComponent(e){if(!L.has(e)){for(const t of j)t.filter&&t.filter(e)&&(e.displayName=t.name,this.addNamedComponent(e));e.displayName||L.add(e)}}addComponent(e){return e.displayName?this.addNamedComponent(e):this.addUnknownComponent(e)}walkRenderTree(e){if(e){if("function"==typeof e.type&&this.addComponent(e.type),Array.isArray(e))for(const t of e)this.walkRenderTree(t);e.props&&e.props.children&&this.walkRenderTree(e.props.children)}}walkReactTree(e){e&&("function"==typeof e.type&&this.addComponent(e.type),e.child&&this.walkReactTree(e.child),e.sibling&&this.walkReactTree(e.sibling))}};const z=p.React,R=(p.ReactDOM,u.getByProps("sidebar","hasNotice").sidebar.split(" ")[0]),I=u.getByProps("membersWrap").membersWrap.split(" ")[0];class _{static get shouldShowToasts(){return A.get("settings","general","showToasts")}static async success(e,t={}){return this.show(e,Object.assign(t,{type:"success"}))}static async info(e,t={}){return this.show(e,Object.assign(t,{type:"info"}))}static async warning(e,t={}){return this.show(e,Object.assign(t,{type:"warning"}))}static async error(e,t={}){return this.show(e,Object.assign(t,{type:"error"}))}static async default(e,t={}){return this.show(e,Object.assign(t,{type:""}))}static show(e,t={}){const{type:s="",icon:n=!0,timeout:i=3e3,forceShow:o=!1}=t;if(!this.shouldShowToasts&&!o)return;this.ensureContainer();const r=document.createElement("div");r.classList.add("bd-toast"),s&&r.classList.add("toast-"+s),s&&n&&r.classList.add("icon"),r.innerText=e,document.querySelector(".bd-toasts").appendChild(r),setTimeout(()=>{r.classList.add("closing"),setTimeout(()=>{r.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},i)}static ensureContainer(){if(document.querySelector(".bd-toasts"))return;const e=document.querySelector(`.${R} + div`),t=e.querySelector(`.${I}`),s=e?e.querySelector("form"):null,n=e?e.getBoundingClientRect().left:310,i=t?t.getBoundingClientRect().left:0,o=i?i-e.getBoundingClientRect().left:e.offsetWidth,r=s?s.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",n+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",r+"px"),document.querySelector("#app-mount").appendChild(a)}}class q extends z.Component{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.state={checked:this.props.checked||!1}}render(){return z.createElement("div",{className:"checkbox-item"},z.createElement("div",{className:"checkbox-label label-JWQiNe da-label"},this.props.text),z.createElement("div",{className:"checkbox-wrapper checkbox-3kaeSU da-checkbox checkbox-3EVISJ da-checkbox",onClick:this.onClick},z.createElement("div",{className:"checkbox-inner checkboxInner-3yjcPe da-checkboxInner"},z.createElement("input",{className:"checkbox checkboxElement-1qV33p da-checkboxElement",checked:this.state.checked,type:"checkbox"}),z.createElement("span",null)),z.createElement("span",null)))}onClick(){this.props.onChange(!this.state.checked),this.setState({checked:!this.state.checked})}}function H(){return(H=Object.assign||function(e){for(var t=1;t{for(const s of e){if(!(s.addedNodes.length&&s.addedNodes[0]instanceof Element))continue;const e=s.addedNodes[0];e.parentElement===document.body&&e.querySelector("#ace_settingsmenu")&&(e.id="ace_settingsmenu_container",t.disconnect())}});t.observe(document.body,{childList:!0})};const t=this.props.theme==V.defaultProps.theme?this.props.theme.split("-")[1]:this.props.theme;this.editor.setTheme(`ace/theme/${t}`),this.editor.session.setMode(`ace/mode/${this.props.language}`),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(this.props.fontSize),this.editor.on("change",this.onChange)}componentWillUnmount(){this.editor.destroy()}get value(){return this.editor.session.getValue()}set value(e){this.editor.setValue(e)}onChange(){this.props.onChange&&this.props.onChange(this.value)}showSettings(){return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor)}resize(){return this.editor.resize()}buildControl(e){return"checkbox"==e.type?this.makeCheckbox(e):this.makeButton(e)}makeCheckbox(e){return z.createElement(q,{text:e.label,onChange:e.onChange,checked:e.checked})}makeButton(e){return z.createElement(U,{color:"black",position:"top",text:e.tooltip},t=>z.createElement("button",H({},t,{className:"btn btn-primary",onClick:t=>{e.onClick(t,this.value)}}),e.label))}render(){this.editor&&this.editor.resize&&this.editor.resize();const e=this.props.controls.filter(e=>"right"!=e.side).map(this.buildControl.bind(this)),t=this.props.controls.filter(e=>"right"==e.side).map(this.buildControl.bind(this));return z.createElement("div",{id:"bd-editor-panel",className:this.props.theme},z.createElement("div",{id:"bd-editor-controls"},z.createElement("div",{className:"controls-section controls-left"},e),z.createElement("div",{className:"controls-section controls-right"},t)),z.createElement("div",{className:"editor-wrapper"},z.createElement("div",{id:this.props.id,className:"editor "+this.props.theme},this.props.value)))}}class J extends z.Component{render(){const e=this.props.size||"24px";return z.createElement("svg",{viewBox:"0 0 24 24",style:{width:e,height:e}},z.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),z.createElement("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm2 16H5V5h11.17L19 7.83V19zm-7-7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM6 6h9v4H6z"}))}}class Z extends z.Component{render(){const e=this.props.size||"24px";return z.createElement("svg",{viewBox:"0 0 24 24",fill:"#FFFFFF",style:{width:e,height:e},onClick:this.props.onClick},z.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),z.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}class K extends z.Component{render(){const e=this.props.size||"20px";return z.createElement("svg",{viewBox:"0 0 20 20",style:{width:e,height:e}},z.createElement("path",{fill:"none",d:"M0 0h20v20H0V0z"}),z.createElement("path",{d:"M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z"}))}}class Y extends z.Component{constructor(e){super(e),this.hasUnsavedChanges=!1,this.onChange=this.onChange.bind(this),this.save=this.save.bind(this),this.openNative=this.openNative.bind(this),this.update=this.update.bind(this),this.controls=[{label:z.createElement(J,{size:"18px"}),tooltip:M.CustomCSS.save,onClick:this.save},{label:z.createElement(Z,{size:"18px"}),tooltip:M.CustomCSS.openNative,onClick:this.openNative},{label:z.createElement(K,{size:"18px"}),tooltip:M.CustomCSS.settings,onClick:"showSettings"}]}update(){this.forceUpdate()}updateEditor(e){this.editor&&(this.editor.value=e)}get value(){return this.editor.session.getValue()}set value(e){this.editor.setValue(e)}showSettings(){return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor)}resize(){return this.editor.resize()}setEditorRef(e){this.editor=e,this.props.editorRef&&void 0!==this.props.editorRef.current?this.props.editorRef.current=e:this.props.editorRef&&(this.props.editorRef=e)}render(){return z.createElement(V,{ref:this.setEditorRef.bind(this),language:this.props.language,id:this.props.id||"bd-addon-editor",controls:this.controls,value:this.props.content,onChange:this.onChange})}onChange(){this.hasUnsavedChanges=!0}save(e,t){this.hasUnsavedChanges=!1,this.props.save&&this.props.save(t)}openNative(){this.props.openNative&&this.props.openNative()}}class Q extends z.Component{render(){return z.createElement("svg",{viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},z.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},z.createElement("path",{d:"M0 0h12v12H0"}),z.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}z.Component;class X{static get shouldShowAddonErrors(){return A.get("settings","addons","addonErrors")}static get ModalStack(){return u.getByProps("push","update","pop","popWithKey")}static get AlertModal(){return u.getByPrototypes("handleCancel","handleSubmit","handleMinorConfirm")}static get TextElement(){return u.getByProps("Sizes","Weights")}static get ConfirmationModal(){return u.getModule(e=>e.defaultProps&&e.key&&"confirm-modal"==e.key())}static default(e,t){const s=u.getByProps("backdrop")||{backdrop:"backdrop-1wrmKb"},n=u.getModule(e=>e.modal&&e.inner&&!e.sizeMedium)||{modal:"modal-36zFtW",inner:"inner-2VEzy9"},i=u.getByProps("sizeMedium")||{modal:"backdrop-1wrmKb",sizeMedium:"sizeMedium-ctncE5",content:"content-2KoCOZ",header:"header-2nhbou",footer:"footer-30ewN8",close:"close-hhyjWJ",inner:"inner-2Z5QZX"},o=c.parseHTML(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{o.addClass("closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{o.addClass("closing"),setTimeout(()=>{o.remove()},300)}),document.querySelector("#app-mount").append(o)}static alert(e,t){if(this.ModalStack&&this.AlertModal)return this.default(e,t);this.ModalStack.push((function(s){return z.createElement(this.AlertModal,Object.assign({title:e,body:t},s))}))}static showConfirmationModal(e,t,s={}){const n=this.TextElement,i=this.ConfirmationModal,o=this.ModalStack;if(!this.ModalStack||!this.ConfirmationModal||!this.TextElement)return this.alert(e,t);const{onConfirm:r,onCancel:a,confirmText:l,cancelText:d,danger:c=!1}=s;"string"==typeof t?t=n.default({color:n.Colors.PRIMARY,children:[t]}):Array.isArray(t)&&(t=n.default({color:n.Colors.PRIMARY,children:t})),t=[t];const h=()=>{};o.push((function(s){return z.createElement(i,Object.assign({header:e,children:t,red:c,confirmText:l||M.Modals.okay,cancelText:d||M.Modals.cancel,onConfirm:r||h,onCancel:a||h},s))}))}static showAddonErrors({plugins:e=[],themes:t=[]}){if(!e||!t||!this.shouldShowAddonErrors)return;if(!e.length&&!t.length)return;const s=u.getByProps("backdrop")||{backdrop:"backdrop-1wrmKb"},n=u.getModule(e=>e.modal&&e.inner&&!e.sizeMedium)||{modal:"modal-36zFtW",inner:"inner-2VEzy9"},i=u.getByProps("sizeMedium")||{modal:"modal-3v8ziU",sizeMedium:"sizeMedium-ctncE5",content:"content-2KoCOZ",header:"header-2nhbou",footer:"footer-30ewN8",close:"close-hhyjWJ",inner:"inner-2Z5QZX"},o=$(`
\n
\n
\n
\n
${M.Modals.addonErrors}
\n
\n
\n
\n
${M.Panels.plugins}
\n
${M.Panels.themes}
\n
\n
\n
\n
${M.Modals.name}
\n
${M.Modals.message}
\n
${M.Modals.error}
\n
\n
\n
\n\n
\n
\n
\n \n
\n
\n
`),r=function(e){const t=$('
');for(const s of e){const e=$(`
\n
${s.name?s.name:s.file}
\n
${s.message}
\n \n
`);t.append(e),s.error&&e.find("a").on("click",e=>{e.preventDefault(),d.stacktrace("AddonError",`Error details for ${s.name?s.name:s.file}.`,s.error)})}return t},a=[r(e),r(t)];o.find(".tab-bar-item").on("click",e=>{e.preventDefault(),o.find(".tab-bar-item").removeClass("selected"),$(e.target).addClass("selected"),o.find(".scroller").empty().append(a[$(e.target).index()])}),o.find(".footer button").on("click",()=>{o.addClass("closing"),setTimeout(()=>{o.remove()},300)}),o.find(".bd-backdrop").on("click",()=>{o.addClass("closing"),setTimeout(()=>{o.remove()},300)}),o.appendTo("#app-mount"),e.length?o.find(".tab-bar-item")[0].click():o.find(".tab-bar-item")[1].click()}showChangelogModal(e={}){const t=u.getByProps("push","update","pop","popWithKey"),s=u.getByProps("fixed","improved"),n=u.getByProps("Sizes","Weights"),o=u.getByProps("Child"),r=u.getByProps("Tags","default"),a=u.getModule(e=>e.defaultProps&&0==e.defaultProps.selectable),l=u.getByProps("defaultRules","parse");if(!(a&&t&&s&&n&&o&&r&&l))return;const{image:d="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:c="",changes:h=[],title:p="BandagedBD",subtitle:m=`v${i.bbdVersion}`,footer:g}=e,f=z.createElement,b=[f("img",{src:d})];c&&b.push(f("p",null,l.parse(c)));for(let e=0;ef("li",null,l.parse(e))));b.push(o)}const y=function(){return f(o.Child,{grow:1,shrink:1},f(r.default,{tag:r.Tags.H4},p),f(n,{size:n.Sizes.SMALL,color:n.Colors.PRIMARY,className:s.date},m))},v=()=>{const e=u.getModule(e=>"Anchor"==e.displayName),s=u.getByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},i=e=>{e.preventDefault(),e.stopPropagation(),t.pop()},r=e?f(e,{onClick:i},"Join our Discord Server."):f("a",{className:`${s.anchor} ${s.anchorUnderlineOnHover}`,onClick:i},"Join our Discord Server."),a=f(n,{size:n.Sizes.SMALL,color:n.Colors.PRIMARY},"Need support? ",r);return f(o.Child,{grow:1,shrink:1},g||a)};t.push((function(e){return f(a,Object.assign({className:s.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:y,renderFooter:v,children:b},e))}))}}z.Component;z.Component;var ee=z.createRef().current;const te=p.React,se=s(2),ne=s(1),ie=s(4).Module;ie.globalPaths.push(se.resolve(s(0).remote.app.getAppPath(),"node_modules"));const oe=/[^\S\r\n]*?\r?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,re=/^\\@/,ae=function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e};class le{get name(){return""}get moduleExtension(){return""}get extension(){return""}get addonFolder(){return""}get language(){return""}get prefix(){return"addon"}get collection(){return"settings"}get category(){return"addons"}get id(){return"autoReload"}emit(e,...t){return g.emit(`${this.prefix}-${e}`,...t)}constructor(){this.timeCache={},this.addonList=[],this.state={}}initialize(){return this.originalRequire=ie._extensions[this.moduleExtension],ie._extensions[this.moduleExtension]=this.getAddonRequire(),A.on(this.collection,this.category,this.id,e=>{e?this.watchAddons():this.unwatchAddons()}),this.loadAllAddons()}initializeAddon(){}getFileModification(e,t){return t}startAddon(){}stopAddon(){}loadState(){const e=v.getData(`${this.prefix}s`);e&&Object.assign(this.state,e)}saveState(){v.setData(`${this.prefix}s`,this.state)}watchAddons(){if(this.watcher)return d.error(this.name,`Already watching ${this.prefix} addons.`);d.log(this.name,`Starting to watch ${this.prefix} addons.`),this.watcher=ne.watch(this.addonFolder,{persistent:!1},async(e,t)=>{if(!e||!t||!t.endsWith(this.extension))return;await new Promise(e=>setTimeout(e,50));try{ne.statSync(se.resolve(this.addonFolder,t))}catch(e){if("ENOENT"!==e.code)return;delete this.timeCache[t],this.unloadAddon(t,!0)}if(!ne.statSync(se.resolve(this.addonFolder,t)).isFile())return;const s=ne.statSync(se.resolve(this.addonFolder,t));s&&s.mtime&&s.mtime.getTime()&&"number"==typeof s.mtime.getTime()&&this.timeCache[t]!=s.mtime.getTime()&&(this.timeCache[t]=s.mtime.getTime(),"rename"==e&&this.loadAddon(t,!0),"change"==e&&this.reloadAddon(t,!0))})}unwatchAddons(){if(!this.watcher)return d.error(this.name,`Was not watching ${this.prefix} addons.`);this.watcher.close(),delete this.watcher,d.log(this.name,`No longer watching ${this.prefix} addons.`)}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new N("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],s=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//")),n=c.testJSON(s);if(!n)throw new N("META could not be parsed.");if(!n.name)throw new N("META missing name data.");return n.format="json",n}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],s={};let n="",i="";for(const e of t.split(oe))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){s[n]=i;const t=e.indexOf(" ");n=e.substr(1,t-1),i=e.substr(t+1)}else i+=" "+e.replace("\\n","\n").replace(re,"@");return s[n]=i.trim(),delete s[""],s.format="jsdoc",s}getAddonRequire(){const e=this,t=this.originalRequire;return function(s,n){const i=se.resolve(e.addonFolder,se.basename(n));if(!ne.existsSync(i)||n!==ne.realpathSync(i))return Reflect.apply(t,this,arguments);let o=ne.readFileSync(n,"utf8");o=ae(o);const r=ne.statSync(n),a=e.extractMeta(o);a.id=a.name,a.filename=se.basename(n),a.added=r.atimeMs,a.modified=r.mtimeMs,a.size=r.size,o=e.getFileModification(s,o,a),s._compile(o,n)}}loadAddon(e,t=!1){if(void 0===e)return;try{require(se.resolve(this.addonFolder,e))}catch(n){return new D(e,e,"Could not be compiled.",{message:n.message,stack:n.stack})}const s=require(se.resolve(this.addonFolder,e));if(this.addonList.find(e=>e.id==s.id))return new D(s.name,e,`There is already a plugin with name ${s.name}`);const n=this.initializeAddon(s);return n||(this.addonList.push(s),t&&_.success(`${s.name} v${s.version} was loaded.`),this.emit("loaded",s.id),this.state[s.id]?this.startAddon(s):this.state[s.id]=!1)}unloadAddon(e,t=!0,s=!1){const n="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e;return!!n&&(this.state[n.id]&&(s?this.stopAddon(n):this.disableAddon(n)),delete require.cache[require.resolve(se.resolve(this.addonFolder,n.filename))],this.addonList.splice(this.addonList.indexOf(n),1),this.emit("unloaded",n.id),t&&_.success(`${n.name} was unloaded.`),!0)}reloadAddon(e,t=!0){const s="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e,n=this.unloadAddon(s,t,!0);return n?this.loadAddon(s.filename,t):n}isLoaded(e){return!!this.addonList.find(t=>t.id==e||t.filename==e)}isEnabled(e){const t=this.addonList.find(t=>t.id==e||t.filename==e);return!!t&&this.state[t.id]}enableAddon(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;t&&(this.state[t.id]||(this.state[t.id]=!0,this.startAddon(t),this.saveState()))}disableAddon(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;t&&this.state[t.id]&&(this.state[t.id]=!1,this.stopAddon(t),this.saveState())}toggleAddon(e){this.state[e]?this.disableAddon(e):this.enableAddon(e)}loadNewAddons(){const e=ne.readdirSync(this.addonFolder),t=this.addonList.filter(t=>!e.includes(t.filename)).map(e=>e.id);return{added:e.filter(e=>!this.addonList.find(t=>t.filename==e)&&e.endsWith(this.extension)&&ne.statSync(se.resolve(this.addonFolder,e)).isFile()),removed:t}}updateList(){const e=this.loadNewAddons();for(const t of e.added)this.loadAddon(t);for(const t of e.removed)this.unloadAddon(t)}loadAllAddons(){this.loadState();const e=[],t=ne.readdirSync(this.addonFolder);for(const s of t){if(!ne.statSync(se.resolve(this.addonFolder,s)).isFile()||!s.endsWith(this.extension))continue;const t=this.loadAddon(s,!1);t instanceof D&&e.push(t)}return this.saveState(),A.get(this.collection,this.category,this.id)&&this.watchAddons(),e}deleteAddon(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e;return ne.unlinkSync(se.resolve(this.addonFolder,t.filename))}saveAddon(e,t){const s="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e;return ne.writeFileSync(se.resolve(this.addonFolder,s.filename),t)}editAddon(e,t){const n="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e,i=se.resolve(this.addonFolder,n.filename);return void 0===t&&(t="system"==A.get("settings","addons","editAction")),t?s(0).shell.openItem(`${i}`):this.openDetached(n)}openDetached(e){const t=se.resolve(this.addonFolder,e.filename),s=ne.readFileSync(t).toString(),n=te.createRef(),i=te.createElement(Y,{id:"bd-floating-editor-"+e.name,ref:n,content:s,save:this.saveAddon.bind(this,e),openNative:this.editAddon.bind(this,e,!0),language:this.language});ee.open({onClose:()=>{this.isDetached=!1},onResize:()=>{n&&n.current&&n.current.resize&&n.current.resize()},title:e.name,id:s.id,className:"floating-addon-window",height:470,width:410,center:!0,resizable:!0,children:i,confirmClose:()=>!(!n||!n.current)&&n.current.hasUnsavedChanges,confirmationText:M.Addons.confirmationText.format({name:e.name})})}}class de extends z.Component{constructor(e){super(e)}render(){const e=this.props.isGroup?"bd-settings-title bd-settings-group-title h5-18_1nd title-3sZWYQ size12-3R0845 height16-2Lv3qA weightSemiBold-NJexzi da-h5 da-title da-size12 da-height16 da-weightSemiBold marginBottom4-2qk4Hy da-marginBottom4 marginTop8-1DLZ1n da-marginTop8":"bd-settings-title h2-2gWE-o title-3sZWYQ size16-14cGz5 height20-mO2eIN weightSemiBold-NJexzi defaultColor-1_ajX0 defaultMarginh2-2LTaUL marginBottom20-32qID7",t=this.props.className?`${e} ${this.props.className}`:e;return z.createElement("h2",{className:t,onClick:()=>{this.props.onClick&&this.props.onClick()}},this.props.text,this.props.button&&z.createElement("button",{className:"bd-button bd-button-title",onClick:this.props.button.onClick},this.props.button.title),this.props.otherChildren)}}class ce extends z.Component{render(){const e=this.props.size||"24px";return z.createElement("svg",{className:this.props.className||"",onClick:this.props.onClick,fill:"#dcddde",viewBox:"0 0 24 24",style:{width:e,height:e}},z.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),z.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}class he extends z.Component{render(){const e=this.props.size||"24px";return z.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},z.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),z.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),z.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}class ue extends z.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(){this.props.disabled||(this.props.onChange(!this.state.checked),this.setState({checked:!this.state.checked}))}render(){const e=this.props.disabled?" bd-switch-disabled":"",t=this.state.checked?" bd-switch-checked":"";return z.createElement("div",{className:"bd-switch"+e+t},z.createElement("input",{type:"checkbox",id:this.props.id,className:"bd-checkbox",disabled:this.props.disabled,checked:this.state.checked,onChange:this.onChange}))}}function pe(){return(pe=Object.assign||function(e){for(var t=1;t{const s=e.scrollTop,n=s+e.clientHeight,i=t.offsetTop,o=i+t.clientHeight;return in})(t[0],e[0])&&t.animate({scrollTop:e.offset().top-t.offset().top+t.scrollTop()-30},300)}getString(e){return"string"==typeof e?e:e.toString()}onChange(){this.props.onChange&&this.props.onChange(this.props.addon.id),this.props.enabled=!this.props.enabled}showSettings(){this.props.hasSettings&&this.setState({settingsOpen:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}buildTitle(e,t,s){const n=M.Addons.title.split(/({{[A-Za-z]+}})/),i=n.findIndex(e=>"{{name}}"==e);i&&(n[i]=z.createElement("span",{className:"bd-name"},e));const o=n.findIndex(e=>"{{version}}"==e);i&&(n[o]=z.createElement("span",{className:"bd-version"},t));const r=n.findIndex(e=>"{{author}}"==e);return i&&(n[r]=z.createElement("span",{className:"bd-author"},s)),n.flat()}get settingsComponent(){const e=this.props.addon,t=this.getString(e.name);try{this.settingsPanel=this.props.getSettingsPanel()}catch(e){d.stacktrace("Addon Settings","Unable to get settings panel for "+t+".",e)}const s={id:`${t}-settings`,className:"addon-settings",ref:this.panelRef};return"string"==typeof settingsPanel&&(s.dangerouslySetInnerHTML=this.settingsPanel),z.createElement("div",{className:"bd-addon-card settings-open bd-switch-item"},z.createElement("div",{className:"bd-close",onClick:this.closeSettings},z.createElement(Q,null)),z.createElement("div",s,this.settingsPanel instanceof z.Component?this.settingsPanel:null))}buildLink(e){const t=this.props.addon[e];return t?z.createElement("a",{className:"bd-link bd-link-website",href:t,target:"_blank",rel:"noopener noreferrer"},M.Addons[e]):null}get footer(){const e=["website","source","invite","donate","patreon"];if(!e.some(e=>this.props.addon[e])&&!this.props.hasSettings)return null;const t=e.map(this.buildLink.bind(this)).filter(e=>e);return z.createElement("div",{className:"bd-footer"},z.createElement("span",{className:"bd-links"},t.map((e,s)=>sz.createElement("div",pe({},e,{className:"bd-addon-button",onClick:s}),t))}render(){if(this.state.settingsOpen)return this.settingsComponent;const e=this.props.addon,t=this.getString(e.name),s=this.getString(e.author),n=this.getString(e.description),i=this.getString(e.version);return z.createElement("div",{id:`${e.id}-card`,className:"bd-addon-card settings-closed"},z.createElement("div",{className:"bd-addon-header"},z.createElement("span",{className:"bd-title"},this.buildTitle(t,i,s)),z.createElement("div",{className:"bd-controls"},this.props.editAddon&&this.makeButton(M.Addons.editAddon,z.createElement(Z,null),this.props.editAddon),this.props.deleteAddon&&this.makeButton(M.Addons.deleteAddon,z.createElement(he,null),this.props.deleteAddon),this.props.showReloadIcon&&this.makeButton(M.Addons.reload,z.createElement(ce,{className:"bd-reload bd-reload-card"}),this.reload),z.createElement(ue,{checked:this.props.enabled,onChange:this.onChange}))),z.createElement("div",{className:"bd-description-wrap scroller-wrap fade"},z.createElement("div",{className:"bd-description scroller"},n)),this.footer)}}class fe extends z.Component{render(){const e=this.props.size||"16px";return z.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e}},z.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}class be extends z.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=z.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return z.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>z.createElement("div",{className:`bd-select-option${e.value==t.value?" selected":""}`,onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return z.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},z.createElement("div",{className:"bd-select-value"},this.selected.label),z.createElement(fe,{className:"bd-select-arrow"}),this.state.open&&this.options)}}class ye extends z.Component{render(){const e=this.props.size||"16px";return z.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e}},z.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),z.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}class ve extends z.Component{render(){return z.createElement("div",{className:"bd-search-wrapper"},z.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),z.createElement(ye,null))}}class we extends z.Component{constructor(e){super(e),this.state={sort:"name",ascending:!0,query:""},this.sort=this.sort.bind(this),this.reverse=this.reverse.bind(this),this.search=this.search.bind(this),this.update=this.update.bind(this)}componentDidMount(){g.on(`${this.props.prefix}-loaded`,this.update),g.on(`${this.props.prefix}-unloaded`,this.update)}componentWillUnmount(){g.off(`${this.props.prefix}-loaded`,this.update),g.off(`${this.props.prefix}-unloaded`,this.update)}update(){this.forceUpdate()}reload(){this.props.refreshList&&this.props.refreshList(),this.forceUpdate()}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}get sortOptions(){return[{label:M.Addons.name,value:"name"},{label:M.Addons.author,value:"author"},{label:M.Addons.version,value:"version"},{label:M.Addons.added,value:"added"},{label:M.Addons.modified,value:"modified"}]}get directions(){return[{label:M.Sorting.ascending,value:!0},{label:M.Sorting.descending,value:!1}]}render(){const{title:e,folder:t,addonList:n,addonState:i,onChange:o,reload:r}=this.props,a=!A.get("settings","addons","autoReload"),l=t?{title:M.Addons.openFolder.format({type:e}),onClick:()=>{s(0).shell.openItem(t)}}:null,d=n.sort((e,t)=>{const s=e[this.state.sort],n=t[this.state.sort];return"string"==typeof s?s.toLocaleLowerCase().localeCompare(n.toLocaleLowerCase()):s>n?1:n>s?-1:0});return this.state.ascending||d.reverse(),[z.createElement(de,{key:"title",text:e,button:l,otherChildren:a&&z.createElement(ce,{className:"bd-reload",onClick:this.reload.bind(this)})}),z.createElement("div",{className:"bd-controls bd-addon-controls"},z.createElement(ve,{onChange:this.search,placeholder:`${M.Addons.search.format({type:this.props.title})}...`}),z.createElement("div",{className:"bd-addon-dropdowns"},z.createElement("div",{className:"bd-select-wrapper"},z.createElement("label",{className:"bd-label"},M.Sorting.sortBy,":"),z.createElement(be,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),z.createElement("div",{className:"bd-select-wrapper"},z.createElement("label",{className:"bd-label"},M.Sorting.order,":"),z.createElement(be,{options:this.directions,onChange:this.reverse,style:"transparent"})))),z.createElement("div",{key:"addonList",className:"bd-addon-list"},d.map(e=>{if(this.state.query){let t=e.name.toLocaleLowerCase().includes(this.state.query);if(t=t||e.author.toLocaleLowerCase().includes(this.state.query),t=t||e.description.toLocaleLowerCase().includes(this.state.query),!t)return null}const t=e.type&&"function"==typeof e.plugin.getSettingsPanel,s=t&&e.plugin.getSettingsPanel.bind(e.plugin);return z.createElement(ge,{editAddon:this.editAddon.bind(this,e.id),deleteAddon:this.deleteAddon.bind(this,e.id),showReloadIcon:a,key:e.id,enabled:i[e.id],addon:e,onChange:o,reload:r,hasSettings:t,getSettingsPanel:s})}))]}editAddon(e){this.props.editAddon&&this.props.editAddon(e)}async deleteAddon(e){const t=this.props.addonList.find(t=>t.id==e);await this.confirmDelete(t)&&this.props.deleteAddon&&this.props.deleteAddon(t)}confirmDelete(e){return new Promise(t=>{X.showConfirmationModal(M.Modals.confirmAction,M.Addons.confirmDelete.format({name:e.name}),{danger:!0,confirmText:M.Addons.deleteAddon,onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}}class Ce extends z.Component{render(){return z.createElement("div",{className:"bd-divider divider-3573oO marginTop8-1DLZ1n marginBottom40-2vIwTv"})}}class Se extends z.Component{render(){return z.createElement("div",{className:"bd-setting-item"},z.createElement("div",{className:"bd-setting-header"},z.createElement("label",{htmlFor:this.props.id,className:"bd-setting-title"},this.props.name),this.props.children),z.createElement("div",{className:"bd-setting-note"},this.props.note),z.createElement("div",{className:"bd-setting-divider"}))}}class Ee extends z.Component{constructor(e){if(super(e),this.props.button&&this.props.collapsible){const e=this.props.button.onClick;this.props.button.onClick=t=>{t.stopPropagation(),e(...arguments)}}this.props.hasOwnProperty("shown")||(this.props.shown=!0),this.container=z.createRef(),this.state={collapsed:this.props.collapsible&&!this.props.shown},this.onChange=this.onChange.bind(this),this.toggleCollapse=this.toggleCollapse.bind(this)}toggleCollapse(){const e=this.container.current,t=this.state.collapsed?300:1;e.style.setProperty("height",e.scrollHeight+"px"),e.classList.add("animating"),this.setState({collapsed:!this.state.collapsed},()=>setTimeout(()=>{e.style.setProperty("height",""),e.classList.remove("animating")},t))}onChange(e,t){this.props.onChange&&(this.props.id?this.props.onChange(this.props.id,e,t):this.props.onChange(e,t),this.forceUpdate())}render(){const{settings:e}=this.props,t=`bd-settings-group ${this.props.collapsible?`collapsible ${this.state.collapsed?"collapsed":"expanded"}`:""}`;return z.createElement("div",{className:t},z.createElement(de,{text:this.props.name,collapsible:this.props.collapsible,onClick:this.toggleCollapse,button:this.props.button,isGroup:!0}),z.createElement("div",{className:"bd-settings-container",ref:this.container},e.filter(e=>!e.hidden).map(e=>{let t=null;return"dropdown"==e.type&&(t=z.createElement(be,{disabled:e.disabled,id:e.id,options:e.options,value:e.value,onChange:this.onChange.bind(this,e.id)})),"switch"==e.type&&(t=z.createElement(ue,{disabled:e.disabled,id:e.id,checked:e.value,onChange:this.onChange.bind(this,e.id)})),t?z.createElement(Se,{id:e.id,key:e.id,name:e.name,note:e.note},t):null})),this.props.showDivider&&z.createElement(Ce,null))}}class Pe extends z.Component{buildTitle(e,t,s){const n=M.Addons.title.split(/({{[A-Za-z]+}})/),i=n.findIndex(e=>"{{name}}"==e);i&&(n[i]=e);const o=n.findIndex(e=>"{{version}}"==e);i&&(n[o]=t);const r=n.findIndex(e=>"{{author}}"==e);return i&&(n[r]=s),n.flat()}render(){return z.createElement("div",{id:"bbd-version"},this.buildTitle("BBD",i.bbdVersion,z.createElement("a",{href:"https://github.com/rauenzi",target:"_blank",rel:"noopener noreferrer"},"Zerebos")))}}var xe=new class{constructor(){this.patchSections(),g.on("strings-updated",this.forceUpdate)}onChange(e){return(t,s,n)=>{const i=A.collections.length+A.panels.length;e(t,s,n),i!=A.collections.length+A.panels.length&&setTimeout(this.forceUpdate.bind(this),50)}}buildSettingsPanel(e,t,s,n,i=null){return t.forEach(e=>{e.settings.forEach(t=>t.value=s[e.id][t.id])}),this.getSettingsPanel(e,t,this.onChange(n),i)}getSettingsPanel(e,t,s,n=null){return[z.createElement(de,{text:e,button:n}),t.map(e=>z.createElement(Ee,Object.assign({},e,{onChange:s})))]}getAddonPanel(e,t,s,n={}){return z.createElement(we,Object.assign({},{title:e,addonList:t,addonState:s},n))}async patchSections(){O.get("FluxContainer(GuildSettings)",e=>"FluxContainer(GuildSettings)"==e.displayName).then(e=>console.log("COMPONENT",e));const e=await O.get("UserSettings",e=>e.prototype&&e.prototype.generateSections);B.after("SettingsManager",e.prototype,"render",e=>{e._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id="user-settings"}),B.after("SettingsManager",e.prototype,"generateSections",(e,t,s)=>{let n=s.findIndex(e=>"linux"==e.section.toLowerCase())+1;const i=e=>{s.splice(n,0,e),n++};i({section:"DIVIDER"}),i({section:"HEADER",label:"BandagedBD"});for(const e of A.collections)e.disabled||i({section:e.name,label:e.name,element:()=>this.buildSettingsPanel(e.name,e.settings,A.state[e.id],A.onSettingChange.bind(A,e.id),e.button?e.button:null)});for(const t of A.panels.sort((e,t)=>e.order>t.order))t.clickListener&&(t.onClick=n=>t.clickListener(e,n,s)),i(t);i({section:"CUSTOM",element:Pe})}),this.forceUpdate()}forceUpdate(){const e=u.getByProps("standardSidebarView").standardSidebarView.split(" ")[0],t=document.querySelector(`.${e}`);if(!t)return;const s=c.findInReactTree(c.getReactInstance(t),e=>e&&e.generateSections,{walkable:["return","stateNode"]});s&&s.forceUpdate()}};const ke=s(2),Me=s(0).remote;var Ae=new class extends le{get name(){return"PluginManager"}get moduleExtension(){return".js"}get extension(){return".plugin.js"}get addonFolder(){return ke.resolve(i.dataPath,"plugins")}get prefix(){return"plugin"}get language(){return"javascript"}constructor(){super(),this.onSwitch=this.onSwitch.bind(this),this.observer=new MutationObserver(e=>{for(let t=0,s=e.length;txe.getAddonPanel(M.Panels.plugins,this.addonList,this.state,{folder:this.addonFolder,onChange:this.togglePlugin.bind(this),reload:this.reloadPlugin.bind(this),refreshList:this.updatePluginList.bind(this),saveAddon:this.saveAddon.bind(this),editAddon:this.editAddon.bind(this),deleteAddon:this.deleteAddon.bind(this),prefix:this.prefix})}),e}updatePluginList(){return this.updateList()}loadAllPlugins(){return this.loadAllAddons()}enablePlugin(e){return this.enableAddon(e)}disablePlugin(e){return this.disableAddon(e)}togglePlugin(e){return this.toggleAddon(e)}unloadPlugin(e){return this.unloadAddon(e)}loadPlugin(e){const t=this.loadAddon(e);t&&X.showAddonErrors({themes:[t]})}reloadPlugin(e){const t=this.reloadAddon(e);return t&&X.showAddonErrors({plugins:[t]}),"string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e}initializeAddon(e){if(!e.type)return new D(e.name,e.filename,"Plugin had no exports",{message:"Plugin had no exports or no name property.",stack:""});try{const t=new e.type;e.plugin=t,e.name=t.getName()||e.name,e.author=t.getAuthor()||e.author||"No author",e.description=t.getDescription()||e.description||"No description",e.version=t.getVersion()||e.version||"No version";try{"function"==typeof e.plugin.load&&e.plugin.load()}catch(t){return this.state[e.id]=!1,new D(e.name,e.filename,"load() could not be fired.",{message:t.message,stack:t.stack})}}catch(t){return new D(e.name,e.filename,"Could not be constructed.",{message:t.message,stack:t.stack})}}getFileModification(e,t,s){return e._compile(t,e.filename),c.isEmpty(e.exports)?t+=`\nmodule.exports = ${JSON.stringify(s)};\nmodule.exports.type = ${s.exports||s.name};`:(s.type=e.exports,e.exports=s,"")}startAddon(e){return this.startPlugin(e)}stopAddon(e){return this.stopPlugin(e)}startPlugin(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;if(!t)return;const s=t.plugin;try{s.start(),this.emit("started",t.id),_.show(`${t.name} v${t.version} has started.`)}catch(e){return this.state[t.id]=!1,_.error(`${t.name} v${t.version} could not be started.`),d.stacktrace(this.name,t.name+" could not be started.",e),new D(t.name,t.filename,"start() could not be fired.",{message:e.message,stack:e.stack})}}stopPlugin(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;if(!t)return;const s=t.plugin;try{s.stop(),this.emit("stopped",t.id),_.show(`${t.name} v${t.version} has stopped.`)}catch(e){return this.state[t.id]=!1,_.error(`${t.name} v${t.version} could not be stopped.`),d.stacktrace(this.name,t.name+" could not be stopped.",e),new D(t.name,t.filename,"stop() could not be fired.",{message:e.message,stack:e.stack})}}setupFunctions(){Me.getCurrentWebContents().on("did-navigate-in-page",this.onSwitch.bind(this)),this.observer.observe(document,{childList:!0,subtree:!0})}onSwitch(){this.emit("page-switch");for(let e=0;exe.getAddonPanel(M.Panels.themes,this.addonList,this.state,{folder:this.addonFolder,onChange:this.toggleTheme.bind(this),reload:this.reloadTheme.bind(this),refreshList:this.updateThemeList.bind(this),saveAddon:this.saveAddon.bind(this),editAddon:this.editAddon.bind(this),deleteAddon:this.deleteAddon.bind(this),prefix:this.prefix})}),e}updateThemeList(){return this.updateList()}loadAllThemes(){return this.loadAllAddons()}enableTheme(e){return this.enableAddon(e)}disableTheme(e){return this.disableAddon(e)}toggleTheme(e){return this.toggleAddon(e)}unloadTheme(e){return this.unloadAddon(e)}loadTheme(e){const t=this.loadAddon(e);t&&X.showAddonErrors({themes:[t]})}reloadTheme(e){const t=this.reloadAddon(e);t&&X.showAddonErrors({themes:[t]})}getFileModification(e,t,s){return s.css=t,`module.exports = ${JSON.stringify(s)};`}startAddon(e){return this.addTheme(e)}stopAddon(e){return this.removeTheme(e)}addTheme(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;t&&(x.injectTheme(t.id,t.css),_.show(`${t.name} v${t.version} has been applied.`))}removeTheme(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;t&&(x.removeTheme(t.id),_.show(`${t.name} v${t.version} has been removed.`))}};class Be{get name(){return"Unnamed Builtin"}get collection(){return"settings"}get category(){return"general"}get id(){return"None"}async initialize(){A.get(this.collection,this.category,this.id)&&await this.enable(),g.on("setting-updated",(e,t,s,n)=>{e==this.collection&&t===this.category&&s===this.id&&(n?this.enable():this.disable())})}registerSetting(e,t,s,n,i){return 4==arguments.length?(e=this.collection,t=arguments[0],s=arguments[1],n=arguments[2],i=arguments[3]):3==arguments.length&&(e=this.collection,t=this.category,s=arguments[0],n=arguments[1],i=arguments[2]),A.on(e,t,s,e=>{e?n():i()})}get(e,t,s){return 2==arguments.length?(e=this.collection,t=arguments[0],s=arguments[1]):1==arguments.length&&(e=this.collection,t=this.category,s=arguments[0]),A.get(e,t,s)}async enable(){this.log("Enabled"),await this.enabled()}async disable(){this.log("Disabled"),await this.disabled()}async enabled(){}async disabled(){}log(...e){d.log(this.name,...e)}warn(...e){d.warn(this.name,...e)}error(...e){d.err(this.name,...e)}stacktrace(e,t){d.stacktrace(this.name,e,t)}after(e,t,s){return B.after(this.name,e,t,s)}unpatchAll(){return B.unpatchAll(this.name)}}const Fe=u.getByDisplayName("Tooltip");class Te extends z.Component{constructor(e){super(e),this.state={shouldAnimate:!this.animateOnHover,isFavorite:this.props.isFavorite},this.onMouseEnter=this.onMouseEnter.bind(this),this.onMouseLeave=this.onMouseLeave.bind(this),this.onClick=this.onClick.bind(this),this.toggleFavorite=this.toggleFavorite.bind(this)}get animateOnHover(){return A.get("emotes","general","animateOnHover")}get label(){return this.props.modifier?`${this.props.name}:${this.props.modifier}`:this.props.name}get modifierClass(){return this.props.modifier?` emote${this.props.modifier}`:""}onMouseEnter(){!this.state.shouldAnimate&&this.animateOnHover&&this.setState({shouldAnimate:!0})}onMouseLeave(){this.state.shouldAnimate&&this.animateOnHover&&this.setState({shouldAnimate:!1})}onClick(e){this.props.onClick&&this.props.onClick(e)}toggleFavorite(e){e.preventDefault(),e.stopPropagation(),this.state.isFavorite?g.emit("emotes-favorite-removed",this.label):g.emit("emotes-favorite-added",this.label,this.props.url),this.setState({isFavorite:!this.state.isFavorite})}render(){return z.createElement(Fe,{color:"black",position:"top",text:this.label,delay:750},e=>z.createElement("div",Object.assign({className:"emotewrapper"+(this.props.jumboable?" jumboable":""),onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onClick:this.onClick},e),z.createElement("img",{draggable:!1,className:"emote"+this.modifierClass+(this.props.jumboable?" jumboable":"")+(this.state.shouldAnimate?"":" stop-animation"),dataModifier:this.props.modifier,alt:this.label,src:this.props.url}),z.createElement("input",{className:"fav"+(this.state.isFavorite?" active":""),title:M.Emotes.favoriteAction,type:"button",onClick:this.toggleFavorite})))}}const Le=s(3),je={TwitchGlobal:new k("https://static-cdn.jtvnw.net/emoticons/v1/{{id}}/1.0"),TwitchSubscriber:new k("https://static-cdn.jtvnw.net/emoticons/v1/{{id}}/1.0"),FrankerFaceZ:new k("https://cdn.frankerfacez.com/emoticon/{{id}}/1"),BTTV:new k("https://cdn.betterttv.net/emote/{{id}}/1x")},$e={TwitchGlobal:{},TwitchSubscriber:{},BTTV:{},FrankerFaceZ:{}},Oe=[],ze=["twitch","subscriber","bttv","ffz"],Re=["flip","spin","pulse","spin2","spin3","1spin","2spin","3spin","tr","bl","br","shake","shake2","shake3","flap"];var Ie=new class extends Be{get name(){return"Emotes"}get collection(){return"settings"}get category(){return"general"}get id(){return"emotes"}get categories(){return Object.keys($e).filter(e=>this.isCategoryEnabled(e))}get shouldDownload(){return A.get("emotes",this.category,"download")}isCategoryEnabled(e){return super.get("emotes","categories",e.toLowerCase())}get(e){return super.get("emotes","general",e)}get MessageContentComponent(){return u.getModule(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get Emotes(){return $e}get TwitchGlobal(){return $e.TwitchGlobal}get TwitchSubscriber(){return $e.TwitchSubscriber}get BTTV(){return $e.BTTV}get FrankerFaceZ(){return $e.FrankerFaceZ}get blacklist(){return Oe}get favorites(){return this.favoriteEmotes}getUrl(e,t){return je[e].format({id:$e[e][t]})}getCategory(e){return $e[e]}getRemoteFile(e){return c.repoUrl(`data/emotes/${e.toLowerCase()}.json`)}initialize(){super.initialize(),window.emoteModule=this;const e=v.getBDData("favoriteEmotes");this.favoriteEmotes=e||{},this.addFavorite=this.addFavorite.bind(this),this.removeFavorite=this.removeFavorite.bind(this),this.onCategoryToggle=this.onCategoryToggle.bind(this),this.resetEmotes=this.resetEmotes.bind(this)}async enabled(){A.registerCollection("emotes","Emotes",o,{title:M.Emotes.clearEmotes,onClick:this.resetEmotes}),await this.getBlacklist(),await this.loadEmoteData(),g.on("emotes-favorite-added",this.addFavorite),g.on("emotes-favorite-removed",this.removeFavorite),g.on("setting-updated",this.onCategoryToggle)}disabled(){console.log("DISABLED"),g.off("setting-updated",this.onCategoryToggle),g.off("emotes-favorite-added",this.addFavorite),g.off("emotes-favorite-removed",this.removeFavorite),A.removeCollection("emotes"),this.emptyEmotes(),this.cancelEmoteRender&&(this.cancelEmoteRender(),delete this.cancelEmoteRender)}onCategoryToggle(e,t,s,n){if("emotes"==e&&"categories"==t)return n?this.loadEmoteData(s):this.unloadEmoteData(s)}addFavorite(e,t){this.favoriteEmotes.hasOwnProperty(e)||(this.favoriteEmotes[e]=t),this.saveFavorites()}removeFavorite(e){this.favoriteEmotes.hasOwnProperty(e)&&(delete this.favoriteEmotes[e],this.saveFavorites())}isFavorite(e){return this.favoriteEmotes.hasOwnProperty(e)}saveFavorites(){v.setBDData("favoriteEmotes",this.favoriteEmotes)}emptyEmotes(){for(const e in $e)Object.assign($e,{[e]:{}})}patchMessageContent(){this.cancelEmoteRender||(this.cancelEmoteRender=this.after(this.MessageContentComponent.prototype,"render",(e,t,s)=>{this.after(s.props,"children",(e,t,s)=>{if(0==this.categories.length)return;const n=s.props.children[1];if(!n.props.children)return;const i=n.props.children[1];if(i&&i.length){for(let e=0;e"string"==typeof e&&""==e.replace(/\s*/,"")||(!(!e.type||"BDEmote"!=e.type.name)||!!(e.props&&e.props.children&&e.props.children.props&&e.props.children.props.emojiName))))for(const e of i)"object"==typeof e&&("BDEmote"==e.type.name?e.props.jumboable=!0:e.props&&e.props.children&&e.props.children.props&&e.props.children.props.emojiName&&(e.props.children.props.jumboable=!0))}})}))}async getBlacklist(){try{const e="Blacklist",t=v.emotesExist(e),s=await this.isCacheValid(e),n=s||!s&&t&&!this.shouldDownload?v.getEmoteData(e):await this.downloadEmotes(e);Oe.push(...n)}catch(e){}}isCacheValid(e){return new Promise(t=>{const s=v.getCacheHash("emotes",e);if(!s)return t(!1);Le.head({url:this.getRemoteFile(e),headers:{"If-None-Match":s}},(e,s)=>{t(304==s.statusCode)})})}async loadEmoteData(e){e||(e=this.categories),Array.isArray(e)||(e=[e]);const t=Object.keys($e);e=e.map(e=>t.find(t=>t.toLowerCase()==e.toLowerCase())),_.show(M.Emotes.loading,{type:"info"}),this.emotesLoaded=!1;for(const t of e){const e=v.emotesExist(t),s=await this.isCacheValid(t);let n=null;if(s||!s&&e&&!this.shouldDownload){this.log(`Loading ${t} emotes from local cache.`);const e=v.getEmoteData(t);Object.keys(e).length>0&&(n=e)}n||(n=await this.downloadEmotes(t)),Object.assign($e[t],n),await new Promise(e=>setTimeout(e,1e3))}this.emotesLoaded=!0,g.dispatch("emotes-loaded"),_.show(M.Emotes.loaded,{type:"success"})}unloadEmoteData(e){e||(e=this.categories),Array.isArray(e)||(e=[e]);const t=Object.keys($e);e=e.map(e=>t.find(t=>t.toLowerCase()==e.toLowerCase()));for(const t of e)delete $e[t],$e[t]={}}downloadEmotes(e){const t=this.getRemoteFile(e);this.log(`Downloading ${e} from ${t}`);const s={url:t,timeout:1e4,json:!0};return new Promise(t=>{Le.get(s,(s,n,i)=>{if(s||200!=n.statusCode)return this.stacktrace(`Could not download ${e} emotes.`,s),t({});for(const e in i)(e.length<4||Oe.includes(e)||!i[e])&&delete i[e];v.saveEmoteData(e,i),v.setCacheHash("emotes",e,n.headers.etag),t(i),this.log(`Downloaded ${e}`)})})}resetEmotes(){const e=Object.keys($e);this.unloadEmoteData(e);for(const t of e)v.invalidateCache("emotes",t);this.loadEmoteData()}};class _e extends z.Component{render(){const e=this.props.size||"24px";return z.createElement("svg",{viewBox:"0 0 24 24",style:{width:e,height:e}},z.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),z.createElement("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"}))}}class qe extends z.Component{constructor(e){super(e),this.hasUnsavedChanges=!1,this.onChange=this.onChange.bind(this),this.toggleLiveUpdate=this.toggleLiveUpdate.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.openDetached=this.props.openDetached?this.openDetached.bind(this):null,this.openNative=this.openNative.bind(this),this.updateEditor=this.updateEditor.bind(this),this.controls=[{label:z.createElement(ce,{size:"18px"}),tooltip:M.CustomCSS.update,onClick:this.updateCss},{label:z.createElement(J,{size:"18px"}),tooltip:M.CustomCSS.save,onClick:this.saveCss},{label:z.createElement(Z,{size:"18px"}),tooltip:M.CustomCSS.openNative,onClick:this.openNative},{label:z.createElement(K,{size:"18px"}),tooltip:M.CustomCSS.settings,onClick:"showSettings"},{label:M.Collections.settings.customcss.liveUpdate.name,type:"checkbox",onChange:this.toggleLiveUpdate,checked:A.get("settings","customcss","liveUpdate"),side:"right"}],this.openDetached&&this.controls.push({label:z.createElement(_e,{size:"18px"}),tooltip:M.CustomCSS.openDetached,onClick:this.openDetached,side:"right"})}componentDidMount(){g.on("customcss-updated",this.updateEditor)}componentWillUnmount(){g.off("customcss-updated",this.updateEditor)}updateEditor(e){this.editor&&(this.editor.value=e)}get value(){return this.editor.session.getValue()}set value(e){this.editor.setValue(e)}showSettings(){return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor)}resize(){return this.editor.resize()}setEditorRef(e){this.editor=e,this.props.editorRef&&void 0!==this.props.editorRef.current?this.props.editorRef.current=e:this.props.editorRef&&(this.props.editorRef=e)}onChange(){this.hasUnsavedChanges=!0,this.props.onChange&&this.props.onChange(...arguments)}render(){return z.createElement(V,{ref:this.setEditorRef.bind(this),readOnly:this.props.readOnly,id:this.props.id||"bd-customcss-editor",onChange:this.onChange,controls:this.controls,value:this.props.css})}toggleLiveUpdate(e){A.set("settings","customcss","liveUpdate",e)}updateCss(e,t){this.props.update&&this.props.update(t)}saveCss(e,t){this.hasUnsavedChanges=!1,this.props.save&&this.props.save(t)}openDetached(e,t){this.props.openDetached&&this.props.openDetached(t)}openNative(){this.props.openNative&&this.props.openNative()}}const He=s(1),Ue=s(0),We=u.getByProps("updateAccount"),Ge=u.getByProps("dirtyDispatch"),Ve=u.getByProps("ActionTypes").ActionTypes;var Je=new class extends Be{get name(){return"Custom CSS"}get category(){return"customcss"}get id(){return"customcss"}get startDetached(){return"detached"==A.get(this.collection,this.category,"openAction")}get nativeOpen(){return"system"==A.get(this.collection,this.category,"openAction")}constructor(){super(),this.savedCss="",this.insertedCss="",this.isDetached=!1}async enabled(){window.ace||x.injectScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js").then(()=>{window.require.original&&(window.require=window.require.original)}),A.registerPanel(this.id,M.Panels.customcss,{order:2,element:()=>[z.createElement(de,{text:M.CustomCSS.editorTitle}),z.createElement(qe,{css:this.savedCss,save:this.saveCSS.bind(this),update:this.insertCSS.bind(this),openNative:this.openNative.bind(this),openDetached:this.openDetached.bind(this),onChange:this.onChange.bind(this)})],onClick:e=>{if(this.isDetached)return;if(this.nativeOpen)return this.openNative();if(this.startDetached)return this.openDetached();const t=c.findInRenderTree(e._reactInternalFiber,e=>e&&e.onSetSection,{walkable:["child","memoizedProps","props","children"]});t&&t.onSetSection&&t.onSetSection(this.id)}}),this.loadCSS(),this.insertCSS(this.savedCss),this.watchContent()}disabled(){A.removePanel(this.id),this.unwatchContent()}watchContent(){if(this.watcher)return this.error("Already watching content.");const e={};this.log("Starting to watch content."),this.watcher=He.watch(v.customCSS,{persistent:!1},async(t,s)=>{if(!t||!s)return;await new Promise(e=>setTimeout(e,50));try{He.statSync(v.customCSS)}catch(t){if("ENOENT"!==t.code)return;delete e[s],this.saveCSS("")}const n=He.statSync(v.customCSS);if(n&&n.mtime&&n.mtime.getTime()&&"number"==typeof n.mtime.getTime()&&e[s]!=n.mtime.getTime()&&(e[s]=n.mtime.getTime(),"change"==t)){const e=v.loadCustomCSS();if(e==this.savedCss)return;this.savedCss=e,this.insertCSS(this.savedCss),g.emit("customcss-updated",this.savedCss)}})}unwatchContent(){if(!this.watcher)return this.error("Was not watching content.");this.watcher.close(),delete this.watcher,this.log("No longer watching content.")}onChange(e){A.get("settings","customcss","liveUpdate")&&(this.insertCSS(e),this.saveCSS(e))}loadCSS(){this.savedCss=v.loadCustomCSS()}insertCSS(e){void 0===e?e=this.insertedCss:this.insertedCss=e,x.updateCustomCSS(e)}saveCSS(e){void 0!==e&&(this.savedCss=e),v.saveCustomCSS(this.savedCss)}openNative(){Ue.shell.openExternal(`file://${v.customCSS}`)}openDetached(e){const t=z.createRef(),s=z.createElement(qe,{id:"bd-floating-editor",ref:t,css:e,save:this.saveCSS.bind(this),update:this.insertCSS.bind(this),openNative:this.openNative.bind(this),onChange:this.onChange.bind(this)});ee.open({onClose:()=>{this.isDetached=!1},onResize:()=>{t&&t.current&&t.current.resize&&t.current.resize()},title:M.CustomCSS.editorTitle,id:"floating-editor-window",height:470,width:410,center:!0,resizable:!0,children:s,confirmClose:()=>!(!t||!t.current)&&t.current.hasUnsavedChanges,confirmationText:M.CustomCSS.confirmationText}),this.isDetached=!0,We.close(),Ge.dirtyDispatch({type:Ve.LAYER_POP})}},Ze=new class extends Be{get name(){return"VoiceMode"}get category(){return"appearance"}get id(){return"voiceMode"}enabled(){document.querySelector(".chat-3bRxxu").style.setProperty("visibility","hidden"),document.querySelector(".chat-3bRxxu").style.setProperty("min-width","0px"),document.querySelector(".channels-Ie2l6A").style.setProperty("flex-grow","100000")}disabled(){document.querySelector(".chat-3bRxxu").style.setProperty("visibility",""),document.querySelector(".chat-3bRxxu").style.setProperty("min-width",""),document.querySelector(".channels-Ie2l6A").style.setProperty("flex-grow","")}};const Ke=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var Ye=new class extends Be{get id(){return"classNormalizer"}get category(){return"general"}get name(){return"ClassNormalizer"}enabled(){this.hasPatched||(this.patchClassModules(u.getModules(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}disabled(){this.hasPatched&&(this.unpatchClassModules(u.getModules(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const s=e[t];if("string"!=typeof s)return!1;if(!this.shouldIgnore(s)){if(1===s.split("-").length)return!1;if(!Ke.test(s.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const s in t){const n=t[s];if(this.shouldIgnore(n))continue;const i=n.split(" ");for(const n of i){const i=n.match(Ke);if(!i||!i.length||i.length<2)continue;const o=i[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[s]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const s in t){const n=t[s];if(this.shouldIgnore(n))continue;let i="";const o=n.split(" ");for(const t of o)t.startsWith(`${e}-`)||(i+=` ${t}`);t[s]=i.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let s=0,n=t.length;st?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${n}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,s=[];for(let e=0;ee.call(this,t))}}},Qe=new class extends Be{get name(){return"DeveloperMode"}get category(){return"developer"}get id(){return"developerMode"}get selectorModeID(){return"copySelector"}get selectorMode(){return this.get(this.selectorModeID)}constructor(){super(),this.enableSelectors=this.enableSelectors.bind(this),this.disableSelectors=this.disableSelectors.bind(this)}enabled(){$(document).on("keydown.bdDevmode",e=>{119!==e.which&&118!=e.which||this.log("Debugger Activated")}),this.selectorMode&&this.enableSelectors(),this.selectorCancel=this.registerSetting(this.selectorModeID,this.enableSelectors,this.disableSelectors)}disabled(){$(document).off("keydown.bdDevmode"),this.selectorMode&&this.disableSelectors(),this.selectorCancel&&this.selectorCancel()}enableSelectors(){$(document).on("contextmenu.bdDevmode",e=>{this.lastSelector=this.getSelector(e.toElement);setImmediate(()=>{let t=$(".contextMenu-HLZMGh");t.length<=0&&(t=$('
'),t.addClass($(".app, .app-2rEoOp").hasClass("theme-dark")?"theme-dark":"theme-light"),t.appendTo(".app, .app-2rEoOp"),t.css("top",e.clientY),t.css("left",e.clientX),$(document).on("click.bdDevModeCtx",()=>{t.remove(),$(document).off(".bdDevModeCtx")}),$(document).on("contextmenu.bdDevModeCtx",()=>{t.remove(),$(document).off(".bdDevModeCtx")}),$(document).on("keyup.bdDevModeCtx",e=>{27===e.keyCode&&(t.remove(),$(document).off(".bdDevModeCtx"))}));const s=$("
",{class:"itemGroup-1tL0uz"}),n=$("
",{class:"item-1Yvehc",click:()=>{p.ElectronModule.copy(this.lastSelector),t.hide()}}).append($("",{text:M.Collections.settings.developer.copySelector.name}));s.append(n),t.append(s),t.hasClass("undefined")&&t.css("top","-="+s.outerHeight())}),e.stopPropagation()})}disableSelectors(){$(document).off("contextmenu.bdDevmode"),$(document).off("contextmenu.bdDevModeCtx")}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}getSelector(e){if(e.id)return`#${e.id}`;const t=this.getRules(e),s=t[t.length-1];return s?s.selectorText:e.classList.length?`.${Array.from(e.classList).join(".")}`:`.${Array.from(e.parentElement.classList).join(".")}`}};class Xe extends z.Component{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.defaultAvatar()),this.state={imageError:!1,joined:this.props.joined},this.join=this.join.bind(this),this.handleError=this.handleError.bind(this)}render(){const{server:e}=this.props,t="string"==typeof this.state.joined?`${M.PublicServers.joining}...`:this.state.joined?M.PublicServers.joined:M.PublicServers.join,s=`bd-button${1==this.state.joined?" bd-button-success":""}`;return z.createElement("div",{className:`bd-server-card${e.pinned?" bd-server-card-pinned":""}`},z.createElement("img",{className:"bd-server-image",src:e.iconUrl,onError:this.handleError}),",",z.createElement("div",{className:"bd-server-content"},z.createElement("div",{className:"bd-server-header"},z.createElement("h5",{className:"bd-server-name"},e.name),z.createElement("h5",{className:"bd-server-member-count"},e.members," Members")),z.createElement("div",{className:"bd-scroller-wrap bd-server-description-container"},z.createElement("div",{className:"bd-scroller bd-server-description"},e.description)),z.createElement("div",{className:"bd-server-footer"},z.createElement("div",{className:"bd-server-tags"},e.categories.join(", ")),z.createElement("button",{type:"button",className:s,onClick:this.join},t))))}handleError(){this.props.server.iconUrl=this.props.defaultAvatar(),this.setState({imageError:!0})}async join(){if(this.state.joined)return;this.setState({joined:"joining"});const e=await this.props.join(this.props.server.identifier,this.props.server.nativejoin);this.setState({joined:e})}}const et=u.getByProps("getSortedGuilds"),tt=u.getByProps("getUserAvatarURL","DEFAULT_AVATARS"),st=u.getByProps("acceptInvite"),nt=s(0).remote.BrowserWindow;class it{static get endPoint(){return"https://search.discordservers.com"}static get joinEndPoint(){return"https://j.discordservers.com"}static get connectEndPoint(){return"https://auth.discordservers.com/info"}static getDefaultAvatar(){return tt.DEFAULT_AVATARS[Math.floor(5*Math.random())]}static hasJoined(e){return et.getFlattenedGuildIds().includes(e)}static search({term:e="",category:t="",from:s=0}={}){return new Promise(n=>{const i=[];t&&i.push(`category=${t.replace(/ /g,"%20")}`),e&&i.push(`term=${e.replace(/ /g,"%20")}`),s&&i.push(`from=${s}`);const o=`?${i.join("&")}`;$.ajax({method:"GET",url:`${this.endPoint}${o}`,success:e=>{const t=e.size+e.from;n({servers:e.results,size:e.size,from:e.from,total:e.total,next:t>=e.total?null:t})},error:()=>n(null)})})}static join(e,t=!1){return new Promise(s=>{if(t)return st.acceptInvite(e),s(!0);$.ajax({method:"GET",url:`${this.joinEndPoint}/${e}`,headers:{Accept:"application/json;","Content-Type":"application/json;","x-discord-token":this._accessToken},crossDomain:!0,xhrFields:{withCredentials:!0},success:()=>s(!0),error:()=>s(!1)})})}static checkConnection(){return new Promise(e=>{try{$.ajax({method:"GET",url:this.connectEndPoint,headers:{Accept:"application/json;","Content-Type":"application/json;"},crossDomain:!0,xhrFields:{withCredentials:!0},success:t=>{this._accessToken=t.access_token,e(t)},error:()=>e(!1)})}catch(t){e(!1)}})}static connect(){return new Promise(e=>{const t=new nt(this.windowOptions),s=`https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=${this.connectEndPoint}`;t.webContents.on("did-navigate",(s,n)=>{n==this.connectEndPoint&&(t.close(),e())}),t.loadURL(s)})}static get windowOptions(){return{width:380,height:450,backgroundColor:"#282b30",show:!0,resizable:!0,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!0,webPreferences:{nodeIntegration:!1}}}}const ot=u.getByDisplayName("SettingsView");class rt extends z.Component{get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}constructor(e){super(e),this.state={category:"All",query:"",loading:!0,user:null,results:{servers:[],size:0,from:0,total:0,next:null}},this.changeCategory=this.changeCategory.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.connect=this.connect.bind(this),this.loadNextPage=this.loadNextPage.bind(this)}componentDidMount(){this.checkConnection()}async checkConnection(){const e=await it.checkConnection();if(!e)return this.setState({loading:!0,user:null});this.setState({user:e}),this.search()}async connect(){await it.connect(),this.checkConnection()}searchKeyDown(e){this.state.loading||13!==e.which||this.search(e.target.value)}async search(e="",t=0){this.setState({query:e,loading:!0});const s=await it.search({term:e,category:"All"==this.state.category?"":this.state.category,from:t});if(!s)return this.setState({results:{servers:[],size:0,from:0,total:0,next:null}});this.setState({loading:!1,results:s})}async changeCategory(e){this.state.loading||(await new Promise(t=>this.setState({category:e},t)),this.search())}loadNextPage(){this.state.loading||this.search(this.state.query,this.state.results.next)}async join(e,t=!1){return await it.join(e,t)}get searchBox(){return z.createElement(ve,{onKeyDown:this.searchKeyDown,placeholder:`${M.PublicServers.search}...`})}get title(){if(!this.state.user)return M.PublicServers.notConnected;if(this.state.loading)return`${M.PublicServers.loading}...`;const e=this.state.results.from+1,t=this.state.results.total,s=this.state.results.next?this.state.results.next:t;let n=M.PublicServers.results.format({start:e,end:s,total:t,category:this.state.category});return this.state.query&&(n+=" "+M.PublicServers.query.format({query:this.state.query})),n}get content(){const e=this.state.user?null:{title:M.PublicServers.connect,onClick:this.connect},t="All"!=this.state.category&&this.state.user?null:this.bdServer,s=this.state.results.servers.map(e=>z.createElement(Xe,{key:e.identifier,server:e,joined:it.hasJoined(e.identifier),defaultAvatar:it.getDefaultAvatar}));return[z.createElement(de,{text:this.title,button:e}),t,s,this.state.results.next?this.nextButton:null,this.state.results.servers.length>0&&z.createElement(de,{text:this.title})]}get nextButton(){return z.createElement("button",{type:"button",className:"bd-button bd-button-next",onClick:this.loadNextPage},this.state.loading?M.PublicServers.loading:M.PublicServers.loadMore)}get connection(){const{user:e}=this.state;return e?z.createElement("div",{id:"bd-connection"},z.createElement("div",{className:"bd-footnote"},M.PublicServers.connection.format(e)),z.createElement("button",{type:"button",className:"bd-button bd-button-reconnect",onClick:this.connect},M.PublicServers.reconnect)):z.createElement("div",{id:"bd-connection"})}get bdServer(){const e={name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for plugins, themes, support, etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0};return z.createElement(Xe,{server:e,pinned:!0,joined:it.hasJoined(e.identifier),defaultAvatar:it.getDefaultAvatar})}render(){const e=this.categoryButtons.map(e=>({section:e,label:e,element:()=>this.content}));return z.createElement(ot,{onClose:this.props.close,onSetSection:this.changeCategory,section:this.state.category,sections:[{section:"HEADER",label:M.PublicServers.search},{section:"CUSTOM",element:()=>this.searchBox},{section:"HEADER",label:M.PublicServers.categories},...e,{section:"DIVIDER"},{section:"HEADER",label:z.createElement("a",{href:"https://discordservers.com",target:"_blank"},"DiscordServers.com")},{section:"DIVIDER"},{section:"CUSTOM",element:()=>this.connection}],theme:"dark"})}}const at=u.getByProps("pushLayer");var lt=new class extends Be{get name(){return"PublicServers"}get category(){return"general"}get id(){return"publicServers"}enabled(){const e=p.GuildClasses.wrapper.split(" ")[0];$(`.${e} .scroller-2FKFPG >:first-child`).after(this.button)}disabled(){$("#bd-pub-li").remove()}openPublicServers(){at.pushLayer(()=>p.React.createElement(rt,{close:at.popLayer}))}get button(){return $("
",{class:p.GuildClasses.listItem,id:"bd-pub-li"}).append($("
",{class:"wrapper-25eVIn "+p.GuildClasses.circleButtonMask,text:M.PublicServers.button,id:"bd-pub-button",click:()=>{this.openPublicServers()}}))}},dt=new class extends Be{get name(){return"DarkMode"}get category(){return"appearance"}get id(){return"darkMode"}enabled(){document.getElementById("app-mount").classList.add("bda-dark","bd-dark")}disabled(){document.getElementById("app-mount").classList.remove("bda-dark","bd-dark")}},ct=new class extends Be{get name(){return"MinimalMode"}get category(){return"appearance"}get id(){return"minimalMode"}get hideChannelsID(){return"hideChannels"}get hideChannels(){return this.get(this.hideChannelsID)}constructor(){super(),this.enableHideChannels=this.enableHideChannels.bind(this),this.disableHideChannels=this.disableHideChannels.bind(this)}enabled(){document.body.classList.add("bd-minimal"),this.hideChannels&&this.enableHideChannels(),this.hideChannelCancel=this.registerSetting(this.hideChannelsID,this.enableHideChannels,this.disableHideChannels)}disabled(){document.body.classList.remove("bd-minimal"),this.hideChannels&&this.disableHideChannels(),this.hideChannelCancel&&this.hideChannelCancel()}enableHideChannels(){document.body.classList.add("bd-minimal-chan")}disableHideChannels(){document.body.classList.remove("bd-minimal-chan")}},ht=new class extends Be{get name(){return"24Hour"}get category(){return"general"}get id(){return"twentyFourHour"}enabled(){this.inject24Hour()}disabled(){this.unpatchAll()}inject24Hour(){const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=(t,s,n)=>{const i=n.match(e);if(i&&4===i.length)return"AM"===i[3]?n.replace(i[0],`${"12"===i[1]?"00":i[1].padStart(2,"0")}:${i[2]}`):n.replace(i[0],`${"12"===i[1]?"12":parseInt(i[1])+12}:${i[2]}`)};this.after(p.TimeFormatter,"calendarFormat",t),this.after(p.TimeFormatter,"dateFormat",t)}};const ut=u.getModule(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName);var pt=new class extends Be{get name(){return"ColoredText"}get category(){return"appearance"}get id(){return"coloredText"}enabled(){this.injectColoredText()}disabled(){this.unpatchAll()}injectColoredText(){this.after(ut.prototype,"render",(e,t,s)=>{this.after(s.props,"children",{silent:!0,after:({returnValue:t})=>{const s=t.props.children[1],n=e.props.message.colorString;s&&n&&(s.props.style={color:n})}})})}removeColoredText(){document.querySelectorAll(".markup-2BOw-j").forEach(e=>{e.style.setProperty("color","")})}},mt=new class extends Be{get name(){return"VoiceDisconnect"}get category(){return"general"}get id(){return"voiceDisconnect"}constructor(){super(),this.beforeUnload=this.beforeUnload.bind(this)}enabled(){window.addEventListener("beforeunload",this.beforeUnload)}disabled(){window.removeEventListener("beforeunload",this.beforeUnload)}beforeUnload(){p.ChannelActions.selectVoiceChannel(null,null)}};const gt=(e,t,s={})=>{const{onContextMenu:n,onClick:i}=s,o=c.parseHTML(`
\n ${e}\n
`);return n&&o.addEventListener("contextmenu",n),o.addEventListener("click",i),o};var ft=new class extends Be{get name(){return"EmoteMenu"}get collection(){return"emotes"}get category(){return"general"}get id(){return"emoteMenu"}get hideEmojisID(){return"hideEmojiMenu"}get hideEmojis(){return this.get(this.hideEmojisID)}constructor(){super(),this.lastTab="bd-qem-emojis",this.qmeHeader=c.parseHTML('
\n \n \n
');for(const e of this.qmeHeader.getElementsByTagName("button"))e.addEventListener("click",this.switchMenu.bind(this));this.teContainer=c.parseHTML('
\n
\n
\n
\n\n
\n
\n
\n
'),this.teContainerInner=this.teContainer.querySelector(".emote-menu-inner"),this.faContainer=c.parseHTML('
\n
\n
\n
\n\n
\n
\n
\n
'),this.faContainerInner=this.faContainer.querySelector(".emote-menu-inner"),this.observer=new MutationObserver(e=>{for(const t of e)this.observe(t)}),this.enableHideEmojis=this.enableHideEmojis.bind(this),this.disableHideEmojis=this.disableHideEmojis.bind(this),this.updateTwitchEmotes=this.updateTwitchEmotes.bind(this)}async enabled(){this.log("Starting to observe"),this.observer.observe(document.getElementById("app-mount"),{childList:!0,subtree:!0}),this.hideEmojiCancel=this.registerSetting(this.hideEmojisID,this.enableHideEmojis,this.disableHideEmojis),this.hideEmojis&&this.enableHideEmojis(),Ie.emotesLoaded&&this.updateTwitchEmotes(),this.updateFavorites(),g.on("emotes-loaded",this.updateTwitchEmotes)}disabled(){g.off("emotes-loaded",this.updateTwitchEmotes),this.observer.disconnect(),this.disableHideEmojis(),this.hideEmojiCancel&&this.hideEmojiCancel()}enableHideEmojis(){const e=document.querySelector(".emojiPicker-3m1S-j");e&&e.classList.add("bd-qme-hidden")}disableHideEmojis(){const e=document.querySelector(".emojiPicker-3m1S-j");e&&e.classList.remove("bd-qme-hidden")}insertEmote(e){const t=c.getTextArea();c.insertText(t[0]," "==t.val().slice(-1)?t.val()+e:t.val()+" "+e)}favContext(e){e.stopPropagation();const t=e.target.closest(".emote-container").children[0],s=$('
Remove
');s.css({top:e.pageY-$("#bd-qem-favourite-container").offset().top,left:e.pageX-$("#bd-qem-favourite-container").offset().left}),$(t).parent().append(s),s.on("click",e=>{e.preventDefault(),e.stopPropagation(),$(t).remove(),Ie.removeFavorite($(t).attr("title")),this.updateFavorites(),$(document).off("mousedown.emotemenu")}),$(document).on("mousedown.emotemenu",(function(e){"removemenu"!=e.target.id&&($("#removemenu").remove(),$(document).off("mousedown.emotemenu"))}))}switchMenu(e){let t="string"==typeof e?e:e.target.id;"bd-qem-emojis"==t&&this.hideEmojis&&(t="bd-qem-favourite");const s=$("#bd-qem-twitch"),n=$("#bd-qem-favourite"),i=$("#bd-qem-emojis");switch(s.removeClass("active"),n.removeClass("active"),i.removeClass("active"),$(".emojiPicker-3m1S-j").hide(),$("#bd-qem-favourite-container").hide(),$("#bd-qem-twitch-container").hide(),t){case"bd-qem-twitch":s.addClass("active"),$("#bd-qem-twitch-container").show();break;case"bd-qem-favourite":n.addClass("active"),$("#bd-qem-favourite-container").show();break;case"bd-qem-emojis":i.addClass("active"),$(".emojiPicker-3m1S-j").show(),$(".emojiPicker-3m1S-j input").focus()}t&&(this.lastTab=t)}observe(e){if(!(e.addedNodes.length&&e.addedNodes[0]instanceof Element))return;const t=e.addedNodes[0];if(!t.classList.contains("layer-v9HyYc")||!t.getElementsByClassName("emojiPicker-3m1S-j").length||t.querySelector(".emojiPicker-3m1S-j").parentElement.classList.contains("animatorLeft-1EQxU0"))return;const s=$(t);this.hideEmojis?s.addClass("bd-qme-hidden"):s.removeClass("bd-qme-hidden"),s.prepend(this.qmeHeader),s.append(this.teContainer),s.append(this.faContainer),this.switchMenu(this.lastTab)}updateTwitchEmotes(){for(;this.teContainerInner.firstChild;)this.teContainerInner.firstChild.remove();for(const e in Ie.getCategory("TwitchGlobal")){if(!Ie.getCategory("TwitchGlobal").hasOwnProperty(e))continue;const t=Ie.getUrl("TwitchGlobal",e),s=gt(e,t,{onClick:this.insertEmote.bind(this,e)});this.teContainerInner.append(s)}}updateFavorites(){for(;this.faContainerInner.firstChild;)this.faContainerInner.firstChild.remove();for(const e in Ie.favorites){const t=Ie.favorites[e],s=gt(e,t,{onClick:this.insertEmote.bind(this,e),onContextMenu:this.favContext.bind(this)});this.faContainerInner.append(s)}Ie.saveFavorites()}},bt=new class extends Be{get name(){return"EmoteAutocapitalize"}get collection(){return"emotes"}get category(){return"general"}get id(){return"autoCaps"}enabled(){$("body").off(".bdac"),$("body").on("keyup.bdac change.bdac paste.bdac",$(".channelTextArea-1LDbYG textarea:first"),()=>{const e=$(".channelTextArea-1LDbYG textarea:first").val();if(null==e)return;const t=e.split(" ").pop();if(t.length>3){if("danSgame"==t)return;const s=this.capitalize(t.toLowerCase());null!=s&&c.insertText(c.getTextArea()[0],e.replace(t,s))}})}disabled(){$("body").off(".bdac")}capitalize(e){const t=Ie.getCategory("TwitchGlobal");for(const s in t)if(t.hasOwnProperty(s)&&e==(s+"").toLowerCase())return s}};const yt=s(1),vt=s(2);var wt=new class extends Be{get name(){return"WindowPrefs"}get category(){return"window"}get id(){return"transparency"}get WindowConfigFile(){if(this._windowConfigFile)return this._windowConfigFile;const e=s(0).remote.app,t=e.getAppPath(),n=e.getPath("userData"),i=vt.resolve(n,e.getVersion(),"modules","discord_desktop_core","injector","config.json"),o=vt.resolve(t,"..","app","config.json"),r=yt.existsSync(o)?o:yt.existsSync(i)?i:null;return this._windowConfigFile=r||null}enabled(){this.setWindowPreference("transparent",!0),this.setWindowPreference("backgroundColor",null)}disabled(){this.setWindowPreference("transparent",!1),this.setWindowPreference("backgroundColor","#2f3136")}getAllWindowPreferences(){return this.WindowConfigFile?require(this.WindowConfigFile):{}}getWindowPreference(e){if(this.WindowConfigFile)return this.getAllWindowPreferences()[e]}setWindowPreference(e,t){if(!this.WindowConfigFile)return;const n=this.getAllWindowPreferences();n[e]=t,delete s.c[this.WindowConfigFile],yt.writeFileSync(this.WindowConfigFile,JSON.stringify(n,null,4))}};class Ct extends z.Component{render(){return z.createElement("svg",{className:"bd-logo "+this.props.className,height:"100%",width:this.props.size||"16px",viewBox:"0 0 2000 2000",style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}},z.createElement("metadata",null),z.createElement("defs",null,z.createElement("filter",{id:"shadow1"},z.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20",floodColor:"rgba(0,0,0,0.35)"})),z.createElement("filter",{id:"shadow2"},z.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20",floodColor:"rgba(255,255,255,0.15)"})),z.createElement("filter",{id:"shadow3"},z.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20",floodColor:"rgba(0,0,0,0.35)"}))),z.createElement("g",null,z.createElement("path",{style:{filter:"url(#shadow3)"},fill:"#171717",opacity:"1",d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z"}),z.createElement("path",{style:{filter:"url(#shadow2)"},fill:"#3E82E5",opacity:"1",d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z"}),z.createElement("path",{style:{filter:"url(#shadow1)"},fill:"#FFFFFF",opacity:"1",d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z"})))}}var St=new class{initialize(){c.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),c.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),c.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),c.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")()}patchSocial(){if(this.socialPatch)return;const e=u.getByDisplayName("TabBar"),t=u.getByDisplayName("Anchor");e&&t&&(this.socialPatch=B.after("ThemeHelper",e.prototype,"render",(e,s,n)=>{const i=n.props.children;if(!i||!i.length)return;if("Separator"!==i[i.length-2].type.displayName)return;if(!i[i.length-1].type.toString().includes("socialLinks"))return;const o=i[i.length-1].type;i[i.length-1].type=function(){const e=o(...arguments);return e.props.children.push(p.React.createElement(t,{className:"bd-social-link",href:"https://github.com/rauenzi/BetterDiscordApp",rel:"author",title:"BandagedBD",target:"_blank"},p.React.createElement(Ct,{size:"16px",className:"bd-social-logo"}))),e}}))}patchGuildListItems(){if(this.guildListItemsPatch)return;const e=p.GuildClasses.listItem.split(" ")[0],t=p.GuildClasses.blobContainer.split(" ")[0],s=c.getReactInstance(document.querySelector(`.${e} .${t}`).parentElement).return.type;s&&(this.guildListItemsPatch=B.after("ThemeHelper",s.prototype,"render",(e,t,s)=>{if(!s||!e)return;const n=e.props;return s.props.className+=" bd-guild",n.unread&&(s.props.className+=" bd-unread"),n.selected&&(s.props.className+=" bd-selected"),n.audio&&(s.props.className+=" bd-audio"),n.video&&(s.props.className+=" bd-video"),n.badge&&(s.props.className+=" bd-badge"),n.animatable&&(s.props.className+=" bd-animatable"),s}))}patchGuildPills(){if(this.guildPillPatch)return;const e=u.getModule(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=B.after("ThemeHelper",e,"default",(e,t,s)=>{const n=t[0];return n.unread&&(s.props.className+=" bd-unread"),n.selected&&(s.props.className+=" bd-selected"),n.hovered&&(s.props.className+=" bd-hovered"),s}))}patchGuildSeparator(){if(this.guildSeparatorPatch)return;const e=u.getByDisplayName("Guilds"),t=u.getByProps("renderListItem");if(!t||!e)return;const s=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=B.after("ThemeHelper",e.prototype,"render",(e,t,n)=>{const i=c.findInReactTree(n,e=>e.type&&!e.type.displayName&&"function"==typeof e.type&&c.isEmpty(e.props));i&&(i.type=s)})}};const Et=p.GuildClasses;function Pt(){}Pt.prototype.setConfig=function(e){Object.assign(i,e)},Pt.prototype.init=async function(){if(i.version
Please download the latest version from GitHub");if(window.ED)return void X.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void X.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");v.initialize(),await P.initialize(),d.log("Startup","Initializing Settings"),A.initialize(),x.initialize(),await this.waitForGuilds(),O.initialize(),St.initialize();for(const e in n)n[e].initialize();d.log("Startup","Loading Plugins");const e=Ae.initialize();d.log("Startup","Loading Themes");const t=Ne.initialize();d.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2")[0].remove(),d.log("Startup","Collecting Startup Errors"),X.showAddonErrors({plugins:e,themes:t})},Pt.prototype.waitForGuilds=function(){let e=0;return new Promise(t=>{const s=function(){e++,"complete"!=document.readyState&&setTimeout(s,100);const n=Et.wrapper.split(" ")[0],o=Et.listItem.split(" ")[0],r=Et.blobContainer.split(" ")[0];return document.querySelectorAll(`.${n} .${o} .${r}`).length>0||e>=50?t(i.deferLoaded=!0):void setTimeout(s,100)};s()})};var xt=new Pt;const kt={get React(){return p.React},get ReactDOM(){return p.ReactDOM},get WindowConfigFile(){if(this._windowConfigFile)return this._windowConfigFile;const e=s(0).remote.app,t=s(2),n=e.getAppPath(),i=e.getPath("userData"),o=t.resolve(i,e.getVersion(),"modules","discord_desktop_core","injector","config.json"),r=t.resolve(n,"..","app","config.json"),a=s(1),l=a.existsSync(r)?r:a.existsSync(o)?o:null;return this._windowConfigFile=l||null},getAllWindowPreferences:function(){return this.WindowConfigFile?require(this.WindowConfigFile):{}},getWindowPreference:function(e){if(this.WindowConfigFile)return this.getAllWindowPreferences()[e]},setWindowPreference:function(e,t){if(!this.WindowConfigFile)return;const n=s(1),i=this.getAllWindowPreferences();i[e]=t,delete s.c[this.WindowConfigFile],n.writeFileSync(this.WindowConfigFile,JSON.stringify(i,null,4))},injectCSS:function(e,t){x.injectStyle(e,t)},clearCSS:function(e){x.removeStyle(e)},linkJS:function(e,t){return x.injectScript(e,t)},unlinkJS:function(e){x.removeScript(e)},alert:function(e,t){X.alert(e,t)},showConfirmationModal:function(e,t,s={}){return X.showConfirmationModal(e,t,s)},showToast:function(e,t={}){_.show(e,t)},findModule:function(e){return u.getModule(e)},findAllModules:function(e){return u.getModule(e,!1)},findModuleByProps:function(...e){return u.getByProps(...e)},findModuleByPrototypes:function(...e){return u.getByPrototypes(...e)},findModuleByDisplayName:function(e){return u.getByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),c.getReactInstance(e)},loadData:function(e,t){return v.getPluginData(e,t)}};kt.getData=kt.loadData,kt.saveData=function(e,t,s){return v.setPluginData(e,t,s)},kt.setData=kt.saveData,kt.deleteData=function(e,t){return v.deletePluginData(e,t)},kt.monkeyPatch=function(e,t,s){const{before:n,after:i,instead:o,once:r=!1,silent:a=!1,force:l=!1}=s,d=s.displayName||e.displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",d),!e[t]){if(!l)return console.error(t,"does not exist for",d);e[t]=function(){}}const h=e[t],u=()=>{a||console.log("unpatch",t,"of",d),e[t]=h};return e[t]=function(){const s={thisObject:this,methodArguments:arguments,cancelPatch:u,originalMethod:h,callOriginalMethod:()=>s.returnValue=s.originalMethod.apply(s.thisObject,s.methodArguments)};if(o){const n=c.suppressErrors(o,"`instead` callback of "+e[t].displayName)(s);void 0!==n&&(s.returnValue=n)}else n&&c.suppressErrors(n,"`before` callback of "+e[t].displayName)(s),s.callOriginalMethod(),i&&c.suppressErrors(i,"`after` callback of "+e[t].displayName)(s);return r&&u(),s.returnValue},e[t].__monkeyPatched=!0,e[t].__originalMethod||(e[t].__originalMethod=h),e[t].displayName="patched "+(e[t].displayName||t),u},kt.onRemoved=function(e,t){return c.onRemoved(e,t)},kt.suppressErrors=function(e,t){return c.suppressErrors(e,t)},kt.testJSON=function(e){return c.testJSON(e)},kt.getPlugin=function(e){return Ae.addonList.find(t=>t.name==e)},kt.isPluginEnabled=function(e){const t=this.getPlugin(e);return!!t&&Ae.isEnabled(t.id)},kt.isThemeEnabled=function(e){const t=Ne.addonList.find(t=>t.name==e);return!!t&&Ne.isEnabled(t.id)},kt.getBDData=function(e){return v.getBDData(e)},kt.setBDData=function(e,t){return v.setBDData(e,t)};var Mt=kt;s.d(t,"default",(function(){return Dt}));const At=document.createElement("div");At.className="bd-loaderv2",At.title="BandagedBD is loading...",document.body.appendChild(At),window.BdApi=Mt,window.pluginModule=Ae,window.themeModule=Ne,window.bdEmotes=Ie.Emotes,window.bemotes=Ie.blacklist,window.settingsModule=A,window.DataStore=v,window.DomManager=x,window.utils=c,window.Components=O,window.BDEvents=g,window.bdConfig=i,window.Strings=M;class Dt{constructor(e){xt.setConfig(e)}init(){xt.init()}}!function(){const e="betterdiscord/",t=s(4),n=t._load;t._load=function(t){if("betterdiscord"===t||t.startsWith(e)){if("api"==t.substr(e.length))return Mt}return n.apply(this,arguments)}}()}]).default; \ No newline at end of file +var Core=function(e){var t={};function s(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,s),i.l=!0,i.exports}return s.m=e,s.c=t,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)s.d(n,i,function(t){return e[t]}.bind(null,i));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=9)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("request")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("rimraf")},function(e,t){e.exports=require("yauzl")},function(e,t){e.exports=require("mkdirp")},function(e,t,s){"use strict";s.r(t);var n={};s.r(n),s.d(n,"CustomCSS",(function(){return at})),s.d(n,"WindowPrefs",(function(){return lt})),s.d(n,"TwentyFourHour",(function(){return dt})),s.d(n,"ClassNormalizer",(function(){return ht})),s.d(n,"PublicServers",(function(){return Ct})),s.d(n,"VoiceDisconnect",(function(){return St})),s.d(n,"ColoredText",(function(){return Pt})),s.d(n,"DarkMode",(function(){return xt})),s.d(n,"MinimalMode",(function(){return kt})),s.d(n,"VoiceMode",(function(){return At})),s.d(n,"EmoteModule",(function(){return Ot})),s.d(n,"EmoteMenu",(function(){return zt})),s.d(n,"CopySelector",(function(){return Rt})),s.d(n,"Debugger",(function(){return $t})),s.d(n,"ReactDevTools",(function(){return Gt}));var i={local:!1,localServer:"//localhost:8080",minified:!0,version:"0.3.0",branch:"master",repo:"rauenzi",minSupportedVersion:"0.3.0",bbdVersion:"1.0.0"},o=[{type:"category",id:"general",name:"General",collapsible:!0,settings:[{type:"switch",id:"download",value:!0},{type:"switch",id:"emoteMenu",value:!0},{type:"switch",id:"hideEmojiMenu",value:!1,enableWith:"emoteMenu"},{type:"switch",id:"showNames",value:!0},{type:"switch",id:"modifiers",value:!0},{type:"switch",id:"animateOnHover",value:!1}]},{type:"category",id:"categories",name:"Categories",collapsible:!0,settings:[{type:"switch",id:"twitchglobal",value:!0},{type:"switch",id:"twitchsubscriber",value:!1},{type:"switch",id:"frankerfacez",value:!0},{type:"switch",id:"bttv",value:!0}]}],r=[{type:"category",id:"general",collapsible:!0,settings:[{type:"switch",id:"emotes",value:!0},{type:"switch",id:"publicServers",value:!0},{type:"switch",id:"voiceDisconnect",value:!1},{type:"switch",id:"twentyFourHour",value:!1},{type:"switch",id:"classNormalizer",value:!0},{type:"switch",id:"showToasts",value:!0}]},{type:"category",id:"appearance",collapsible:!0,settings:[{type:"switch",id:"voiceMode",value:!1},{type:"switch",id:"minimalMode",value:!1},{type:"switch",id:"hideChannels",value:!1,enableWith:"minimalMode"},{type:"switch",id:"darkMode",value:!0},{type:"switch",id:"coloredText",value:!1}]},{type:"category",id:"addons",collapsible:!0,shown:!1,settings:[{type:"switch",id:"addonErrors",value:!0},{type:"switch",id:"autoScroll",value:!0},{type:"switch",id:"autoReload",value:!0},{type:"dropdown",id:"editAction",value:"detached",options:[{value:"detached"},{value:"system"}]}]},{type:"category",id:"customcss",collapsible:!0,shown:!1,settings:[{type:"switch",id:"customcss",value:!0},{type:"switch",id:"liveUpdate",value:!1},{type:"dropdown",id:"openAction",value:"settings",options:[{value:"settings"},{value:"detached"},{value:"system"}]}]},{type:"category",id:"developer",collapsible:!0,shown:!1,settings:[{type:"switch",id:"debuggerHotkey",value:!1},{type:"switch",id:"copySelector",value:!1},{type:"switch",id:"reactDevTools",value:!1}]},{type:"category",id:"window",collapsible:!0,shown:!1,settings:[{type:"switch",id:"transparency",value:!1},{type:"switch",id:"frame",value:!1,hidden:!0}]}],a={Panels:{plugins:"Plugins",themes:"Themes",customcss:"Custom CSS"},Collections:{settings:{name:"Settings",general:{name:"General",emotes:{name:"Emote System",note:"Enables BD's emote system"},publicServers:{name:"Public Servers",note:"Display public servers button"},voiceDisconnect:{name:"Voice Disconnect",note:"Disconnect from voice server when closing Discord"},twentyFourHour:{name:"24-Hour Timestamps",note:"Hides channels when in minimal mode"},classNormalizer:{name:"Normalize Classes",note:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)"},showToasts:{name:"Show Toasts",note:"Shows a small notification for important information"}},appearance:{name:"Appearance",voiceMode:{name:"Voice Mode",note:"Hides everything that isn't voice chat"},minimalMode:{name:"Minimal Mode",note:"Hide elements and reduce the size of elements"},hideChannels:{name:"Hide Channels",note:"Hides channels when in minimal mode"},darkMode:{name:"Dark Mode",note:"Make certain elements dark by default"},coloredText:{name:"Colored Text",note:"Make text colour the same as role color"}},addons:{name:"Addon Manager",addonErrors:{name:"Show Addon Errors",note:"Shows a modal with plugin/theme errors"},autoScroll:{name:"Scroll To Settings",note:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)"},autoReload:{name:"Automatic Loading",note:"Automatically loads, reloads, and unloads plugins and themes"},editAction:{name:"Edit Action",note:"Where plugins & themes appear when editing",options:{detached:"Detached Window",system:"System Editor"}}},customcss:{name:"Custom CSS",customcss:{name:"Custom CSS",note:"Enables the Custom CSS tab"},liveUpdate:{name:"Live Update",note:"Updates the css as you type"},startDetached:{name:"Start Detached",note:"Clicking the Custom CSS tab opens the editor in a separate window"},nativeOpen:{name:"Open in Native Editor",note:"Clicking the Custom CSS tab opens your custom css in your native editor"},openAction:{name:"Editor Location",note:"Where Custom CSS should open by default",options:{settings:"Settings Menu",detached:"Detached Window",system:"System Editor"}}},developer:{name:"Developer Settings",debuggerHotkey:{name:"Debugger Hotkey",note:"Allows activating debugger when pressing F8"},copySelector:{name:"Copy Selector",note:'Adds a "Copy Selector" option to context menus when developer mode is active'},reactDevTools:{name:"React Developer Tools",note:"Injects your local installation of React Developer Tools into Discord"}},window:{name:"Window Preferences",transparency:{name:"Enable Transparency",note:"Enables the main window to be see-through (requires restart)"},frame:{name:"Window Frame",note:"Adds the native os window frame to the main window"}}},emotes:{name:"Emotes",general:{name:"General",download:{name:"Download Emotes",note:"Download emotes whenever they are out of date"},emoteMenu:{name:"Emote Menu",note:"Show Twitch/Favourite emotes in emote menu"},hideEmojiMenu:{name:"Hide Emoji Menu",note:"Hides Discord's emoji menu when using emote menu"},autoCaps:{name:"Emote Autocapitalization",note:"Autocapitalize emote commands"},showNames:{name:"Show Names",note:"Show emote names on hover"},modifiers:{name:"Show Emote Modifiers",note:"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)"},animateOnHover:{name:"Animate On Hover",note:"Only animate the emote modifiers on hover"}},categories:{name:"Categories",twitchglobal:{name:"Twitch Globals",note:"Show Twitch global emotes"},twitchsubscriber:{name:"Twitch Subscribers",note:"Show Twitch subscriber emotes"},frankerfacez:{name:"FrankerFaceZ",note:"Show emotes from FFZ"},bttv:{name:"BetterTTV",note:"Show emotes from BTTV"}}}},Addons:{title:"{{name}} v{{version}} by {{author}}",openFolder:"Open {{type}} Folder",reload:"Reload",addonSettings:"Settings",website:"Website",source:"Source",invite:"Support Server",donate:"Donate",patreon:"Patreon",name:"Name",author:"Author",version:"Version",added:"Date Added",modified:"Date Modified",search:"Search {{type}}",editAddon:"Edit",deleteAddon:"Delete",confirmDelete:"Are you sure you want to delete {{name}}?",confirmationText:"You have unsaved changes to {{name}}. Closing this window will lose all those changes."},Emotes:{loading:"Loading emotes in the background do not reload.",loaded:"All emotes successfully loaded.",clearEmotes:"Clear Emote Data",favoriteAction:"Favorite!"},CustomCSS:{confirmationText:"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes.",update:"Update",save:"Save",openNative:"Open in System Editor",openDetached:"Detach Window",settings:"Editor Settings",editorTitle:"Custom CSS Editor"},PublicServers:{button:"public",join:"Join",joining:"Joining",joined:"Joined",loading:"Loading",loadMore:"Load More",notConnected:"Not connected to DiscordServers.com!",search:"Search",connect:"Connect",reconnect:"Reconnect",categories:"Categories",connection:"Connected as: {{username}}#{{discriminator}}",results:"Showing {{start}}-{{end}} of {{total}} results in {{category}}",query:"for {{query}}"},Modals:{confirmAction:"Are You Sure?",okay:"Okay",cancel:"Cancel",close:"Close",name:"Name",message:"Message",error:"Error",addonErrors:"Addon Errors",restartRequired:"Restart Required",restartNow:"Restart Now",restartLater:"Restart Later",additionalInfo:"Additional Info"},Sorting:{sortBy:"Sort By",order:"Order",ascending:"Ascending",descending:"Descending"},WindowPrefs:{enabledInfo:"This option requires a transparent theme in order to work properly. On Windows this may break your aero snapping and maximizing.\n\nIn order to take effect, Discord needs to be restarted. Do you want to restart now?",disabledInfo:"In order to take effect, Discord needs to be restarted. Do you want to restart now?"},Startup:{notSupported:"Not Supported",versionMismatch:"BandagedBD Injector v{{injector}} is not supported by the latest remote (v{{remote}}).\n\nPlease download the latest version from [GitHub](https://github.com/rauenzi/BetterDiscordApp/releases/latest)",incompatibleApp:"BandagedBD does not work with {{app}}. Please uninstall one of them.",updateNow:"Update Now",maybeLater:"Maybe Later",updateAvailable:"Update Available",updateInfo:"There is an update available for BandagedBD's Injector ({{version}}).\n\nYou can either update and restart now, or later.",updateFailed:"Could Not Update",manualUpdate:"Unable to update automatically, please download the installer and reinstall normally.\n\n[Download Installer](https://github.com/rauenzi/BetterDiscordApp/releases/latest)"}},l={description:"Don't be shocked, this modal is supposed to be here.",changes:[{title:"What's New?",items:["**BandagedBD will now keep you updated with changelogs!** I will try to only show a changelog when there's more than a tiny or internal change.","**Twitter (@BandagedBD)** I created a Twitter to try and provide support and such for those without access to the server. https://Twitter.com/BandagedBD"]},{title:"Fixes",type:"fixed",items:["**Colored Text** option should work again.","**Emotes** should show up in chat.","Fixed a bug where BBD attempted to patch the TabBar module incorrectly. (Thanks, DevilBro)"]},{title:"Minor Stuff",type:"improved",items:["**Colour->Color.** Swapped to using English-US spelling by default to be consistent, and to potentially be prepared for localization.","**Versions simplified.** The BandagedBD version now integrates into Discord's at the bottom-left of settings instead of randomly being a part of the setting list."]}]};const d={err:"error",error:"error",dbg:"debug",debug:"debug",log:"log",warn:"warn",info:"info"};class c{static stacktrace(e,t,s){console.error(`%c[${e}]%c ${t}\n\n%c`,"color: #3a71c1; font-weight: 700;","color: red; font-weight: 700;","color: red;",s)}static err(e,...t){c._log(e,t,"error")}static warn(e,...t){c._log(e,t,"warn")}static info(e,...t){c._log(e,t,"info")}static debug(e,...t){c._log(e,t,"debug")}static log(e,...t){c._log(e,t)}static _log(e,t,s="log"){s=c.parseType(s),Array.isArray(t)||(t=[t]),console[s](`%c[BandagedBD]%c [${e}]%c`,"color: #3E82E5; font-weight: 700;","color: #3a71c1;","",...t)}static parseType(e){return d.hasOwnProperty(e)?d[e]:"log"}}class h{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(h.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(s=>{const n=document.createElement("script");n.id=e,n.src=t,n.type="text/javascript",n.onload=s,document.head.append(n)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:s}){const n=performance.now();requestAnimationFrame((function i(o){let r=(o-n)/s;r>1&&(r=1);const a=e(r);t(a),r<1&&requestAnimationFrame(i)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const s=document.createElement("template");s.innerHTML=e;const n=s.content.cloneNode(!0);return t?n:n.childNodes.length>1?n.childNodes:n.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),s=document.createElement("span");return s.append(t),t.nodeValue=e,s.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,s){return t=t.toString().split(" ").filter(e=>e),void 0!==s?t.forEach(t=>e.classList.toggle(t,s)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,s){return e.classList.replace(t,s),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const s=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)s.push(e=e.nextElementSibling);return s}static previous(e,t=""){const s=e.previousElementSibling;return t?s&&s.matches(t)?s:null:s}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const s=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)s.push(e=e.previousElementSibling);return s}static indexInParent(e){const t=e.parentNode.childNodes;let s=0;for(let n=0;n "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const s=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)s.push(e=e.parentElement.closest(t));else for(;e.parentElement;)s.push(e=e.parentElement);return s}static parentsUntil(e,t){const s=[];for(;e.parentElement&&!e.parentElement.matches(t);)s.push(e=e.parentElement);return s}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(s=>s!=e&&s.matches(t))}static css(e,t,s){return void 0===s?global.getComputedStyle(e)[t]:(e.style[t]=s,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,s,n){const[i,o]=t.split("."),r=s&&n;n||(n=s);const a=r?function(e){e.target.matches(s)&&n(e)}:n;e.addEventListener(i,a);const l=()=>{e.removeEventListener(i,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==i&&t.element==e),1)};return this.listeners[o].push({event:i,element:e,cancel:t}),t}return l}static once(e,t,s,n){const[i,o]=t.split("."),r=s&&n;n||(n=s);const a=r?function(t){t.target.matches(s)&&(n(t),e.removeEventListener(i,a))}:function(t){n(t),e.removeEventListener(i,a)};e.addEventListener(i,a);const l=()=>{e.removeEventListener(i,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==i&&t.element==e),1)};return this.listeners[o].push({event:i,element:e,cancel:t}),t}return l}static __offAll(e,t){const[s,n]=e.split(".");let i=e=>e.event==s,o=e=>e;t&&(i=e=>e.event==s&&e.element==t,o=e=>e.element==t);const r=this.listeners[n]||[],a=s?r.filter(i):r.filter(o);for(let e=0;e{this.observer.unsubscribe(n),t()};return this.observer.subscribe(n,t=>{const n=Array.from(s?t.addedNodes:t.removedNodes),i=n.indexOf(e)>-1,o=n.some(t=>t.contains(e));return i||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let s=0;s1?n.childNodes:n.childNodes[0]}static getTextArea(){return h.query(".channelTextArea-1LDbYG textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static suppressErrors(e,t){return(...s)=>{try{return e(...s)}catch(e){c.stacktrace("SuppressedError","Error occurred in "+t,e)}}}static onRemoved(e,t){const s=new MutationObserver(n=>{for(let i=0;i-1,l=r.some(t=>t.contains(e));(a||l)&&(s.disconnect(),t())}});s.observe(document.body,{subtree:!0,childList:!0})}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static memoizeObject(e){const t=new Proxy(e,{get:function(e,t){if(e.hasOwnProperty(t)){if(Object.getOwnPropertyDescriptor(e,t).get){const s=e[t];delete e[t],e[t]=s}return e[t]}},set:function(e,t,s){return e.hasOwnProperty(t)?c.error("MemoizedObject","Trying to overwrite existing property"):(e[t]=s,e[t])}});return Object.defineProperty(t,"hasOwnProperty",{value:function(e){return void 0!==this[e]}}),t}static extend(e,...t){for(let s=0;se.startsWith("__reactInternalInstance"))]||null}static getOwnerInstance(e,{include:t,exclude:s=["Popout","Tooltip","Scroller","BackgroundFlash"],filter:n=(e=>e)}={}){if(void 0===e)return;const i=void 0===t,o=i?s:t;function r(e){const t=function(e){const t=e.type;return t&&(t.displayName||t.name)||null}(e);return null!==t&&!!(o.includes(t)^i)}let a=this.getReactInstance(e);for(a=a&&a.return;null!==a;a=a.return){if(null===a)continue;const e=a.stateNode;if(null!==a&&!(e instanceof HTMLElement)&&r(a)&&n(e))return e}return null}}class p{static byProperties(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&e.every(e=>void 0!==n[e])}}static byPrototypeFields(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&(!!n.prototype&&e.every(e=>void 0!==n.prototype[e]))}}static byCode(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&-1!==n.toString([]).search(e)}}static byString(...e){return t=>{const s=t.toString([]);for(const t of e)if(!s.includes(t))return!1;return!0}}static byDisplayName(e){return t=>t&&t.displayName===e}static combine(...e){return t=>e.every(e=>e(t))}}const m=e=>{if(e.remove&&e.set&&e.clear&&e.get&&!e.sort)return null;if(!e.getToken&&!e.getEmail&&!e.showToken)return e;return new Proxy(e,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t?()=>"puppet11112@gmail.com":"showToken"==t?()=>!0:e[t]}})};class g{static find(e,t=!0){return this.getModule(e,t)}static findAll(e){return this.getModule(e,!1)}static findByUniqueProperties(e,t=!0){return t?this.getByProps(...e):this.getAllByProps(...e)}static findByDisplayName(e){return this.getByDisplayName(e)}static getModule(e,t=!0){const s=this.getAllModules(),n=[];for(const i in s){if(!s.hasOwnProperty(i))continue;const o=s[i],{exports:r}=o;let a=null;if(r&&(r.__esModule&&r.default&&e(r.default)&&(a=r.default),e(r)&&(a=r),a)){if(t)return m(a);n.push(m(a))}}return t||0==n.length?void 0:n}static getModules(e){return this.getModule(e,!1)}static getByDisplayName(e){return this.getModule(p.byDisplayName(e),!0)}static getByRegex(e,t=!0){return this.getModule(p.byCode(e),t)}static getByPrototypes(...e){return this.getModule(p.byPrototypeFields(e),!0)}static getAllByPrototypes(...e){return this.getModule(p.byPrototypeFields(e),!1)}static getByProps(...e){return this.getModule(p.byProperties(e),!0)}static getAllByProps(...e){return this.getModule(p.byProperties(e),!1)}static getByString(...e){return this.getModule(p.byString(...e),!0)}static getAllByString(...e){return this.getModule(p.byString(...e),!1)}static get require(){if(this._require)return this._require;const e="bbd-webpackmodules",t="function"==typeof window.webpackJsonp?window.webpackJsonp([],{[e]:(e,t,s)=>t.default=s},[e]).default:window.webpackJsonp.push([[],{[e]:(e,t,s)=>e.exports=s},[[e]]]);return delete t.m[e],delete t.c[e],this._require=t}static getAllModules(){return this.require.c}}var f=u.memoizeObject({get React(){return g.getByProps("createElement","cloneElement")},get ReactDOM(){return g.getByProps("render","findDOMNode")},get Flux(){return g.getByProps("connectStores")},get Events(){return g.getByPrototypes("setMaxListeners","emit")},get GuildStore(){return g.getByProps("getGuild")},get SortedGuildStore(){return g.getByProps("getSortedGuilds")},get SelectedGuildStore(){return g.getByProps("getLastSelectedGuildId")},get GuildSync(){return g.getByProps("getSyncedGuilds")},get GuildInfo(){return g.getByProps("getAcronym")},get GuildChannelsStore(){return g.getByProps("getChannels","getDefaultChannel")},get GuildMemberStore(){return g.getByProps("getMember")},get MemberCountStore(){return g.getByProps("getMemberCounts")},get GuildEmojiStore(){return g.getByProps("getEmojis")},get GuildActions(){return g.getByProps("markGuildAsRead")},get GuildPermissions(){return g.getByProps("getGuildPermissions")},get ChannelStore(){return g.getByProps("getChannels","getDMFromUserId")},get SelectedChannelStore(){return g.getByProps("getLastSelectedChannelId")},get ChannelActions(){return g.getByProps("selectChannel")},get PrivateChannelActions(){return g.getByProps("openPrivateChannel")},get ChannelSelector(){return g.getByProps("selectGuild","selectChannel")},get UserInfoStore(){return g.getByProps("getToken")},get UserSettingsStore(){return g.getByProps("guildPositions")},get AccountManager(){return g.getByProps("register","login")},get UserSettingsUpdater(){return g.getByProps("updateRemoteSettings")},get OnlineWatcher(){return g.getByProps("isOnline")},get CurrentUserIdle(){return g.getByProps("getIdleTime")},get RelationshipStore(){return g.getByProps("isBlocked","getFriendIDs")},get RelationshipManager(){return g.getByProps("addRelationship")},get MentionStore(){return g.getByProps("getMentions")},get UserStore(){return g.getByProps("getCurrentUser")},get UserStatusStore(){return g.getByProps("getStatus","getState")},get UserTypingStore(){return g.getByProps("isTyping")},get UserActivityStore(){return g.getByProps("getActivity")},get UserNameResolver(){return g.getByProps("getName")},get UserNoteStore(){return g.getByProps("getNote")},get UserNoteActions(){return g.getByProps("updateNote")},get EmojiInfo(){return g.getByProps("isEmojiDisabled")},get EmojiUtils(){return g.getByProps("getGuildEmoji")},get EmojiStore(){return g.getByProps("getByCategory","EMOJI_NAME_RE")},get InviteStore(){return g.getByProps("getInvites")},get InviteResolver(){return g.getByProps("findInvite")},get InviteActions(){return g.getByProps("acceptInvite")},get DiscordConstants(){return g.getByProps("Permissions","ActivityTypes","StatusTypes")},get DiscordPermissions(){return g.getByProps("Permissions","ActivityTypes","StatusTypes").Permissions},get PermissionUtils(){return g.getByProps("getHighestRole")},get ColorConverter(){return g.getByProps("hex2int")},get ColorShader(){return g.getByProps("darken")},get TinyColor(){return g.getByPrototypes("toRgb")},get ClassResolver(){return g.getByProps("getClass")},get ButtonData(){return g.getByProps("ButtonSizes")},get IconNames(){return g.getByProps("IconNames")},get NavigationUtils(){return g.getByProps("transitionTo","replaceWith","getHistory")},get MessageStore(){return g.getByProps("getMessages")},get MessageActions(){return g.getByProps("jumpToMessage","_sendMessage")},get MessageQueue(){return g.getByProps("enqueue")},get MessageParser(){return g.getByProps("createMessage","parse","unparse")},get hljs(){return g.getByProps("highlight","highlightBlock")},get SimpleMarkdown(){return g.getByProps("parseBlock","parseInline","defaultOutput")},get ExperimentStore(){return g.getByProps("getExperimentOverrides")},get ExperimentsManager(){return g.getByProps("isDeveloper")},get CurrentExperiment(){return g.getByProps("getExperimentId")},get ImageResolver(){return g.getByProps("getUserAvatarURL","getGuildIconURL")},get ImageUtils(){return g.getByProps("getSizedImageSrc")},get AvatarDefaults(){return g.getByProps("getUserAvatarURL","DEFAULT_AVATARS")},get WindowInfo(){return g.getByProps("isFocused","windowSize")},get TagInfo(){return g.getByProps("VALID_TAG_NAMES")},get DOMInfo(){return g.getByProps("canUseDOM")},get LocaleManager(){return g.getByProps("setLocale")},get Moment(){return g.getByProps("parseZone")},get LocationManager(){return g.getByProps("createLocation")},get Timestamps(){return g.getByProps("fromTimestamp")},get TimeFormatter(){return g.getByProps("dateFormat")},get Strings(){return g.getByProps("Messages").Messages},get StringFormats(){return g.getByProps("a","z")},get StringUtils(){return g.getByProps("toASCII")},get URLParser(){return g.getByProps("Url","parse")},get ExtraURLs(){return g.getByProps("getArticleURL")},get DNDActions(){return g.getByProps("beginDrag")},get DNDSources(){return g.getByProps("addTarget")},get DNDObjects(){return g.getByProps("DragSource")},get MediaDeviceInfo(){return g.getByProps("Codecs","SUPPORTED_BROWSERS")},get MediaInfo(){return g.getByProps("getOutputVolume")},get MediaEngineInfo(){return g.getByProps("MediaEngineFeatures")},get VoiceInfo(){return g.getByProps("EchoCancellation")},get VideoStream(){return g.getByProps("getVideoStream")},get SoundModule(){return g.getByProps("playSound")},get ElectronModule(){return g.getByProps("setBadge")},get Dispatcher(){return g.getByProps("dirtyDispatch")},get PathUtils(){return g.getByProps("hasBasename")},get NotificationModule(){return g.getByProps("showNotification")},get RouterModule(){return g.getByProps("Router")},get APIModule(){return g.getByProps("getAPIBaseURL")},get AnalyticEvents(){return g.getByProps("AnalyticEventConfigs")},get KeyGenerator(){return g.getByRegex(/"binary"/)},get Buffers(){return g.getByProps("Buffer","kMaxLength")},get DeviceStore(){return g.getByProps("getDevices")},get SoftwareInfo(){return g.getByProps("os")},get CurrentContext(){return g.getByProps("setTagsContext")},get GuildClasses(){const e=g.getByProps("wrapper","unreadMentionsBar"),t=g.getByProps("guildsError","selected"),s=g.getByProps("blobContainer");return Object.assign({},e,t,s)},get LayerStack(){return g.getByProps("pushLayer")}});const b=s(5);var y=new class extends b{constructor(){super(),this.setMaxListeners(20)}dispatch(e,...t){this.emit(e,...t)}};const v=s(2),w=s(1),C=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var S=new class{constructor(){this.data={misc:{}},this.pluginData={},this.cacheData={}}initialize(){v.existsSync(this.baseFolder)||v.mkdirSync(this.baseFolder),v.existsSync(this.dataFolder)||v.mkdirSync(this.dataFolder),v.existsSync(this.localeFolder)||v.mkdirSync(this.localeFolder),v.existsSync(this.emoteFolder)||v.mkdirSync(this.emoteFolder),v.existsSync(this.cacheFile)||v.writeFileSync(this.cacheFile,JSON.stringify({})),v.existsSync(this.customCSS)||v.writeFileSync(this.customCSS,"");const e=v.readdirSync(this.dataFolder).filter(e=>!v.statSync(w.resolve(this.dataFolder,e)).isDirectory()&&e.endsWith(".json"));for(const t of e)this.data[t.split(".")[0]]=require(w.resolve(this.dataFolder,t));this.cacheData=u.testJSON(v.readFileSync(this.cacheFile).toString())||{}}get injectionPath(){if(this._injectionPath)return this._injectionPath;const e=s(0).remote.app,t=e.getAppPath(),n=e.getPath("userData"),i=w.resolve(n,e.getVersion(),"modules","discord_desktop_core","injector"),o=w.resolve(t,"..","app"),r=v.existsSync(o)?o:v.existsSync(i)?i:null;return this._injectionPath=r||null}get customCSS(){return this._customCSS||(this._customCSS=w.resolve(this.dataFolder,"custom.css"))}get baseFolder(){return this._baseFolder||(this._baseFolder=w.resolve(i.dataPath,"data"))}get dataFolder(){return this._dataFolder||(this._dataFolder=w.resolve(this.baseFolder,`${C}`))}get localeFolder(){return this._localeFolder||(this._localeFolder=w.resolve(this.baseFolder,"locales"))}get emoteFolder(){return this._emoteFolder||(this._emoteFolder=w.resolve(this.baseFolder,"emotes"))}get cacheFile(){return this._cacheFile||(this._cacheFile=w.resolve(this.baseFolder,".cache"))}getPluginFile(e){return w.resolve(i.dataPath,"plugins",e+".config.json")}_getFile(e){return"settings"==e||"plugins"==e||"themes"==e||"window"==e?w.resolve(this.dataFolder,`${e}.json`):w.resolve(this.dataFolder,"misc.json")}getBDData(e){return this.data.misc[e]||""}setBDData(e,t){this.data.misc[e]=t,v.writeFileSync(w.resolve(this.dataFolder,"misc.json"),JSON.stringify(this.data.misc,null,4))}getLocale(e){const t=w.resolve(this.localeFolder,`${e}.json`);return v.existsSync(t)?u.testJSON(v.readFileSync(t).toString()):null}saveLocale(e,t){v.writeFileSync(w.resolve(this.localeFolder,`${e}.json`),JSON.stringify(t,null,4))}getCacheHash(e,t){return this.cacheData[e]&&v.existsSync(w.resolve(this.baseFolder,e,`${t}.json`))&&this.cacheData[e][t]||""}setCacheHash(e,t,s){this.cacheData[e]||(this.cacheData[e]={}),this.cacheData[e][t]=s,v.writeFileSync(this.cacheFile,JSON.stringify(this.cacheData))}invalidateCache(e,t){this.cacheData[e]&&(delete this.cacheData[e][t],v.writeFileSync(this.cacheFile,JSON.stringify(this.cacheData)))}emotesExist(e){return v.existsSync(w.resolve(this.emoteFolder,`${e}.json`))}getEmoteData(e){const t=w.resolve(this.emoteFolder,`${e}.json`);return v.existsSync(t)?u.testJSON(v.readFileSync(t).toString()):null}saveEmoteData(e,t){v.writeFileSync(w.resolve(this.emoteFolder,`${e}.json`),JSON.stringify(t))}getData(e){return this.data[e]||""}setData(e,t){this.data[e]=t,v.writeFileSync(w.resolve(this.dataFolder,`${e}.json`),JSON.stringify(t,null,4))}loadCustomCSS(){return v.readFileSync(this.customCSS).toString()}saveCustomCSS(e){return v.writeFileSync(this.customCSS,e)}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]||void 0:v.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(v.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]||void 0):void 0}setPluginData(e,t,s){void 0!==s&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=s,v.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4)))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],v.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4))}};const E=s(3),{Dispatcher:P,DiscordConstants:x,UserSettingsStore:k}=f;var A=new class{get discordLocale(){return k.locale.split("-")[0]}get defaultLocale(){return"en"}constructor(){this.locale="",this.strings={}}async initialize(){await this.setLocale(this.discordLocale),P.subscribe(x.ActionTypes.USER_SETTINGS_UPDATE,({settings:e})=>{const t=e.locale;t&&t!=this.locale&&this.setLocale(t.split("-")[0])})}async setLocale(e){let t;if(e!=this.defaultLocale){if(t=await this.getLocaleStrings(e),!t)return this.setLocale(this.defaultLocale)}else t=a;this.locale=e,u.extend(this.strings,t),y.emit("strings-updated")}async getLocaleStrings(e){const t=S.getCacheHash("locales",e);if(!t)return await this.downloadLocale(e);const s=await this.downloadLocale(e,t);return s||S.getLocale(e)}downloadLocale(e,t=""){return new Promise(s=>{const n={url:u.repoUrl(`data/locales/${e}.json`),timeout:2e3,json:!0};t&&(n.headers={"If-None-Match":t}),E.get(n,(t,n,i)=>{if(t||200!==n.statusCode)return s(null);S.saveLocale(e,i),S.setCacheHash("locales",e,n.headers.etag),s(i)})})}};class D{static get bdHead(){return this.getElement("bd-head")}static get bdBody(){return this.getElement("bd-body")}static get bdScripts(){return this.getElement("bd-scripts")}static get bdStyles(){return this.getElement("bd-styles")}static get bdThemes(){return this.getElement("bd-themes")}static get bdCustomCSS(){return this.getElement("#customcss")}static initialize(){this.createElement("bd-head",{target:document.head}),this.createElement("bd-body",{target:document.body}),this.createElement("bd-scripts",{target:this.bdHead}),this.createElement("bd-styles",{target:this.bdHead}),this.createElement("bd-themes",{target:this.bdHead}),this.createElement("style",{id:"customcss",target:this.bdHead})}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static getElement(e,t=document){return e instanceof Node?e:t.querySelector(e)}static createElement(e,t={}){const{className:s,id:n,target:i}=t,o=document.createElement(e);return s&&(o.className=s),n&&(o.id=n),i&&this.getElement(i).append(o),o}static removeStyle(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdStyles);t&&t.remove()}static injectStyle(e,t){e=this.escapeID(e);const s=this.getElement(`#${e}`,this.bdStyles)||this.createElement("style",{id:e});s.textContent=t,this.bdStyles.append(s)}static removeTheme(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdThemes);t&&t.remove()}static injectTheme(e,t){e=this.escapeID(e);const s=this.getElement(`#${e}`,this.bdThemes)||this.createElement("style",{id:e});s.textContent=t,this.bdThemes.append(s)}static updateCustomCSS(e){this.bdCustomCSS.textContent=e}static removeScript(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdScripts);t&&t.remove()}static injectScript(e,t){return e=this.escapeID(e),new Promise(s=>{const n=this.getElement(`#${e}`,this.bdScripts)||this.createElement("script",{id:e});n.src=t,n.onload=s,this.bdScripts.append(n)})}}class M extends String{format(e){return u.formatString(this,e)}}var N=new Proxy(A.strings,{get:function(e,t){return e.hasOwnProperty(t)?new Proxy(e[t],{get:function(e,t){return"string"==typeof e[t]?new M(e[t]):e[t]}}):new Proxy({},{get:function(){return`String group "${t}" not found.`}})}}),L=new class{constructor(){this.state={},this.collections=[],this.panels=[],this.updateStrings=this.updateStrings.bind(this)}initialize(){this.registerCollection("settings","Settings",r),y.on("strings-updated",this.updateStrings)}registerCollection(e,t,s,n=null){if(this.collections.find(t=>t.id==e))return c.error("Settings","Already have a collection with id "+e);this.collections.push({type:"collection",id:e,name:t,settings:s,button:n}),this.setupCollection(e),this.loadCollection(e),this.updateStrings()}removeCollection(e){const t=this.collections.findIndex(t=>t.id==e);if(!t<0)return c.error("Settings","No collection with id "+e);this.collections.splice(t,1)}registerPanel(e,t,s){if(this.panels.find(t=>t.id==e))return c.error("Settings","Already have a panel with id "+e);const{element:n,onClick:i,order:o=1}=s,r={id:e,order:o,label:t,section:e};i&&(r.clickListener=i),n&&(r.element=n instanceof f.React.Component?()=>f.React.createElement(n,{}):"function"==typeof n?n:()=>n),this.panels.push(r)}removePanel(e){const t=this.panels.findIndex(t=>t.id==e);if(!t<0)return c.error("Settings","No collection with id "+e);this.panels.splice(t,1)}getPath(e,t="",s=""){return{collection:3==e.length?e[0]:t,category:3==e.length?e[1]:2==e.length?e[0]:s,setting:e[e.length-1]}}setupCollection(e){const t=this.collections.find(t=>t.id==e);if(!t)return;const s=t.settings;this.state[t.id]||(this.state[t.id]={});for(let e=0;e{const e=this.state[o.collection][o.category][o.setting];return s.enableWith?!e:e}})}}}}saveSettings(){for(const e in this.state)this.saveCollection(e)}loadSettings(){for(const e in this.state)this.loadCollection(e)}saveCollection(e){S.setData(e,this.state[e])}loadCollection(e){const t=S.getData(e);if(!t)return this.saveCollection(e);for(const s in this.state[e]){t[s]||Object.assign(t,{[s]:this.state[e][s]});for(const n in this.state[e][s]){if(null==t[s][n])continue;const i=this.getSetting(e,s,n);if("switch"==i.type&&(this.state[e][s][n]=t[s][n]),"dropdown"==i.type){i.options.some(e=>e.value==t[s][n])&&(this.state[e][s][n]=t[s][n])}}}this.saveCollection(e)}onSettingChange(e,t,s,n){this.state[e][t][s]=n,y.dispatch("setting-updated",e,t,s,n),this.saveCollection(e)}getSetting(e,t,s){return 2==arguments.length?this.collections[0].find(e=>e.id==arguments[0]).settings.find(e=>e.id==arguments[1]):this.collections.find(t=>t.id==e).settings.find(e=>e.id==t).settings.find(e=>e.id==s)}get(e,t,s){return 2==arguments.length&&(s=t,t=e,e="settings"),!(!this.state[e]||!this.state[e][t])&&this.state[e][t][s]}set(e,t,s,n){return 3==arguments.length&&(n=s,s=t,t=e,e="settings"),this.onSettingChange(e,t,s,n)}on(e,t,s,n){const i=(i,o,r,a)=>{i===e&&o===t&&r===s&&n(a)};return y.on("setting-updated",i),()=>{y.off("setting-updated",i)}}updateStrings(){for(let e=0;e"before"===e.type))try{t.callback(this,arguments)}catch(s){c.err("Patcher",`Could not fire before callback of ${e.functionName} for ${t.caller}`,s)}const s=e.children.filter(e=>"instead"===e.type);if(s.length)for(const n of s)try{const s=n.callback(this,arguments,e.originalFunction.bind(this));void 0!==s&&(t=s)}catch(t){c.err("Patcher",`Could not fire instead callback of ${e.functionName} for ${n.caller}`,t)}else t=e.originalFunction.apply(this,arguments);for(const s of e.children.filter(e=>"after"===e.type))try{const e=s.callback(this,arguments,t);void 0!==e&&(t=e)}catch(t){c.err("Patcher",`Could not fire after callback of ${e.functionName} for ${s.caller}`,t)}return t}}static rePatch(e){e.proxyFunction=e.module[e.functionName]=this.makeOverride(e)}static makePatch(e,t,s){const n={name:s,module:e,functionName:t,originalFunction:e[t],proxyFunction:null,revert:()=>{n.module[n.functionName]=n.originalFunction,n.proxyFunction=null,n.children=[]},counter:0,children:[]};return n.proxyFunction=e[t]=this.makeOverride(n),this.patches.push(n),n}static before(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"before"}))}static after(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"after"}))}static instead(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"instead"}))}static pushChildPatch(e,t,s,n,i={}){const{type:o="after",forcePatch:r=!0}=i,a=this.resolveModule(t);if(!a)return null;if(!a[s]&&r&&(a[s]=function(){}),!(a[s]instanceof Function))return null;"string"==typeof t&&(i.displayName=t);const l=`${i.displayName||a.displayName||a.name||a.constructor.displayName||a.constructor.name}.${s}`,d=this.patches.find(e=>e.module==a&&e.functionName==s)||this.makePatch(a,s,l);d.proxyFunction||this.rePatch(d);const c={caller:e,type:o,id:d.counter,callback:n,unpatch:()=>{if(d.children.splice(d.children.findIndex(e=>e.id===c.id&&e.type===o),1),d.children.length<=0){const e=this.patches.findIndex(e=>e.module==a&&e.functionName==s);this.patches[e].revert(),this.patches.splice(e,1)}}};return d.children.push(c),d.counter++,c.unpatch}}const F=f.React,O={},I=new Set,z=new Set;var R=new class{get named(){return O}get unknown(){return I}get listeners(){return z}constructor(){j.after("ReactComponents",F,"createElement",(e,t,s)=>{this.walkRenderTree(s)}),j.instead("ReactComponents",F.Component.prototype,"componentWillMount",e=>{this.addComponent(e.constructor)}),j.instead("ReactComponents",F.Component.prototype,"UNSAFE_componentWillMount",e=>{this.addComponent(e.constructor)}),j.instead("ReactComponents",F.PureComponent.prototype,"componentWillMount",e=>{this.addComponent(e.constructor)}),j.instead("ReactComponents",F.PureComponent.prototype,"UNSAFE_componentWillMount",e=>{this.addComponent(e.constructor)})}initialize(){this.walkReactTree(document.querySelector("#app-mount")._reactRootContainer._internalRoot.current)}get(e,t){return new Promise(s=>{if(O[e])return s(O[e]);if(z.add({name:e,filter:t,resolve:s}),t)for(const s of I)t(s)&&(s.displayName=e,I.delete(s),this.addNamedComponent(s))})}addNamedComponent(e){const t=e.displayName;if(!O[t]){O[t]=e;for(const s of z)s.name===t&&(s.resolve(e),z.delete(s))}}addUnknownComponent(e){if(!I.has(e)){for(const t of z)t.filter&&t.filter(e)&&(e.displayName=t.name,this.addNamedComponent(e));e.displayName||I.add(e)}}addComponent(e){return e.displayName?this.addNamedComponent(e):this.addUnknownComponent(e)}walkRenderTree(e){if(e){if("function"==typeof e.type&&this.addComponent(e.type),Array.isArray(e))for(const t of e)this.walkRenderTree(t);e.props&&e.props.children&&this.walkRenderTree(e.props.children)}}walkReactTree(e){e&&("function"==typeof e.type&&this.addComponent(e.type),e.child&&this.walkReactTree(e.child),e.sibling&&this.walkReactTree(e.sibling))}};const q=f.React,H=f.ReactDOM,U=g.getByProps("sidebar","hasNotice").sidebar.split(" ")[0],_=g.getByProps("membersWrap").membersWrap.split(" ")[0];class W{static get shouldShowToasts(){return L.get("settings","general","showToasts")}static async success(e,t={}){return this.show(e,Object.assign(t,{type:"success"}))}static async info(e,t={}){return this.show(e,Object.assign(t,{type:"info"}))}static async warning(e,t={}){return this.show(e,Object.assign(t,{type:"warning"}))}static async error(e,t={}){return this.show(e,Object.assign(t,{type:"error"}))}static async default(e,t={}){return this.show(e,Object.assign(t,{type:""}))}static show(e,t={}){const{type:s="",icon:n=!0,timeout:i=3e3,forceShow:o=!1}=t;if(!this.shouldShowToasts&&!o)return;this.ensureContainer();const r=document.createElement("div");r.classList.add("bd-toast"),s&&r.classList.add("toast-"+s),s&&n&&r.classList.add("icon"),r.innerText=e,document.querySelector(".bd-toasts").appendChild(r),setTimeout(()=>{r.classList.add("closing"),setTimeout(()=>{r.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},i)}static ensureContainer(){if(document.querySelector(".bd-toasts"))return;const e=document.querySelector(`.${U} + div`),t=e.querySelector(`.${_}`),s=e?e.querySelector("form"):null,n=e?e.getBoundingClientRect().left:310,i=t?t.getBoundingClientRect().left:0,o=i?i-e.getBoundingClientRect().left:e.offsetWidth,r=s?s.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",n+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",r+"px"),document.querySelector("#app-mount").appendChild(a)}}class G extends q.Component{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.state={checked:this.props.checked||!1}}render(){return q.createElement("div",{className:"checkbox-item"},q.createElement("div",{className:"checkbox-label label-JWQiNe da-label"},this.props.text),q.createElement("div",{className:"checkbox-wrapper checkbox-3kaeSU da-checkbox checkbox-3EVISJ da-checkbox",onClick:this.onClick},q.createElement("div",{className:"checkbox-inner checkboxInner-3yjcPe da-checkboxInner"},q.createElement("input",{className:"checkbox checkboxElement-1qV33p da-checkboxElement",checked:this.state.checked,type:"checkbox"}),q.createElement("span",null)),q.createElement("span",null)))}onClick(){this.props.onChange(!this.state.checked),this.setState({checked:!this.state.checked})}}function V(){return(V=Object.assign||function(e){for(var t=1;t{for(const s of e){if(!(s.addedNodes.length&&s.addedNodes[0]instanceof Element))continue;const e=s.addedNodes[0];e.parentElement===document.body&&e.querySelector("#ace_settingsmenu")&&(e.id="ace_settingsmenu_container",t.disconnect())}});t.observe(document.body,{childList:!0})};const t=this.props.theme==Z.defaultProps.theme?this.props.theme.split("-")[1]:this.props.theme;this.editor.setTheme(`ace/theme/${t}`),this.editor.session.setMode(`ace/mode/${this.props.language}`),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(this.props.fontSize),this.editor.on("change",this.onChange)}componentWillUnmount(){this.editor.destroy()}get value(){return this.editor.session.getValue()}set value(e){this.editor.setValue(e)}onChange(){this.props.onChange&&this.props.onChange(this.value)}showSettings(){return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor)}resize(){return this.editor.resize()}buildControl(e){return"checkbox"==e.type?this.makeCheckbox(e):this.makeButton(e)}makeCheckbox(e){return q.createElement(G,{text:e.label,onChange:e.onChange,checked:e.checked})}makeButton(e){return q.createElement(J,{color:"black",position:"top",text:e.tooltip},t=>q.createElement("button",V({},t,{className:"btn btn-primary",onClick:t=>{e.onClick(t,this.value)}}),e.label))}render(){this.editor&&this.editor.resize&&this.editor.resize();const e=this.props.controls.filter(e=>"right"!=e.side).map(this.buildControl.bind(this)),t=this.props.controls.filter(e=>"right"==e.side).map(this.buildControl.bind(this));return q.createElement("div",{id:"bd-editor-panel",className:this.props.theme},q.createElement("div",{id:"bd-editor-controls"},q.createElement("div",{className:"controls-section controls-left"},e),q.createElement("div",{className:"controls-section controls-right"},t)),q.createElement("div",{className:"editor-wrapper"},q.createElement("div",{id:this.props.id,className:"editor "+this.props.theme},this.props.value)))}}class K extends q.Component{render(){const e=this.props.size||"24px";return q.createElement("svg",{viewBox:"0 0 24 24",style:{width:e,height:e}},q.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),q.createElement("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm2 16H5V5h11.17L19 7.83V19zm-7-7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM6 6h9v4H6z"}))}}class Q extends q.Component{render(){const e=this.props.size||"24px";return q.createElement("svg",{viewBox:"0 0 24 24",fill:"#FFFFFF",style:{width:e,height:e},onClick:this.props.onClick},q.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),q.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}class ee extends q.Component{render(){const e=this.props.size||"20px";return q.createElement("svg",{viewBox:"0 0 20 20",style:{width:e,height:e}},q.createElement("path",{fill:"none",d:"M0 0h20v20H0V0z"}),q.createElement("path",{d:"M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z"}))}}class te extends q.Component{constructor(e){super(e),this.hasUnsavedChanges=!1,this.onChange=this.onChange.bind(this),this.save=this.save.bind(this),this.openNative=this.openNative.bind(this),this.update=this.update.bind(this),this.controls=[{label:q.createElement(K,{size:"18px"}),tooltip:N.CustomCSS.save,onClick:this.save},{label:q.createElement(Q,{size:"18px"}),tooltip:N.CustomCSS.openNative,onClick:this.openNative},{label:q.createElement(ee,{size:"18px"}),tooltip:N.CustomCSS.settings,onClick:"showSettings"}]}update(){this.forceUpdate()}updateEditor(e){this.editor&&(this.editor.value=e)}get value(){return this.editor.session.getValue()}set value(e){this.editor.setValue(e)}showSettings(){return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor)}resize(){return this.editor.resize()}setEditorRef(e){this.editor=e,this.props.editorRef&&void 0!==this.props.editorRef.current?this.props.editorRef.current=e:this.props.editorRef&&(this.props.editorRef=e)}render(){return q.createElement(Z,{ref:this.setEditorRef.bind(this),language:this.props.language,id:this.props.id||"bd-addon-editor",controls:this.controls,value:this.props.content,onChange:this.onChange})}onChange(){this.hasUnsavedChanges=!0}save(e,t){this.hasUnsavedChanges=!1,this.props.save&&this.props.save(t)}openNative(){this.props.openNative&&this.props.openNative()}}class se{static get width(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)}static get height(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)}}class ne extends q.Component{render(){return q.createElement("svg",{viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},q.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},q.createElement("path",{d:"M0 0h12v12H0"}),q.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class ie extends q.Component{render(){const e=this.props.size||"24px";return q.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},q.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),q.createElement("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"}))}}class oe{static get shouldShowAddonErrors(){return L.get("settings","addons","addonErrors")}static get ModalStack(){return g.getByProps("push","update","pop","popWithKey")}static get AlertModal(){return g.getByPrototypes("handleCancel","handleSubmit","handleMinorConfirm")}static get TextElement(){return g.getByProps("Sizes","Weights")}static get ConfirmationModal(){return g.getModule(e=>e.defaultProps&&e.key&&"confirm-modal"==e.key())}static get Markdown(){return g.findByDisplayName("Markdown")}static default(e,t){const s=h.createElement(`
\n
\n \n
`);s.querySelector(".footer button").addEventListener("click",()=>{s.classList.add("closing"),setTimeout(()=>{s.remove()},300)}),s.querySelector(".bd-backdrop").addEventListener("click",()=>{s.classList.add("closing"),setTimeout(()=>{s.remove()},300)}),document.querySelector("#app-mount").append(s)}static alert(e,t){this.showConfirmationModal(e,t)}static showConfirmationModal(e,t,s={}){const n=this.Markdown,i=this.ConfirmationModal,o=this.ModalStack;if(t instanceof M&&(t=t.toString()),!this.ModalStack||!this.ConfirmationModal||!this.Markdown)return this.default(e,t);const r=()=>{},{onConfirm:a=r,onCancel:l=r,confirmText:d=N.Modals.okay,cancelText:c=N.Modals.cancel,danger:h=!1,key:u}=s;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?q.createElement(n,null,e):e),o.push(i,{header:e,children:t,red:h,confirmText:d,cancelText:c,onConfirm:a,onCancel:l},u)}static showAddonErrors({plugins:e=[],themes:t=[]}){if(!e||!t||!this.shouldShowAddonErrors)return;if(!e.length&&!t.length)return;const s=h.createElement(`
\n
\n \n
`),n=function(e){const t=h.createElement('
');for(const s of e){const e=h.createElement(`
\n
${s.name?s.name:s.file}
\n
${s.message}
\n \n
`);t.append(e),s.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),c.stacktrace("AddonError",`Error details for ${s.name?s.name:s.file}.`,s.error)}))}return t},i=[n(e),n(t)];s.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=s.querySelector(".tab-bar-item.selected");t&&h.removeClass(t,"selected"),h.addClass(e.target,"selected");const n=s.querySelector(".scroller");n.innerHTML="",n.append(i[h.index(e.target)])})),s.querySelector(".footer button").addEventListener("click",()=>{h.addClass(s,"closing"),setTimeout(()=>{s.remove()},300)}),s.querySelector(".bd-backdrop").addEventListener("click",()=>{h.addClass(s,"closing"),setTimeout(()=>{s.remove()},300)}),h.query("#app-mount").append(s),e.length?s.querySelector(".tab-bar-item").click():s.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=g.getByProps("push","update","pop","popWithKey"),s=g.getByProps("fixed","improved"),n=g.findByDisplayName("Text"),o=g.getByProps("Child"),r=g.getByProps("Tags","default"),a=g.getModule(e=>e.defaultProps&&0==e.defaultProps.selectable),l=g.getByProps("defaultRules","parse");if(!(a&&t&&s&&n&&o&&r&&l))return c.warn("Modals","showChangelogModal missing modules");const{image:d="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:h="",changes:u=[],title:p="BandagedBD",subtitle:m=`v${i.bbdVersion}`,footer:b}=e,y=q.createElement,v=[y("img",{src:d})];h&&v.push(y("p",null,l.parse(h)));for(let e=0;ey("li",null,l.parse(e))));v.push(o)}return t.push(a,{className:s.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:function(){return y(o.Child,{grow:1,shrink:1},y(r.default,{tag:r.Tags.H4},p),y(n,{size:n.Sizes.SMALL,color:n.Colors.STANDARD,className:s.date},m))},renderFooter:()=>{const e=g.getModule(e=>"Anchor"==e.displayName),s=g.getByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},i=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),f.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")},r=e?y(e,{onClick:i},"Join our Discord Server."):y("a",{className:`${s.anchor} ${s.anchorUnderlineOnHover}`,onClick:i},"Join our Discord Server."),a=y(n,{size:n.Sizes.SMALL,color:n.Colors.STANDARD},"Need support? ",r);return y(o.Child,{grow:1,shrink:1},b||a)},children:v})}}class re extends q.Component{constructor(e){super(e),this.state={modalOpen:!1},this.offX=0,this.offY=0,this.maxX=this.props.maxX||se.width,this.maxY=this.props.maxY||se.height,this.minX=this.props.minX||0,this.minY=this.props.minY||0,this.titlebar=q.createRef(),this.window=q.createRef(),this.close=this.close.bind(this),this.maximize=this.maximize.bind(this),this.onDrag=this.onDrag.bind(this),this.onDragStart=this.onDragStart.bind(this),this.onDragStop=this.onDragStop.bind(this),this.onResizeStart=this.onResizeStart.bind(this)}componentDidMount(){this.window.current.addEventListener("mousedown",this.onResizeStart,!1),this.titlebar.current.addEventListener("mousedown",this.onDragStart,!1),document.addEventListener("mouseup",this.onDragStop,!1)}onResizeStart(){this.currentWidth=this.window.current.offsetWidth,this.currentHeight=this.window.current.offsetHeight}onDragStop(){document.removeEventListener("mousemove",this.onDrag,!0);const e=this.window.current.offsetWidth,t=this.window.current.offsetHeight;if(e!=this.currentWidth||t!=this.currentHeight){this.props.onResize&&this.props.onResize();const s=parseInt(this.window.current.style.left),n=parseInt(this.window.current.style.top);s+e>=this.maxX&&(this.window.current.style.width=this.maxX-s+"px"),n+t>=this.maxY&&(this.window.current.style.height=this.maxY-n+"px")}this.currentWidth=e,this.currentHeight=t}onDragStart(e){const t=this.window.current;this.offY=e.clientY-parseInt(t.offsetTop),this.offX=e.clientX-parseInt(t.offsetLeft),document.addEventListener("mousemove",this.onDrag,!0)}onDrag(e){const t=this.window.current;let s=e.clientY-this.offY;s<=this.minY&&(s=this.minY),s+this.currentHeight>=this.maxY&&(s=this.maxY-this.currentHeight);let n=e.clientX-this.offX;n<=this.minX&&(n=this.minX),n+this.currentWidth>=this.maxX&&(n=this.maxX-this.currentWidth),t.style.top=s+"px",t.style.left=n+"px"}componentWillUnmount(){this.titlebar.current.removeEventListener("mousedown",this.onDragStart,!1),document.removeEventListener("mouseup",this.onDragStop,!1)}render(){const e=this.props.center?se.height/2-this.props.height/2:this.props.top,t=this.props.center?se.width/2-this.props.width/2:this.props.left,s=`floating-window${` ${this.props.className}`||""}${this.props.resizable?" resizable":""}${this.state.modalOpen?" modal-open":""}`,n={height:this.props.height,width:this.props.width,left:t||0,top:e||0};return q.createElement("div",{id:this.props.id,className:s,ref:this.window,style:n},q.createElement("div",{className:"floating-window-titlebar",ref:this.titlebar},q.createElement("span",{className:"title"},this.props.title),q.createElement("div",{className:"floating-window-buttons"},q.createElement("div",{className:"button maximize-button",onClick:this.maximize},q.createElement(ie,{size:"18px"})),q.createElement("div",{className:"button close-button",onClick:this.close},q.createElement(ne,null)))),q.createElement("div",{className:"floating-window-content"},this.props.children))}async close(){let e=!0;("function"==typeof this.props.confirmClose?this.props.confirmClose():this.props.confirmClose)&&(this.setState({modalOpen:!0}),e=await this.confirmClose(),this.setState({modalOpen:!1})),this.props.close&&e&&this.props.close()}maximize(){this.window.current.style.width="100%",this.window.current.style.height="100%",this.props.onResize&&this.props.onResize();const e=this.window.current.offsetWidth,t=this.window.current.offsetHeight,s=parseInt(this.window.current.style.left)+e;parseInt(this.window.current.style.top)+t>this.maxY&&(this.window.current.style.top=this.maxY-t+"px"),s>this.maxX&&(this.window.current.style.left=this.maxX-e+"px")}confirmClose(){return new Promise(e=>{oe.showConfirmationModal(N.Modals.confirmAction,this.props.confirmationText,{danger:!0,confirmText:N.Modals.close,onConfirm:()=>{e(!0)},onCancel:()=>{e(!1)}})})}}function ae(){return(ae=Object.assign||function(e){for(var t=1;t div[class*="app-"');return e?e.offsetTop:0}render(){return this.state.windows.map(e=>q.createElement(re,ae({},e,{close:this.close.bind(this,e.id),minY:this.minY}),e.children))}open(e){this.setState({windows:[...this.state.windows,e]})}close(e){this.setState({windows:this.state.windows.filter(t=>(t.id==e&&t.onClose&&t.onClose(),t.id!=e))})}static get id(){return"floating-windows"}static get root(){if(this._root)return this._root;const e=document.createElement("div");return e.id=this.id,document.body.append(e),this._root=e}}const de=q.createRef(),ce=q.createElement(le,{ref:de}),he=q.createElement(g.getByProps("AppReferencePositionLayer").AppLayerProvider().props.layerContext.Provider,{value:[document.querySelector("#app-mount > .layerContainer-yqaFcK")]},ce),ue=h.createElement('
');h.query("#app-mount").append(ue),H.render(he,ue);var pe=de.current;const me=f.React,ge=s(1),fe=s(2),be=s(4).Module;be.globalPaths.push(ge.resolve(s(0).remote.app.getAppPath(),"node_modules"));const ye=/[^\S\r\n]*?\r?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,ve=/^\\@/,we=function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e};class Ce{get name(){return""}get moduleExtension(){return""}get extension(){return""}get addonFolder(){return""}get language(){return""}get prefix(){return"addon"}get collection(){return"settings"}get category(){return"addons"}get id(){return"autoReload"}emit(e,...t){return y.emit(`${this.prefix}-${e}`,...t)}constructor(){this.timeCache={},this.addonList=[],this.state={}}initialize(){return this.originalRequire=be._extensions[this.moduleExtension],be._extensions[this.moduleExtension]=this.getAddonRequire(),L.on(this.collection,this.category,this.id,e=>{e?this.watchAddons():this.unwatchAddons()}),this.loadAllAddons()}initializeAddon(){}getFileModification(e,t){return t}startAddon(){}stopAddon(){}loadState(){const e=S.getData(`${this.prefix}s`);e&&Object.assign(this.state,e)}saveState(){S.setData(`${this.prefix}s`,this.state)}watchAddons(){if(this.watcher)return c.error(this.name,`Already watching ${this.prefix} addons.`);c.log(this.name,`Starting to watch ${this.prefix} addons.`),this.watcher=fe.watch(this.addonFolder,{persistent:!1},async(e,t)=>{if(!e||!t||!t.endsWith(this.extension))return;await new Promise(e=>setTimeout(e,50));try{fe.statSync(ge.resolve(this.addonFolder,t))}catch(e){if("ENOENT"!==e.code)return;delete this.timeCache[t],this.unloadAddon(t,!0)}if(!fe.statSync(ge.resolve(this.addonFolder,t)).isFile())return;const s=fe.statSync(ge.resolve(this.addonFolder,t));s&&s.mtime&&s.mtime.getTime()&&"number"==typeof s.mtime.getTime()&&this.timeCache[t]!=s.mtime.getTime()&&(this.timeCache[t]=s.mtime.getTime(),"rename"==e&&this.loadAddon(t,!0),"change"==e&&this.reloadAddon(t,!0))})}unwatchAddons(){if(!this.watcher)return c.error(this.name,`Was not watching ${this.prefix} addons.`);this.watcher.close(),delete this.watcher,c.log(this.name,`No longer watching ${this.prefix} addons.`)}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new T("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],s=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//")),n=u.testJSON(s);if(!n)throw new T("META could not be parsed.");if(!n.name)throw new T("META missing name data.");return n.format="json",n}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],s={};let n="",i="";for(const e of t.split(ye))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){s[n]=i;const t=e.indexOf(" ");n=e.substr(1,t-1),i=e.substr(t+1)}else i+=" "+e.replace("\\n","\n").replace(ve,"@");return s[n]=i.trim(),delete s[""],s.format="jsdoc",s}getAddonRequire(){const e=this,t=this.originalRequire;return function(s,n){const i=ge.resolve(e.addonFolder,ge.basename(n));if(!fe.existsSync(i)||n!==fe.realpathSync(i))return Reflect.apply(t,this,arguments);let o=fe.readFileSync(n,"utf8");o=we(o);const r=fe.statSync(n),a=e.extractMeta(o);a.id=a.name,a.filename=ge.basename(n),a.added=r.atimeMs,a.modified=r.mtimeMs,a.size=r.size,o=e.getFileModification(s,o,a),s._compile(o,n)}}loadAddon(e,t=!1){if(void 0===e)return;try{require(ge.resolve(this.addonFolder,e))}catch(n){return new B(e,e,"Could not be compiled.",{message:n.message,stack:n.stack})}const s=require(ge.resolve(this.addonFolder,e));if(this.addonList.find(e=>e.id==s.id))return new B(s.name,e,`There is already a plugin with name ${s.name}`);const n=this.initializeAddon(s);return n||(this.addonList.push(s),t&&W.success(`${s.name} v${s.version} was loaded.`),this.emit("loaded",s.id),this.state[s.id]?this.startAddon(s):this.state[s.id]=!1)}unloadAddon(e,t=!0,s=!1){const n="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e;return!!n&&(this.state[n.id]&&(s?this.stopAddon(n):this.disableAddon(n)),delete require.cache[require.resolve(ge.resolve(this.addonFolder,n.filename))],this.addonList.splice(this.addonList.indexOf(n),1),this.emit("unloaded",n.id),t&&W.success(`${n.name} was unloaded.`),!0)}reloadAddon(e,t=!0){const s="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e,n=this.unloadAddon(s,t,!0);return n?this.loadAddon(s.filename,t):n}isLoaded(e){return!!this.addonList.find(t=>t.id==e||t.filename==e)}isEnabled(e){const t=this.addonList.find(t=>t.id==e||t.filename==e);return!!t&&this.state[t.id]}enableAddon(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;t&&(this.state[t.id]||(this.state[t.id]=!0,this.startAddon(t),this.saveState()))}disableAddon(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;t&&this.state[t.id]&&(this.state[t.id]=!1,this.stopAddon(t),this.saveState())}toggleAddon(e){this.state[e]?this.disableAddon(e):this.enableAddon(e)}loadNewAddons(){const e=fe.readdirSync(this.addonFolder),t=this.addonList.filter(t=>!e.includes(t.filename)).map(e=>e.id);return{added:e.filter(e=>!this.addonList.find(t=>t.filename==e)&&e.endsWith(this.extension)&&fe.statSync(ge.resolve(this.addonFolder,e)).isFile()),removed:t}}updateList(){const e=this.loadNewAddons();for(const t of e.added)this.loadAddon(t);for(const t of e.removed)this.unloadAddon(t)}loadAllAddons(){this.loadState();const e=[],t=fe.readdirSync(this.addonFolder);for(const s of t){if(!fe.statSync(ge.resolve(this.addonFolder,s)).isFile()||!s.endsWith(this.extension))continue;const t=this.loadAddon(s,!1);t instanceof B&&e.push(t)}return this.saveState(),L.get(this.collection,this.category,this.id)&&this.watchAddons(),e}deleteAddon(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e;return fe.unlinkSync(ge.resolve(this.addonFolder,t.filename))}saveAddon(e,t){const s="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e;return fe.writeFileSync(ge.resolve(this.addonFolder,s.filename),t)}editAddon(e,t){const n="string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e,i=ge.resolve(this.addonFolder,n.filename);return void 0===t&&(t="system"==L.get("settings","addons","editAction")),t?s(0).shell.openItem(`${i}`):this.openDetached(n)}openDetached(e){const t=ge.resolve(this.addonFolder,e.filename),s=fe.readFileSync(t).toString(),n=me.createRef(),i=me.createElement(te,{id:"bd-floating-editor-"+e.name,ref:n,content:s,save:this.saveAddon.bind(this,e),openNative:this.editAddon.bind(this,e,!0),language:this.language});pe.open({onClose:()=>{this.isDetached=!1},onResize:()=>{n&&n.current&&n.current.resize&&n.current.resize()},title:e.name,id:s.id,className:"floating-addon-window",height:470,width:410,center:!0,resizable:!0,children:i,confirmClose:()=>!(!n||!n.current)&&n.current.hasUnsavedChanges,confirmationText:N.Addons.confirmationText.format({name:e.name})})}}class Se extends q.Component{constructor(e){super(e)}render(){const e=this.props.isGroup?"bd-settings-title bd-settings-group-title h5-18_1nd title-3sZWYQ size12-3R0845 height16-2Lv3qA weightSemiBold-NJexzi da-h5 da-title da-size12 da-height16 da-weightSemiBold marginBottom4-2qk4Hy da-marginBottom4 marginTop8-1DLZ1n da-marginTop8":"bd-settings-title h2-2gWE-o title-3sZWYQ size16-14cGz5 height20-mO2eIN weightSemiBold-NJexzi defaultColor-1_ajX0 defaultMarginh2-2LTaUL marginBottom20-32qID7",t=this.props.className?`${e} ${this.props.className}`:e;return q.createElement("h2",{className:t,onClick:()=>{this.props.onClick&&this.props.onClick()}},this.props.text,this.props.button&&q.createElement("button",{className:"bd-button bd-button-title",onClick:this.props.button.onClick},this.props.button.title),this.props.otherChildren)}}class Ee extends q.Component{render(){const e=this.props.size||"24px";return q.createElement("svg",{className:this.props.className||"",onClick:this.props.onClick,fill:"#dcddde",viewBox:"0 0 24 24",style:{width:e,height:e}},q.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),q.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}class Pe extends q.Component{render(){const e=this.props.size||"24px";return q.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},q.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),q.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),q.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}class xe extends q.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(){this.props.disabled||(this.props.onChange(!this.state.checked),this.setState({checked:!this.state.checked}))}render(){const e=this.props.disabled?" bd-switch-disabled":"",t=this.state.checked?" bd-switch-checked":"";return q.createElement("div",{className:"bd-switch"+e+t},q.createElement("input",{type:"checkbox",id:this.props.id,className:"bd-checkbox",disabled:this.props.disabled,checked:this.state.checked,onChange:this.onChange}))}}class ke extends q.Component{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?q.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const Ae=ke.prototype.render;function De(){return(De=Object.assign||function(e){for(var t=1;tAe});const Me=g.getByDisplayName("Tooltip");class Ne extends q.Component{constructor(e){super(e),this.state={settingsOpen:!1},this.settingsPanel="",this.panelRef=q.createRef(),this.onChange=this.onChange.bind(this),this.reload=this.reload.bind(this),this.showSettings=this.showSettings.bind(this),this.closeSettings=this.closeSettings.bind(this)}reload(){this.props.reload&&(this.props.addon=this.props.reload(this.props.addon.id),this.forceUpdate())}componentDidUpdate(){this.state.settingsOpen&&(this.settingsPanel instanceof Node&&this.panelRef.current.appendChild(this.settingsPanel),setImmediate(()=>{const e=this.panelRef.current,t=e.closest(".scroller");if(!((e,t)=>{const s=e.scrollTop,n=s+e.clientHeight,i=t.offsetTop,o=i+t.clientHeight;return in})(t,e))return;const s=h.offset(e),n=h.offset(t),i=t.scrollTop,o=s.top-n.top+t.scrollTop-30;h.animate({duration:300,update:function(e){t.scrollTop=o>i?i+e*(o-i):i-e*(i-o)}})}))}getString(e){return"string"==typeof e?e:e.toString()}onChange(){this.props.onChange&&this.props.onChange(this.props.addon.id),this.props.enabled=!this.props.enabled}showSettings(){this.props.hasSettings&&this.setState({settingsOpen:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}buildTitle(e,t,s){const n=N.Addons.title.split(/({{[A-Za-z]+}})/),i=n.findIndex(e=>"{{name}}"==e);i&&(n[i]=q.createElement("span",{className:"bd-name"},e));const o=n.findIndex(e=>"{{version}}"==e);i&&(n[o]=q.createElement("span",{className:"bd-version"},t));const r=n.findIndex(e=>"{{author}}"==e);return i&&(n[r]=q.createElement("span",{className:"bd-author"},s)),n.flat()}get settingsComponent(){const e=this.props.addon,t=this.getString(e.name);try{this.settingsPanel=this.props.getSettingsPanel()}catch(e){c.stacktrace("Addon Settings","Unable to get settings panel for "+t+".",e)}const s={id:`${t}-settings`,className:"addon-settings",ref:this.panelRef};return"string"==typeof settingsPanel&&(c.warn("Addon Settings","Using a DOMString is officially deprecated."),s.dangerouslySetInnerHTML=this.settingsPanel),q.createElement("div",{className:"bd-addon-card settings-open bd-switch-item"},q.createElement("div",{className:"bd-close",onClick:this.closeSettings},q.createElement(ne,null)),q.createElement("div",s,q.createElement(ke,null,this.settingsPanel instanceof q.Component||"function"==typeof this.settingsPanel?this.settingsPanel:null)))}buildLink(e){const t=this.props.addon[e];if(!t)return null;const s=q.createElement("a",{className:"bd-link bd-link-website",href:t,target:"_blank",rel:"noopener noreferrer"},N.Addons[e]);return"invite"==e&&(s.props.onClick=function(e){e.preventDefault(),e.stopPropagation();let s=t;const n=/\.gg\/(.*)$/;n.test(s)&&(s=s.match(n)[1]),f.LayerStack.popLayer(),f.InviteActions.acceptInviteAndTransitionToInviteChannel(s)}),s}get footer(){const e=["website","source","invite","donate","patreon"];if(!e.some(e=>this.props.addon[e])&&!this.props.hasSettings)return null;const t=e.map(this.buildLink.bind(this)).filter(e=>e);return q.createElement("div",{className:"bd-footer"},q.createElement("span",{className:"bd-links"},t.map((e,s)=>sq.createElement("div",De({},e,{className:"bd-addon-button",onClick:s}),t))}render(){if(this.state.settingsOpen)return this.settingsComponent;const e=this.props.addon,t=this.getString(e.name),s=this.getString(e.author),n=this.getString(e.description),i=this.getString(e.version);return q.createElement("div",{id:`${e.id}-card`,className:"bd-addon-card settings-closed"},q.createElement("div",{className:"bd-addon-header"},q.createElement("span",{className:"bd-title"},this.buildTitle(t,i,s)),q.createElement("div",{className:"bd-controls"},this.props.editAddon&&this.makeButton(N.Addons.editAddon,q.createElement(Q,null),this.props.editAddon),this.props.deleteAddon&&this.makeButton(N.Addons.deleteAddon,q.createElement(Pe,null),this.props.deleteAddon),this.props.showReloadIcon&&this.makeButton(N.Addons.reload,q.createElement(Ee,{className:"bd-reload bd-reload-card"}),this.reload),q.createElement(xe,{checked:this.props.enabled,onChange:this.onChange}))),q.createElement("div",{className:"bd-description-wrap scroller-wrap fade"},q.createElement("div",{className:"bd-description scroller"},n)),this.footer)}}const Le=Ne.prototype.render;Object.defineProperty(Ne.prototype,"render",{enumerable:!1,configurable:!1,set:function(){c.warn("AddonCard","Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>Le});class Be extends q.Component{render(){const e=this.props.size||"16px";return q.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e}},q.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}class Te extends q.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=q.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return q.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>q.createElement("div",{className:`bd-select-option${e.value==t.value?" selected":""}`,onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return q.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},q.createElement("div",{className:"bd-select-value"},this.selected.label),q.createElement(Be,{className:"bd-select-arrow"}),this.state.open&&this.options)}}class je extends q.Component{render(){const e=this.props.size||"16px";return q.createElement("svg",{className:this.props.className||"",fill:"#FFFFFF",viewBox:"0 0 24 24",style:{width:e,height:e}},q.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),q.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}class Fe extends q.Component{render(){return q.createElement("div",{className:"bd-search-wrapper"},q.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),q.createElement(je,null))}}class Oe extends q.Component{constructor(e){super(e),this.state={sort:"name",ascending:!0,query:""},this.sort=this.sort.bind(this),this.reverse=this.reverse.bind(this),this.search=this.search.bind(this),this.update=this.update.bind(this)}componentDidMount(){y.on(`${this.props.prefix}-loaded`,this.update),y.on(`${this.props.prefix}-unloaded`,this.update)}componentWillUnmount(){y.off(`${this.props.prefix}-loaded`,this.update),y.off(`${this.props.prefix}-unloaded`,this.update)}update(){this.forceUpdate()}reload(){this.props.refreshList&&this.props.refreshList(),this.forceUpdate()}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}get sortOptions(){return[{label:N.Addons.name,value:"name"},{label:N.Addons.author,value:"author"},{label:N.Addons.version,value:"version"},{label:N.Addons.added,value:"added"},{label:N.Addons.modified,value:"modified"}]}get directions(){return[{label:N.Sorting.ascending,value:!0},{label:N.Sorting.descending,value:!1}]}render(){const{title:e,folder:t,addonList:n,addonState:i,onChange:o,reload:r}=this.props,a=!L.get("settings","addons","autoReload"),l=t?{title:N.Addons.openFolder.format({type:e}),onClick:()=>{const e=s(0).shell;(e.openItem||e.openPath)(t)}}:null,d=n.sort((e,t)=>{const s=e[this.state.sort],n=t[this.state.sort];return"string"==typeof s?s.toLocaleLowerCase().localeCompare(n.toLocaleLowerCase()):s>n?1:n>s?-1:0});return this.state.ascending||d.reverse(),[q.createElement(Se,{key:"title",text:e,button:l,otherChildren:a&&q.createElement(Ee,{className:"bd-reload",onClick:this.reload.bind(this)})}),q.createElement("div",{className:"bd-controls bd-addon-controls"},q.createElement(Fe,{onChange:this.search,placeholder:`${N.Addons.search.format({type:this.props.title})}...`}),q.createElement("div",{className:"bd-addon-dropdowns"},q.createElement("div",{className:"bd-select-wrapper"},q.createElement("label",{className:"bd-label"},N.Sorting.sortBy,":"),q.createElement(Te,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),q.createElement("div",{className:"bd-select-wrapper"},q.createElement("label",{className:"bd-label"},N.Sorting.order,":"),q.createElement(Te,{options:this.directions,onChange:this.reverse,style:"transparent"})))),q.createElement("div",{key:"addonList",className:"bd-addon-list"},d.map(e=>{if(this.state.query){let t=e.name.toLocaleLowerCase().includes(this.state.query);if(t=t||e.author.toLocaleLowerCase().includes(this.state.query),t=t||e.description.toLocaleLowerCase().includes(this.state.query),!t)return null}const t=e.type&&"function"==typeof e.plugin.getSettingsPanel,s=t&&e.plugin.getSettingsPanel.bind(e.plugin);return q.createElement(ke,null,q.createElement(Ne,{editAddon:this.editAddon.bind(this,e.id),deleteAddon:this.deleteAddon.bind(this,e.id),showReloadIcon:a,key:e.id,enabled:i[e.id],addon:e,onChange:o,reload:r,hasSettings:t,getSettingsPanel:s}))}))]}editAddon(e){this.props.editAddon&&this.props.editAddon(e)}async deleteAddon(e){const t=this.props.addonList.find(t=>t.id==e);await this.confirmDelete(t)&&this.props.deleteAddon&&this.props.deleteAddon(t)}confirmDelete(e){return new Promise(t=>{oe.showConfirmationModal(N.Modals.confirmAction,N.Addons.confirmDelete.format({name:e.name}),{danger:!0,confirmText:N.Addons.deleteAddon,onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}}const Ie=Oe.prototype.render;Object.defineProperty(Oe.prototype,"render",{enumerable:!1,configurable:!1,set:function(){c.warn("AddonList","Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>Ie});class ze extends q.Component{render(){return q.createElement("div",{className:"bd-divider divider-3573oO marginTop8-1DLZ1n marginBottom40-2vIwTv"})}}class Re extends q.Component{render(){return q.createElement("div",{className:"bd-setting-item"},q.createElement("div",{className:"bd-setting-header"},q.createElement("label",{htmlFor:this.props.id,className:"bd-setting-title"},this.props.name),this.props.children),q.createElement("div",{className:"bd-setting-note"},this.props.note),q.createElement("div",{className:"bd-setting-divider"}))}}class $e extends q.Component{constructor(e){if(super(e),this.props.button&&this.props.collapsible){const e=this.props.button.onClick;this.props.button.onClick=t=>{t.stopPropagation(),e(...arguments)}}this.props.hasOwnProperty("shown")||(this.props.shown=!0),this.container=q.createRef(),this.state={collapsed:this.props.collapsible&&!this.props.shown},this.onChange=this.onChange.bind(this),this.toggleCollapse=this.toggleCollapse.bind(this)}toggleCollapse(){const e=this.container.current,t=this.state.collapsed?300:1;e.style.setProperty("height",e.scrollHeight+"px"),e.classList.add("animating"),this.setState({collapsed:!this.state.collapsed},()=>setTimeout(()=>{e.style.setProperty("height",""),e.classList.remove("animating")},t))}onChange(e,t){this.props.onChange&&(this.props.id?this.props.onChange(this.props.id,e,t):this.props.onChange(e,t),this.forceUpdate())}render(){const{settings:e}=this.props,t=`bd-settings-group ${this.props.collapsible?`collapsible ${this.state.collapsed?"collapsed":"expanded"}`:""}`;return q.createElement("div",{className:t},q.createElement(Se,{text:this.props.name,collapsible:this.props.collapsible,onClick:this.toggleCollapse,button:this.props.button,isGroup:!0}),q.createElement("div",{className:"bd-settings-container",ref:this.container},e.filter(e=>!e.hidden).map(e=>{let t=null;return"dropdown"==e.type&&(t=q.createElement(Te,{disabled:e.disabled,id:e.id,options:e.options,value:e.value,onChange:this.onChange.bind(this,e.id)})),"switch"==e.type&&(t=q.createElement(xe,{disabled:e.disabled,id:e.id,checked:e.value,onChange:this.onChange.bind(this,e.id)})),t?q.createElement(Re,{id:e.id,key:e.id,name:e.name,note:e.note},t):null})),this.props.showDivider&&q.createElement(ze,null))}}const qe=$e.prototype.render;Object.defineProperty($e.prototype,"render",{enumerable:!1,configurable:!1,set:function(){c.warn("Group","Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>qe});class He extends q.Component{render(){const e=this.props.size||"18px";return q.createElement("svg",{viewBox:"0 0 24 24",fill:"#FFFFFF",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},q.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),q.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}function Ue(){return(Ue=Object.assign||function(e){for(var t=1;te.Header&&e.Separator&&e.Item),We=g.getByDisplayName("Tooltip");class Ge extends q.Component{constructor(e){super(e)}render(){return q.createElement("div",{className:"bd-sidebar-header"},q.createElement(_e.Header,null,"BandagedBD"),q.createElement(We,{color:"black",position:"top",text:"Changelog"},e=>q.createElement("div",Ue({},e,{className:"bd-changelog-button",onClick:()=>oe.showChangelogModal(l)}),q.createElement(He,{className:"bd-icon",size:"16px"}))))}}var Ve=new class{constructor(){this.patchSections(),y.on("strings-updated",this.forceUpdate)}onChange(e){return(t,s,n)=>{const i=L.collections.length+L.panels.length;e(t,s,n),i!=L.collections.length+L.panels.length&&setTimeout(this.forceUpdate.bind(this),50)}}buildSettingsPanel(e,t,s,n,i=null){return t.forEach(e=>{e.settings.forEach(t=>t.value=s[e.id][t.id])}),this.getSettingsPanel(e,t,this.onChange(n),i)}getSettingsPanel(e,t,s,n=null){return[q.createElement(Se,{text:e,button:n}),t.map(e=>q.createElement($e,Object.assign({},e,{onChange:s})))]}getAddonPanel(e,t,s,n={}){return q.createElement(Oe,Object.assign({},{title:e,addonList:t,addonState:s},n))}async patchSections(){const e=await R.get("UserSettings",e=>e.prototype&&e.prototype.generateSections);j.after("SettingsManager",e.prototype,"render",e=>{e._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id="user-settings"}),j.after("SettingsManager",e.prototype,"generateSections",(e,t,s)=>{let n=s.findIndex(e=>"linux"==e.section.toLowerCase())+1;const i=e=>{s.splice(n,0,e),n++};i({section:"DIVIDER"}),i({section:"CUSTOM",element:Ge});for(const e of L.collections)e.disabled||i({section:e.name,label:e.name,element:()=>this.buildSettingsPanel(e.name,e.settings,L.state[e.id],L.onSettingChange.bind(L,e.id),e.button?e.button:null)});for(const t of L.panels.sort((e,t)=>e.order>t.order))t.clickListener&&(t.onClick=n=>t.clickListener(e,n,s)),i(t)}),this.forceUpdate()}forceUpdate(){const e=g.getByProps("standardSidebarView").standardSidebarView.split(" ")[0],t=document.querySelector(`.${e}`);if(!t)return;const s=u.findInReactTree(u.getReactInstance(t),e=>e&&e.generateSections,{walkable:["return","stateNode"]});s&&s.forceUpdate()}};const Je=s(1),Ye=s(0).remote;var Xe=new class extends Ce{get name(){return"PluginManager"}get moduleExtension(){return".js"}get extension(){return".plugin.js"}get addonFolder(){return Je.resolve(i.dataPath,"plugins")}get prefix(){return"plugin"}get language(){return"javascript"}constructor(){super(),this.onSwitch=this.onSwitch.bind(this),this.observer=new MutationObserver(e=>{for(let t=0,s=e.length;tVe.getAddonPanel(N.Panels.plugins,this.addonList,this.state,{folder:this.addonFolder,onChange:this.togglePlugin.bind(this),reload:this.reloadPlugin.bind(this),refreshList:this.updatePluginList.bind(this),saveAddon:this.saveAddon.bind(this),editAddon:this.editAddon.bind(this),deleteAddon:this.deleteAddon.bind(this),prefix:this.prefix})}),e}updatePluginList(){return this.updateList()}loadAllPlugins(){return this.loadAllAddons()}enablePlugin(e){return this.enableAddon(e)}disablePlugin(e){return this.disableAddon(e)}togglePlugin(e){return this.toggleAddon(e)}unloadPlugin(e){return this.unloadAddon(e)}loadPlugin(e){const t=this.loadAddon(e);t&&oe.showAddonErrors({themes:[t]})}reloadPlugin(e){const t=this.reloadAddon(e);return t&&oe.showAddonErrors({plugins:[t]}),"string"==typeof e?this.addonList.find(t=>t.id==e||t.filename==e):e}initializeAddon(e){if(!e.type)return new B(e.name,e.filename,"Plugin had no exports",{message:"Plugin had no exports or no name property.",stack:""});try{const t=new e.type;e.plugin=t,e.name=t.getName()||e.name,e.author=t.getAuthor()||e.author||"No author",e.description=t.getDescription()||e.description||"No description",e.version=t.getVersion()||e.version||"No version";try{"function"==typeof e.plugin.load&&e.plugin.load()}catch(t){return this.state[e.id]=!1,new B(e.name,e.filename,"load() could not be fired.",{message:t.message,stack:t.stack})}}catch(t){return new B(e.name,e.filename,"Could not be constructed.",{message:t.message,stack:t.stack})}}getFileModification(e,t,s){return e._compile(t,e.filename),u.isEmpty(e.exports)?t+=`\nmodule.exports = ${JSON.stringify(s)};\nmodule.exports.type = ${s.exports||s.name};`:(s.type=e.exports,e.exports=s,"")}startAddon(e){return this.startPlugin(e)}stopAddon(e){return this.stopPlugin(e)}startPlugin(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;if(!t)return;const s=t.plugin;try{s.start(),this.emit("started",t.id),W.show(`${t.name} v${t.version} has started.`)}catch(e){return this.state[t.id]=!1,W.error(`${t.name} v${t.version} could not be started.`),c.stacktrace(this.name,t.name+" could not be started.",e),new B(t.name,t.filename,"start() could not be fired.",{message:e.message,stack:e.stack})}}stopPlugin(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;if(!t)return;const s=t.plugin;try{s.stop(),this.emit("stopped",t.id),W.show(`${t.name} v${t.version} has stopped.`)}catch(e){return this.state[t.id]=!1,W.error(`${t.name} v${t.version} could not be stopped.`),c.stacktrace(this.name,t.name+" could not be stopped.",e),new B(t.name,t.filename,"stop() could not be fired.",{message:e.message,stack:e.stack})}}setupFunctions(){Ye.getCurrentWebContents().on("did-navigate-in-page",this.onSwitch.bind(this)),this.observer.observe(document,{childList:!0,subtree:!0})}onSwitch(){this.emit("page-switch");for(let e=0;eVe.getAddonPanel(N.Panels.themes,this.addonList,this.state,{folder:this.addonFolder,onChange:this.toggleTheme.bind(this),reload:this.reloadTheme.bind(this),refreshList:this.updateThemeList.bind(this),saveAddon:this.saveAddon.bind(this),editAddon:this.editAddon.bind(this),deleteAddon:this.deleteAddon.bind(this),prefix:this.prefix})}),e}updateThemeList(){return this.updateList()}loadAllThemes(){return this.loadAllAddons()}enableTheme(e){return this.enableAddon(e)}disableTheme(e){return this.disableAddon(e)}toggleTheme(e){return this.toggleAddon(e)}unloadTheme(e){return this.unloadAddon(e)}loadTheme(e){const t=this.loadAddon(e);t&&oe.showAddonErrors({themes:[t]})}reloadTheme(e){const t=this.reloadAddon(e);t&&oe.showAddonErrors({themes:[t]})}getFileModification(e,t,s){return s.css=t,`module.exports = ${JSON.stringify(s)};`}startAddon(e){return this.addTheme(e)}stopAddon(e){return this.removeTheme(e)}addTheme(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;t&&(D.injectTheme(t.id,t.css),W.show(`${t.name} v${t.version} has been applied.`))}removeTheme(e){const t="string"==typeof e?this.addonList.find(t=>t.id==e):e;t&&(D.removeTheme(t.id),W.show(`${t.name} v${t.version} has been removed.`))}};class Qe{get name(){return"Unnamed Builtin"}get collection(){return"settings"}get category(){return"general"}get id(){return"None"}async initialize(){L.get(this.collection,this.category,this.id)&&await this.enable(),y.on("setting-updated",(e,t,s,n)=>{e==this.collection&&t===this.category&&s===this.id&&(n?this.enable():this.disable())}),this.initialized=!0}registerSetting(e,t,s,n,i){return 4==arguments.length?(e=this.collection,t=arguments[0],s=arguments[1],n=arguments[2],i=arguments[3]):3==arguments.length&&(e=this.collection,t=this.category,s=arguments[0],n=arguments[1],i=arguments[2]),L.on(e,t,s,e=>{e?n():i()})}get(e,t,s){return 2==arguments.length?(e=this.collection,t=arguments[0],s=arguments[1]):1==arguments.length&&(e=this.collection,t=this.category,s=arguments[0]),L.get(e,t,s)}async enable(){this.log("Enabled"),await this.enabled()}async disable(){this.log("Disabled"),await this.disabled()}async enabled(){}async disabled(){}log(...e){c.log(this.name,...e)}warn(...e){c.warn(this.name,...e)}error(...e){c.err(this.name,...e)}stacktrace(e,t){c.stacktrace(this.name,e,t)}after(e,t,s){return j.after(this.name,e,t,s)}unpatchAll(){return j.unpatchAll(this.name)}}class et extends q.Component{render(){const e=this.props.size||"24px";return q.createElement("svg",{viewBox:"0 0 24 24",style:{width:e,height:e}},q.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),q.createElement("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"}))}}class tt extends q.Component{constructor(e){super(e),this.hasUnsavedChanges=!1,this.onChange=this.onChange.bind(this),this.toggleLiveUpdate=this.toggleLiveUpdate.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.openDetached=this.props.openDetached?this.openDetached.bind(this):null,this.openNative=this.openNative.bind(this),this.updateEditor=this.updateEditor.bind(this),this.controls=[{label:q.createElement(Ee,{size:"18px"}),tooltip:N.CustomCSS.update,onClick:this.updateCss},{label:q.createElement(K,{size:"18px"}),tooltip:N.CustomCSS.save,onClick:this.saveCss},{label:q.createElement(Q,{size:"18px"}),tooltip:N.CustomCSS.openNative,onClick:this.openNative},{label:q.createElement(ee,{size:"18px"}),tooltip:N.CustomCSS.settings,onClick:"showSettings"},{label:N.Collections.settings.customcss.liveUpdate.name,type:"checkbox",onChange:this.toggleLiveUpdate,checked:L.get("settings","customcss","liveUpdate"),side:"right"}],this.openDetached&&this.controls.push({label:q.createElement(et,{size:"18px"}),tooltip:N.CustomCSS.openDetached,onClick:this.openDetached,side:"right"})}componentDidMount(){y.on("customcss-updated",this.updateEditor)}componentWillUnmount(){y.off("customcss-updated",this.updateEditor)}updateEditor(e){this.editor&&(this.editor.value=e)}get value(){return this.editor.session.getValue()}set value(e){this.editor.setValue(e)}showSettings(){return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor)}resize(){return this.editor.resize()}setEditorRef(e){this.editor=e,this.props.editorRef&&void 0!==this.props.editorRef.current?this.props.editorRef.current=e:this.props.editorRef&&(this.props.editorRef=e)}onChange(){this.hasUnsavedChanges=!0,this.props.onChange&&this.props.onChange(...arguments)}render(){return q.createElement(Z,{ref:this.setEditorRef.bind(this),readOnly:this.props.readOnly,id:this.props.id||"bd-customcss-editor",onChange:this.onChange,controls:this.controls,value:this.props.css})}toggleLiveUpdate(e){L.set("settings","customcss","liveUpdate",e)}updateCss(e,t){this.props.update&&this.props.update(t)}saveCss(e,t){this.hasUnsavedChanges=!1,this.props.save&&this.props.save(t)}openDetached(e,t){this.props.openDetached&&this.props.openDetached(t)}openNative(){this.props.openNative&&this.props.openNative()}}const st=s(2),nt=s(0),it=g.getByProps("updateAccount"),ot=g.getByProps("dirtyDispatch"),rt=g.getByProps("ActionTypes").ActionTypes;var at=new class extends Qe{get name(){return"Custom CSS"}get category(){return"customcss"}get id(){return"customcss"}get startDetached(){return"detached"==L.get(this.collection,this.category,"openAction")}get nativeOpen(){return"system"==L.get(this.collection,this.category,"openAction")}constructor(){super(),this.savedCss="",this.insertedCss="",this.isDetached=!1}async enabled(){window.ace||D.injectScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js").then(()=>{window.require.original&&(window.require=window.require.original)}),L.registerPanel(this.id,N.Panels.customcss,{order:2,element:()=>[q.createElement(Se,{text:N.CustomCSS.editorTitle}),q.createElement(tt,{css:this.savedCss,save:this.saveCSS.bind(this),update:this.insertCSS.bind(this),openNative:this.openNative.bind(this),openDetached:this.openDetached.bind(this),onChange:this.onChange.bind(this)})],onClick:e=>{if(this.isDetached)return;if(this.nativeOpen)return this.openNative();if(this.startDetached)return this.openDetached();const t=u.findInRenderTree(e._reactInternalFiber,e=>e&&e.onSetSection,{walkable:["child","memoizedProps","props","children"]});t&&t.onSetSection&&t.onSetSection(this.id)}}),this.loadCSS(),this.insertCSS(this.savedCss),this.watchContent()}disabled(){L.removePanel(this.id),this.unwatchContent()}watchContent(){if(this.watcher)return this.error("Already watching content.");const e={};this.log("Starting to watch content."),this.watcher=st.watch(S.customCSS,{persistent:!1},async(t,s)=>{if(!t||!s)return;await new Promise(e=>setTimeout(e,50));try{st.statSync(S.customCSS)}catch(t){if("ENOENT"!==t.code)return;delete e[s],this.saveCSS("")}const n=st.statSync(S.customCSS);if(n&&n.mtime&&n.mtime.getTime()&&"number"==typeof n.mtime.getTime()&&e[s]!=n.mtime.getTime()&&(e[s]=n.mtime.getTime(),"change"==t)){const e=S.loadCustomCSS();if(e==this.savedCss)return;this.savedCss=e,this.insertCSS(this.savedCss),y.emit("customcss-updated",this.savedCss)}})}unwatchContent(){if(!this.watcher)return this.error("Was not watching content.");this.watcher.close(),delete this.watcher,this.log("No longer watching content.")}onChange(e){L.get("settings","customcss","liveUpdate")&&(this.insertCSS(e),this.saveCSS(e))}loadCSS(){this.savedCss=S.loadCustomCSS()}insertCSS(e){void 0===e?e=this.insertedCss:this.insertedCss=e,D.updateCustomCSS(e)}saveCSS(e){void 0!==e&&(this.savedCss=e),S.saveCustomCSS(this.savedCss)}openNative(){nt.shell.openExternal(`file://${S.customCSS}`)}openDetached(e){const t=q.createRef(),s=q.createElement(tt,{id:"bd-floating-editor",ref:t,css:e,save:this.saveCSS.bind(this),update:this.insertCSS.bind(this),openNative:this.openNative.bind(this),onChange:this.onChange.bind(this)});pe.open({onClose:()=>{this.isDetached=!1},onResize:()=>{t&&t.current&&t.current.resize&&t.current.resize()},title:N.CustomCSS.editorTitle,id:"floating-editor-window",height:470,width:410,center:!0,resizable:!0,children:s,confirmClose:()=>!(!t||!t.current)&&t.current.hasUnsavedChanges,confirmationText:N.CustomCSS.confirmationText}),this.isDetached=!0,it.close(),ot.dirtyDispatch({type:rt.LAYER_POP})}},lt=new class extends Qe{get name(){return"WindowPrefs"}get category(){return"window"}get id(){return"transparency"}enabled(){this.setWindowPreference("transparent",!0),this.setWindowPreference("backgroundColor","#00000000"),this.showModal(N.WindowPrefs.enabledInfo)}disabled(){this.deleteWindowPreference("transparent"),this.deleteWindowPreference("backgroundColor"),this.showModal(N.WindowPrefs.disabledInfo)}showModal(e){this.initialized&&oe.showConfirmationModal(N.Modals.additionalInfo,e,{confirmText:N.Modals.restartNow,cancelText:N.Modals.restartLater,onConfirm:()=>{const e=s(0).remote.app;e.relaunch(),e.exit()}})}getWindowPreference(e){return(S.getData("windowprefs")||{})[e]}setWindowPreference(e,t){const s=S.getData("windowprefs")||{};s[e]=t,S.setData("windowprefs",s)}deleteWindowPreference(e){const t=S.getData("windowprefs")||{};delete t[e],S.setData("windowprefs",t)}},dt=new class extends Qe{get name(){return"24Hour"}get category(){return"general"}get id(){return"twentyFourHour"}enabled(){this.inject24Hour()}disabled(){this.unpatchAll()}inject24Hour(){const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=(t,s,n)=>{const i=n.match(e);if(i&&4===i.length)return"AM"===i[3]?n.replace(i[0],`${"12"===i[1]?"00":i[1].padStart(2,"0")}:${i[2]}`):n.replace(i[0],`${"12"===i[1]?"12":parseInt(i[1])+12}:${i[2]}`)};this.after(f.TimeFormatter,"calendarFormat",t),this.after(f.TimeFormatter,"dateFormat",t)}};const ct=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var ht=new class extends Qe{get id(){return"classNormalizer"}get category(){return"general"}get name(){return"ClassNormalizer"}enabled(){this.hasPatched||(this.patchClassModules(g.getModules(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}disabled(){this.hasPatched&&(this.unpatchClassModules(g.getModules(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const s=e[t];if("string"!=typeof s)return!1;if(!this.shouldIgnore(s)){if(1===s.split("-").length)return!1;if(!ct.test(s.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const s in t){const n=t[s];if(this.shouldIgnore(n))continue;const i=n.split(" ");for(const n of i){const i=n.match(ct);if(!i||!i.length||i.length<2)continue;const o=i[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[s]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const s in t){const n=t[s];if(this.shouldIgnore(n))continue;let i="";const o=n.split(" ");for(const t of o)t.startsWith(`${e}-`)||(i+=` ${t}`);t[s]=i.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let s=0,n=t.length;st?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${n}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,s=[];for(let e=0;e{const o=[];t&&o.push(`category=${t.replace(/ /g,"%20")}`),e&&o.push(`term=${e.replace(/ /g,"%20")}`),n&&o.push(`from=${n}`);const r=`?${o.join("&")}`;i.get({url:`${this.endPoint}${r}${r?"&schema=new":"?schema=new"}`,json:!0},(e,t,n)=>{if(e)return s(null);const i=n.size+n.from;s({servers:n.results,size:n.size,from:n.from,total:n.total,next:i>=n.total?null:i})})})}static async join(e,t=!1){if(t)return gt.acceptInvite(e);try{return await fetch(`${this.joinEndPoint}/${e}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),!0}catch(e){return!1}}static async checkConnection(){try{const e=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),t=await e.json();return this._accessToken=t.access_token,t}catch(e){return!1}}static connect(){return new Promise(e=>{const t=new ft(this.windowOptions),s=`https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=${this.connectEndPoint}`;t.webContents.on("did-navigate",(s,n)=>{n==this.connectEndPoint&&(t.close(),e())}),t.loadURL(s)})}static get windowOptions(){return{width:380,height:450,backgroundColor:"#282b30",show:!0,resizable:!0,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!0,webPreferences:{nodeIntegration:!1}}}}const yt=g.getByDisplayName("SettingsView");class vt extends q.Component{get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}constructor(e){super(e),this.state={category:"All",query:"",loading:!0,user:null,results:{servers:[],size:0,from:0,total:0,next:null}},this.changeCategory=this.changeCategory.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.connect=this.connect.bind(this),this.loadNextPage=this.loadNextPage.bind(this),this.join=this.join.bind(this)}componentDidMount(){this.checkConnection()}async checkConnection(){const e=await bt.checkConnection();if(!e)return this.setState({loading:!0,user:null});this.setState({user:e}),this.search()}async connect(){await bt.connect(),this.checkConnection()}searchKeyDown(e){this.state.loading||13!==e.which||this.search(e.target.value)}async search(e="",t=0){this.setState({query:e,loading:!0});const s=await bt.search({term:e,category:"All"==this.state.category?"":this.state.category,from:t});if(!s)return this.setState({results:{servers:[],size:0,from:0,total:0,next:null}});this.setState({loading:!1,results:s})}async changeCategory(e){this.state.loading||(await new Promise(t=>this.setState({category:e},t)),this.search())}loadNextPage(){this.state.loading||this.search(this.state.query,this.state.results.next)}async join(e,t=!1){return await bt.join(e,t)}get searchBox(){return q.createElement(Fe,{onKeyDown:this.searchKeyDown,placeholder:`${N.PublicServers.search}...`})}get title(){if(!this.state.user)return N.PublicServers.notConnected;if(this.state.loading)return`${N.PublicServers.loading}...`;const e=this.state.results.from+1,t=this.state.results.total,s=this.state.results.next?this.state.results.next:t;let n=N.PublicServers.results.format({start:e,end:s,total:t,category:this.state.category});return this.state.query&&(n+=" "+N.PublicServers.query.format({query:this.state.query})),n}get content(){const e=this.state.user?null:{title:N.PublicServers.connect,onClick:this.connect},t="All"!=this.state.category&&this.state.user?null:this.bdServer,s=this.state.results.servers.map(e=>q.createElement(ut,{key:e.identifier,server:e,joined:bt.hasJoined(e.identifier),join:this.join,defaultAvatar:bt.getDefaultAvatar}));return[q.createElement(Se,{text:this.title,button:e}),t,s,this.state.results.next?this.nextButton:null,this.state.results.servers.length>0&&q.createElement(Se,{text:this.title})]}get nextButton(){return q.createElement("button",{type:"button",className:"bd-button bd-button-next",onClick:this.loadNextPage},this.state.loading?N.PublicServers.loading:N.PublicServers.loadMore)}get connection(){const{user:e}=this.state;return e?q.createElement("div",{id:"bd-connection"},q.createElement("div",{className:"bd-footnote"},N.PublicServers.connection.format(e)),q.createElement("button",{type:"button",className:"bd-button bd-button-reconnect",onClick:this.connect},N.PublicServers.reconnect)):q.createElement("div",{id:"bd-connection"})}get bdServer(){const e={name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for plugins, themes, support, etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0};return q.createElement(ut,{server:e,pinned:!0,joined:bt.hasJoined(e.identifier),defaultAvatar:bt.getDefaultAvatar})}render(){const e=this.categoryButtons.map(e=>({section:e,label:e,element:()=>this.content}));return q.createElement(yt,{onClose:this.props.close,onSetSection:this.changeCategory,section:this.state.category,sections:[{section:"HEADER",label:N.PublicServers.search},{section:"CUSTOM",element:()=>this.searchBox},{section:"HEADER",label:N.PublicServers.categories},...e,{section:"DIVIDER"},{section:"HEADER",label:q.createElement("a",{href:"https://discordservers.com",target:"_blank"},"DiscordServers.com")},{section:"DIVIDER"},{section:"CUSTOM",element:()=>this.connection}],theme:"dark"})}}const wt=g.getByProps("pushLayer");var Ct=new class extends Qe{get name(){return"PublicServers"}get category(){return"general"}get id(){return"publicServers"}enabled(){const e=g.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=g.findByDisplayName("Guilds");e||t||this.warn("Can't find GuildList component"),this.guildPatch=this.after(e||t.prototype,e?"default":"render",this._appendButton),this._appendButton()}disabled(){this.unpatchAll(),h.query("#bd-pub-li").remove()}_appendButton(){const e=f.GuildClasses.wrapper.split(" ")[0],t=h.query(`.${e} .scroller-2TZvBN >:first-child`);h.after(t,this.button)}openPublicServers(){wt.pushLayer(()=>f.React.createElement(vt,{close:wt.popLayer}))}get button(){const e=h.createElement(`
`),t=h.createElement(`
${N.PublicServers.button}
`);return t.addEventListener("click",()=>{this.openPublicServers()}),e.append(t),e}},St=new class extends Qe{get name(){return"VoiceDisconnect"}get category(){return"general"}get id(){return"voiceDisconnect"}constructor(){super(),this.beforeUnload=this.beforeUnload.bind(this)}enabled(){window.addEventListener("beforeunload",this.beforeUnload)}disabled(){window.removeEventListener("beforeunload",this.beforeUnload)}beforeUnload(){f.ChannelActions.selectVoiceChannel(null,null)}};const Et=g.getModule(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName);var Pt=new class extends Qe{get name(){return"ColoredText"}get category(){return"appearance"}get id(){return"coloredText"}enabled(){this.injectColoredText()}disabled(){this.unpatchAll()}injectColoredText(){this.after(Et.prototype,"render",(e,t,s)=>{this.after(s.props,"children",{silent:!0,after:({returnValue:t})=>{const s=t.props.children[1],n=e.props.message.colorString;s&&n&&(s.props.style={color:n})}})})}removeColoredText(){document.querySelectorAll(".markup-2BOw-j").forEach(e=>{e.style.setProperty("color","")})}},xt=new class extends Qe{get name(){return"DarkMode"}get category(){return"appearance"}get id(){return"darkMode"}enabled(){document.getElementById("app-mount").classList.add("bda-dark","bd-dark")}disabled(){document.getElementById("app-mount").classList.remove("bda-dark","bd-dark")}},kt=new class extends Qe{get name(){return"MinimalMode"}get category(){return"appearance"}get id(){return"minimalMode"}get hideChannelsID(){return"hideChannels"}get hideChannels(){return this.get(this.hideChannelsID)}constructor(){super(),this.enableHideChannels=this.enableHideChannels.bind(this),this.disableHideChannels=this.disableHideChannels.bind(this)}enabled(){document.body.classList.add("bd-minimal"),this.hideChannels&&this.enableHideChannels(),this.hideChannelCancel=this.registerSetting(this.hideChannelsID,this.enableHideChannels,this.disableHideChannels)}disabled(){document.body.classList.remove("bd-minimal"),this.hideChannels&&this.disableHideChannels(),this.hideChannelCancel&&this.hideChannelCancel()}enableHideChannels(){document.body.classList.add("bd-minimal-chan")}disableHideChannels(){document.body.classList.remove("bd-minimal-chan")}},At=new class extends Qe{get name(){return"VoiceMode"}get category(){return"appearance"}get id(){return"voiceMode"}enabled(){document.querySelector(".chat-3bRxxu").style.setProperty("visibility","hidden"),document.querySelector(".chat-3bRxxu").style.setProperty("min-width","0px"),document.querySelector(".channels-Ie2l6A").style.setProperty("flex-grow","100000")}disabled(){document.querySelector(".chat-3bRxxu").style.setProperty("visibility",""),document.querySelector(".chat-3bRxxu").style.setProperty("min-width",""),document.querySelector(".channels-Ie2l6A").style.setProperty("flex-grow","")}};const Dt=g.getByDisplayName("Tooltip");class Mt extends q.Component{constructor(e){super(e),this.state={shouldAnimate:!this.animateOnHover,isFavorite:this.props.isFavorite},this.onMouseEnter=this.onMouseEnter.bind(this),this.onMouseLeave=this.onMouseLeave.bind(this),this.onClick=this.onClick.bind(this),this.toggleFavorite=this.toggleFavorite.bind(this)}get animateOnHover(){return L.get("emotes","general","animateOnHover")}get label(){return this.props.modifier?`${this.props.name}:${this.props.modifier}`:this.props.name}get modifierClass(){return this.props.modifier?` emote${this.props.modifier}`:""}onMouseEnter(){!this.state.shouldAnimate&&this.animateOnHover&&this.setState({shouldAnimate:!0})}onMouseLeave(){this.state.shouldAnimate&&this.animateOnHover&&this.setState({shouldAnimate:!1})}onClick(e){this.props.onClick&&this.props.onClick(e)}toggleFavorite(e){e.preventDefault(),e.stopPropagation(),this.state.isFavorite?y.emit("emotes-favorite-removed",this.label):y.emit("emotes-favorite-added",this.label,this.props.url),this.setState({isFavorite:!this.state.isFavorite})}render(){return q.createElement(Dt,{color:"black",position:"top",text:this.label,delay:750},e=>q.createElement("div",Object.assign({className:"emotewrapper"+(this.props.jumboable?" jumboable":""),onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onClick:this.onClick},e),q.createElement("img",{draggable:!1,className:"emote"+this.modifierClass+(this.props.jumboable?" jumboable":"")+(this.state.shouldAnimate?"":" stop-animation"),dataModifier:this.props.modifier,alt:this.label,src:this.props.url}),q.createElement("input",{className:"fav"+(this.state.isFavorite?" active":""),title:N.Emotes.favoriteAction,type:"button",onClick:this.toggleFavorite})))}}const Nt=s(3),Lt={TwitchGlobal:new M("https://static-cdn.jtvnw.net/emoticons/v1/{{id}}/1.0"),TwitchSubscriber:new M("https://static-cdn.jtvnw.net/emoticons/v1/{{id}}/1.0"),FrankerFaceZ:new M("https://cdn.frankerfacez.com/emoticon/{{id}}/1"),BTTV:new M("https://cdn.betterttv.net/emote/{{id}}/1x")},Bt={TwitchGlobal:{},TwitchSubscriber:{},BTTV:{},FrankerFaceZ:{}},Tt=[],jt=["twitch","subscriber","bttv","ffz"],Ft=["flip","spin","pulse","spin2","spin3","1spin","2spin","3spin","tr","bl","br","shake","shake2","shake3","flap"];var Ot=new class extends Qe{get name(){return"Emotes"}get collection(){return"settings"}get category(){return"general"}get id(){return"emotes"}get categories(){return Object.keys(Bt).filter(e=>this.isCategoryEnabled(e))}get shouldDownload(){return L.get("emotes",this.category,"download")}isCategoryEnabled(e){return super.get("emotes","categories",e.toLowerCase())}get(e){return super.get("emotes","general",e)}get MessageContentComponent(){return g.getModule(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get Emotes(){return Bt}get TwitchGlobal(){return Bt.TwitchGlobal}get TwitchSubscriber(){return Bt.TwitchSubscriber}get BTTV(){return Bt.BTTV}get FrankerFaceZ(){return Bt.FrankerFaceZ}get blacklist(){return Tt}get favorites(){return this.favoriteEmotes}getUrl(e,t){return Lt[e].format({id:Bt[e][t]})}getCategory(e){return Bt[e]}getRemoteFile(e){return u.repoUrl(`data/emotes/${e.toLowerCase()}.json`)}initialize(){super.initialize();const e=S.getBDData("favoriteEmotes");this.favoriteEmotes=e||{},this.addFavorite=this.addFavorite.bind(this),this.removeFavorite=this.removeFavorite.bind(this),this.onCategoryToggle=this.onCategoryToggle.bind(this),this.resetEmotes=this.resetEmotes.bind(this)}async enabled(){L.registerCollection("emotes","Emotes",o,{title:N.Emotes.clearEmotes,onClick:this.resetEmotes}),await this.getBlacklist(),await this.loadEmoteData(),y.on("emotes-favorite-added",this.addFavorite),y.on("emotes-favorite-removed",this.removeFavorite),y.on("setting-updated",this.onCategoryToggle)}disabled(){y.off("setting-updated",this.onCategoryToggle),y.off("emotes-favorite-added",this.addFavorite),y.off("emotes-favorite-removed",this.removeFavorite),L.removeCollection("emotes"),this.emptyEmotes(),this.cancelEmoteRender&&(this.cancelEmoteRender(),delete this.cancelEmoteRender)}onCategoryToggle(e,t,s,n){if("emotes"==e&&"categories"==t)return n?this.loadEmoteData(s):this.unloadEmoteData(s)}addFavorite(e,t){this.favoriteEmotes.hasOwnProperty(e)||(this.favoriteEmotes[e]=t),this.saveFavorites()}removeFavorite(e){this.favoriteEmotes.hasOwnProperty(e)&&(delete this.favoriteEmotes[e],this.saveFavorites())}isFavorite(e){return this.favoriteEmotes.hasOwnProperty(e)}saveFavorites(){S.setBDData("favoriteEmotes",this.favoriteEmotes)}emptyEmotes(){for(const e in Bt)Object.assign(Bt,{[e]:{}})}patchMessageContent(){this.cancelEmoteRender||(this.cancelEmoteRender=this.after(this.MessageContentComponent.prototype,"render",(e,t,s)=>{this.after(s.props,"children",(e,t,s)=>{if(0==this.categories.length)return;const n=s.props.children[1];if(!n.props.children)return;const i=n.props.children[1];if(i&&i.length){for(let e=0;e"string"==typeof e&&""==e.replace(/\s*/,"")||(!(!e.type||"BDEmote"!=e.type.name)||!!(e.props&&e.props.children&&e.props.children.props&&e.props.children.props.emojiName))))for(const e of i)"object"==typeof e&&("BDEmote"==e.type.name?e.props.jumboable=!0:e.props&&e.props.children&&e.props.children.props&&e.props.children.props.emojiName&&(e.props.children.props.jumboable=!0))}})}))}async getBlacklist(){try{const e="Blacklist",t=S.emotesExist(e),s=await this.isCacheValid(e),n=s||!s&&t&&!this.shouldDownload?S.getEmoteData(e):await this.downloadEmotes(e);Tt.push(...n)}catch(e){}}isCacheValid(e){return new Promise(t=>{const s=S.getCacheHash("emotes",e);if(!s)return t(!1);Nt.head({url:this.getRemoteFile(e),headers:{"If-None-Match":s}},(e,s)=>{t(304==s.statusCode)})})}async loadEmoteData(e){e||(e=this.categories),Array.isArray(e)||(e=[e]);const t=Object.keys(Bt);e=e.map(e=>t.find(t=>t.toLowerCase()==e.toLowerCase())),W.show(N.Emotes.loading,{type:"info"}),this.emotesLoaded=!1;for(const t of e){const e=S.emotesExist(t),s=await this.isCacheValid(t);let n=null;if(s||!s&&e&&!this.shouldDownload){this.log(`Loading ${t} emotes from local cache.`);const e=S.getEmoteData(t);Object.keys(e).length>0&&(n=e)}n||(n=await this.downloadEmotes(t)),Object.assign(Bt[t],n),await new Promise(e=>setTimeout(e,1e3))}this.emotesLoaded=!0,y.dispatch("emotes-loaded"),W.show(N.Emotes.loaded,{type:"success"})}unloadEmoteData(e){e||(e=this.categories),Array.isArray(e)||(e=[e]);const t=Object.keys(Bt);e=e.map(e=>t.find(t=>t.toLowerCase()==e.toLowerCase()));for(const t of e)delete Bt[t],Bt[t]={}}downloadEmotes(e){const t=this.getRemoteFile(e);this.log(`Downloading ${e} from ${t}`);const s={url:t,timeout:1e4,json:!0};return new Promise(t=>{Nt.get(s,(s,n,i)=>{if(s||200!=n.statusCode)return this.stacktrace(`Could not download ${e} emotes.`,s),t({});for(const e in i)(e.length<4||Tt.includes(e)||!i[e])&&delete i[e];S.saveEmoteData(e,i),S.setCacheHash("emotes",e,n.headers.etag),t(i),this.log(`Downloaded ${e}`)})})}resetEmotes(){const e=Object.keys(Bt);this.unloadEmoteData(e);for(const t of e)S.invalidateCache("emotes",t);this.loadEmoteData()}};const It=(e,t,s={})=>{const{onContextMenu:n,onClick:i}=s,o=h.createElement(`
\n ${e}\n
`);return n&&o.addEventListener("contextmenu",n),o.addEventListener("click",i),o};var zt=new class extends Qe{get name(){return"EmoteMenu"}get collection(){return"emotes"}get category(){return"general"}get id(){return"emoteMenu"}get hideEmojisID(){return"hideEmojiMenu"}get hideEmojis(){return this.get(this.hideEmojisID)}constructor(){super(),this.lastTab="bd-qem-emojis",this.qmeHeader=h.createElement('
\n \n \n
');for(const e of this.qmeHeader.getElementsByTagName("button"))e.addEventListener("click",this.switchMenu.bind(this));this.teContainer=h.createElement('
\n
\n
\n
\n\n
\n
\n
\n
'),this.teContainerInner=this.teContainer.querySelector(".emote-menu-inner"),this.faContainer=h.createElement('
\n
\n
\n
\n\n
\n
\n
\n
'),this.faContainerInner=this.faContainer.querySelector(".emote-menu-inner"),this.observer=new MutationObserver(e=>{for(const t of e)this.observe(t)}),this.enableHideEmojis=this.enableHideEmojis.bind(this),this.disableHideEmojis=this.disableHideEmojis.bind(this),this.updateTwitchEmotes=this.updateTwitchEmotes.bind(this)}async enabled(){return oe.alert("Emote Menu Broken","Emote Menu is currently broken, it is recommended to disable this until it is fixed.")}disabled(){y.off("emotes-loaded",this.updateTwitchEmotes),this.observer.disconnect(),this.disableHideEmojis(),this.hideEmojiCancel&&this.hideEmojiCancel()}enableHideEmojis(){const e=document.querySelector(".emojiPicker-3m1S-j");e&&e.classList.add("bd-qme-hidden")}disableHideEmojis(){const e=document.querySelector(".emojiPicker-3m1S-j");e&&e.classList.remove("bd-qme-hidden")}insertEmote(e){const t=u.getTextArea();u.insertText(t[0]," "==t.val().slice(-1)?t.val()+e:t.val()+" "+e)}favContext(e){e.stopPropagation();const t=e.target.closest(".emote-container").children[0],s=$('
Remove
');s.css({top:e.pageY-$("#bd-qem-favourite-container").offset().top,left:e.pageX-$("#bd-qem-favourite-container").offset().left}),$(t).parent().append(s),s.on("click",e=>{e.preventDefault(),e.stopPropagation(),$(t).remove(),Ot.removeFavorite($(t).attr("title")),this.updateFavorites(),$(document).off("mousedown.emotemenu")}),$(document).on("mousedown.emotemenu",(function(e){"removemenu"!=e.target.id&&($("#removemenu").remove(),$(document).off("mousedown.emotemenu"))}))}switchMenu(e){let t="string"==typeof e?e:e.target.id;"bd-qem-emojis"==t&&this.hideEmojis&&(t="bd-qem-favourite");const s=$("#bd-qem-twitch"),n=$("#bd-qem-favourite"),i=$("#bd-qem-emojis");switch(s.removeClass("active"),n.removeClass("active"),i.removeClass("active"),$(".emojiPicker-3m1S-j").hide(),$("#bd-qem-favourite-container").hide(),$("#bd-qem-twitch-container").hide(),t){case"bd-qem-twitch":s.addClass("active"),$("#bd-qem-twitch-container").show();break;case"bd-qem-favourite":n.addClass("active"),$("#bd-qem-favourite-container").show();break;case"bd-qem-emojis":i.addClass("active"),$(".emojiPicker-3m1S-j").show(),$(".emojiPicker-3m1S-j input").focus()}t&&(this.lastTab=t)}observe(e){if(!(e.addedNodes.length&&e.addedNodes[0]instanceof Element))return;const t=e.addedNodes[0];if(!t.classList.contains("layer-v9HyYc")||!t.getElementsByClassName("emojiPicker-3m1S-j").length||t.querySelector(".emojiPicker-3m1S-j").parentElement.classList.contains("animatorLeft-1EQxU0"))return;const s=$(t);this.hideEmojis?s.addClass("bd-qme-hidden"):s.removeClass("bd-qme-hidden"),s.prepend(this.qmeHeader),s.append(this.teContainer),s.append(this.faContainer),this.switchMenu(this.lastTab)}updateTwitchEmotes(){for(;this.teContainerInner.firstChild;)this.teContainerInner.firstChild.remove();for(const e in Ot.getCategory("TwitchGlobal")){if(!Ot.getCategory("TwitchGlobal").hasOwnProperty(e))continue;const t=Ot.getUrl("TwitchGlobal",e),s=It(e,t,{onClick:this.insertEmote.bind(this,e)});this.teContainerInner.append(s)}}updateFavorites(){for(;this.faContainerInner.firstChild;)this.faContainerInner.firstChild.remove();for(const e in Ot.favorites){const t=Ot.favorites[e],s=It(e,t,{onClick:this.insertEmote.bind(this,e),onContextMenu:this.favContext.bind(this)});this.faContainerInner.append(s)}Ot.saveFavorites()}},Rt=new class extends Qe{get name(){return"DeveloperMode"}get category(){return"developer"}get id(){return"developerMode"}get selectorModeID(){return"copySelector"}get selectorMode(){return this.get(this.selectorModeID)}constructor(){super(),this.copySelectorListener=this.copySelectorListener.bind(this)}enabled(){document.addEventListener("contextmenu",this.copySelectorListener)}disabled(){document.removeEventListener("contextmenu",this.copySelectorListener)}copySelectorListener(e){e.stopPropagation();const t=this.getSelector(e.target);setImmediate((function(){let s=h.query(".contextMenu-HLZMGh");if(!s){const t=h.query("#app-mount"),n=h.createElement('
');s=h.createElement('
'),n.append(s),t.append(n),n.style.top=e.clientY+"px",n.style.left=e.clientX+"px",n.style.zIndex="1002";const i=function(e){e.keyCode&&27!==e.keyCode||(n.remove(),document.removeEventListener("click",i),document.removeEventListener("contextmenu",i),document.removeEventListener("keyup",i))};document.addEventListener("click",i),document.addEventListener("contextmenu",i),document.addEventListener("keyup",i)}const n=h.createElement('
'),i=h.createElement('
');i.append(h.createElement('
Copy Selector
')),i.addEventListener("click",()=>{f.ElectronModule.copy(t),s.style.display="none"}),n.append(i),s.append(n)}))}getSelector(e){if(e.id)return`#${e.id}`;const t=this.getRules(e),s=t[t.length-1];return s?s.selectorText:e.classList.length?`.${Array.from(e.classList).join(".")}`:`.${Array.from(e.parentElement.classList).join(".")}`}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}},$t=new class extends Qe{get name(){return"Debugger"}get category(){return"developer"}get id(){return"debuggerHotkey"}enabled(){document.addEventListener("keydown",this.debugListener)}disabled(){document.removeEventListener("keydown",this.debugListener)}debugListener(e){119!==e.which&&118!=e.which||(e.preventDefault(),e.stopImmediatePropagation())}};const qt=s(0),Ht=s(2),Ut=s(1),_t=qt.remote.BrowserWindow,Wt=qt.remote.getCurrentWebContents();var Gt=new class extends Qe{get name(){return"ReactDevTools"}get category(){return"developer"}get id(){return"reactDevTools"}initialize(){super.initialize(),this.findExtension()}findExtension(){let e="";if(e="win32"===process.platform?Ut.resolve(process.env.LOCALAPPDATA,"Google/Chrome/User Data"):"linux"===process.platform?Ut.resolve(process.env.HOME,".config/google-chrome"):"darwin"===process.platform?Ut.resolve(process.env.HOME,"Library/Application Support/Google/Chrome"):Ut.resolve(process.env.HOME,".config/chromium"),e+="/Default/Extensions/fmkadmapgofadopljbjfkapdkoienihi/",Ht.existsSync(e)){const t=Ht.readdirSync(e);e=Ut.resolve(e,t[t.length-1])}this.extensionPath=e,this.isExtensionInstalled=Ht.existsSync(e),this.listener=this.listener.bind(this)}enabled(){if(this.isExtensionInstalled||this.findExtension(),!this.isExtensionInstalled)return oe.alert("Extension Not Found","Unable to find the React Developer Tools extension on your PC. Please install the extension on your local Chrome installation.");setImmediate(()=>Wt.on("devtools-opened",this.listener)),Wt.isDevToolsOpened()&&this.listener()}disabled(){Wt.removeListener("devtools-opened",this.listener)}listener(){if(!this.isExtensionInstalled)return;_t.removeDevToolsExtension("React Developer Tools"),_t.addDevToolsExtension(this.extensionPath)?this.log("Successfully installed react devtools."):this.error("Couldn't find react devtools in chrome extensions!")}};class Vt extends q.Component{render(){return q.createElement("svg",{className:"bd-logo "+this.props.className,height:"100%",width:this.props.size||"16px",viewBox:"0 0 2000 2000",style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}},q.createElement("metadata",null),q.createElement("defs",null,q.createElement("filter",{id:"shadow1"},q.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20",floodColor:"rgba(0,0,0,0.35)"})),q.createElement("filter",{id:"shadow2"},q.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20",floodColor:"rgba(255,255,255,0.15)"})),q.createElement("filter",{id:"shadow3"},q.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20",floodColor:"rgba(0,0,0,0.35)"}))),q.createElement("g",null,q.createElement("path",{style:{filter:"url(#shadow3)"},fill:"#171717",opacity:"1",d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z"}),q.createElement("path",{style:{filter:"url(#shadow2)"},fill:"#3E82E5",opacity:"1",d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z"}),q.createElement("path",{style:{filter:"url(#shadow1)"},fill:"#FFFFFF",opacity:"1",d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z"})))}}const Jt=f.React,Yt=g.getByDisplayName("Tooltip");var Xt=new class{initialize(){u.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),u.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),u.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),u.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),u.suppressErrors(this.patchMessageHeader.bind(this),"BD Message Header Patch")(),u.suppressErrors(this.patchMemberList.bind(this),"BD Member List Patch")()}patchSocial(){if(this.socialPatch)return;const e=g.getByDisplayName("TabBar"),t=g.getByDisplayName("Anchor");e&&(this.socialPatch=j.after("ComponentPatcher",e.prototype,"render",(e,s,n)=>{const o=n.props.children;if(!o||!o.length||o.length<3)return;if("Separator"!==o[o.length-3].type.displayName)return;if(!o[o.length-2].type.toString().includes("socialLinks"))return;if(t){const e=o[o.length-2].type,s=function(){const s=e(...arguments);return s.props.children.push(f.React.createElement(t,{className:"bd-social-link",href:"https://twitter.com/BandagedBD",title:"BandagedBD",target:"_blank"},f.React.createElement(Vt,{size:"16px",className:"bd-social-logo"}))),s};o[o.length-2].type=s}const r=f.React.createElement("div",{className:"colorMuted-HdFt4q size12-3cLvbJ"},`Injector ${i.version}`),a=`(${i.hash?i.hash.substring(0,7):i.branch})`,l=f.React.createElement("div",{className:"colorMuted-HdFt4q size12-3cLvbJ"},`BBD ${i.bbdVersion} `,f.React.createElement("span",{className:"versionHash-2gXjIB da-versionHash"},a)),d=o[o.length-1].type;o[o.length-1].type=function(){const e=d(...arguments);return e.props.children.splice(e.props.children.length-1,0,r),e.props.children.splice(1,0,l),e}}))}patchGuildListItems(){if(this.guildListItemsPatch)return;const e=f.GuildClasses.listItem.split(" ")[0],t=f.GuildClasses.blobContainer.split(" ")[0],s=u.getReactInstance(document.querySelector(`.${e} .${t}`).parentElement).return.type;s&&(this.guildListItemsPatch=j.after("ComponentPatcher",s.prototype,"render",(e,t,s)=>{if(!s||!e)return;const n=e.props;return s.props.className+=" bd-guild",n.unread&&(s.props.className+=" bd-unread"),n.selected&&(s.props.className+=" bd-selected"),n.audio&&(s.props.className+=" bd-audio"),n.video&&(s.props.className+=" bd-video"),n.badge&&(s.props.className+=" bd-badge"),n.animatable&&(s.props.className+=" bd-animatable"),s}))}patchGuildPills(){if(this.guildPillPatch)return;const e=g.getModule(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=j.after("ComponentPatcher",e,"default",(e,t,s)=>{const n=t[0];return n.unread&&(s.props.className+=" bd-unread"),n.selected&&(s.props.className+=" bd-selected"),n.hovered&&(s.props.className+=" bd-hovered"),s}))}patchGuildSeparator(){if(this.guildSeparatorPatch)return;const e=g.getByDisplayName("Guilds"),t=g.getByProps("renderListItem");if(!t||!e)return;const s=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=j.after("ComponentPatcher",e.prototype,"render",(e,t,n)=>{const i=u.findInReactTree(n,e=>e.type&&!e.type.displayName&&"function"==typeof e.type&&u.isEmpty(e.props));i&&(i.type=s)})}patchMessageHeader(){if(this.messageHeaderPatch)return;const e=g.getByProps("MessageTimestamp"),t=g.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=j.after("ComponentPatcher",e,"default",(e,s,n)=>{const i=u.getNestedProp(s[0],"message.author"),o=u.getNestedProp(n,"props.children.1.props.children.1.props.children");o&&i&&i.id&&"249746236008169473"===i.id&&Array.isArray(o)&&o.push(Jt.createElement(Yt,{color:"black",position:"top",text:"BandagedBD Developer"},e=>Jt.createElement(t,Object.assign({className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},e),Jt.createElement(Vt,{size:"16px",className:"bd-logo"}))))}))}patchMemberList(){if(this.memberListPatch)return;const e=g.findByDisplayName("MemberListItem"),t=g.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=j.after("ComponentPatcher",e.prototype,"renderDecorators",(e,s,n)=>{const i=u.getNestedProp(e,"props.user"),o=u.getNestedProp(n,"props.children");o&&i&&i.id&&"249746236008169473"===i.id&&Array.isArray(o)&&o.push(Jt.createElement(Yt,{color:"black",position:"top",text:"BandagedBD Developer"},e=>Jt.createElement(t,Object.assign({className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},e),Jt.createElement(Vt,{size:"16px",className:"bd-logo"}))))}))}};const Zt=f.GuildClasses;function Kt(){}Kt.prototype.setConfig=function(e){Object.assign(i,e)},Kt.prototype.init=async function(){if(S.initialize(),await A.initialize(),i.versioni.version&&oe.showConfirmationModal(N.Startup.updateAvailable,N.Startup.updateInfo.format({version:e}),{confirmText:N.Startup.updateNow,cancelText:N.Startup.maybeLater,onConfirm:async()=>{const e=()=>{oe.alert(N.Startup.updateFailed,N.Startup.manualUpdate)};try{if(!await this.updateInjector())return e();const t=s(0).remote.app;t.relaunch(),t.exit()}catch(t){e()}}}),c.log("Startup","Initializing Settings"),L.initialize(),D.initialize(),await this.waitForGuilds(),R.initialize(),Xt.initialize();for(const e in n)n[e].initialize();c.log("Startup","Loading Plugins");const t=Xe.initialize();c.log("Startup","Loading Themes");const o=Ke.initialize();c.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2")[0].remove(),c.log("Startup","Collecting Startup Errors"),oe.showAddonErrors({plugins:t,themes:o});const r=S.getBDData("version");i.bbdVersion>r&&(oe.showChangelogModal(l),S.setBDData("version",i.bbdVersion))},Kt.prototype.waitForGuilds=function(){let e=0;return new Promise(t=>{const s=function(){e++,"complete"!=document.readyState&&setTimeout(s,100);const n=Zt.wrapper.split(" ")[0],o=Zt.listItem.split(" ")[0],r=Zt.blobContainer.split(" ")[0];return document.querySelectorAll(`.${n} .${o} .${r}`).length>0||e>=50?t(i.deferLoaded=!0):void setTimeout(s,100)};s()})},Kt.prototype.updateInjector=async function(){const e=S.injectionPath;if(!e)return!1;const t=s(2),n=s(1),i=s(6),o=s(7),r=s(8),a=s(3),l=n.resolve(e,".."),d=n.basename(e),h="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",u=n.resolve(l,"injector.zip"),p=n.resolve(l,"BetterDiscordApp-injector");c.log("InjectorUpdate","Downloading "+h);let m=await new Promise(e=>{a.get({url:h,encoding:null},async(s,n,i)=>{if(s||200!==n.statusCode)return e(!1);await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e)),c.log("InjectorUpdate","Writing "+u),t.writeFile(u,i,t=>e(!t))})});if(!m)return m;await new Promise(e=>t.exists(p,e))&&await new Promise(e=>t.rename(p,`${p}.bak${Math.round(performance.now())}`,e));const g=await new Promise(e=>o.open(u,{lazyEntries:!0},(t,s)=>e(s)));g.on("entry",(function(e){if(e.fileName.endsWith("/"))return g.readEntry();c.log("InjectorUpdate","Extracting "+e.fileName);const s=n.resolve(l,e.fileName);r.sync(n.dirname(s)),g.openReadStream(e,(function(e,n){if(e)return m=!1;n.on("end",(function(){g.readEntry()})),n.pipe(t.createWriteStream(s))}))})),g.readEntry(),await new Promise(e=>g.once("end",e));const f=n.resolve(l,`${d}.bak${Math.round(performance.now())}`);return await new Promise(s=>t.rename(e,f,s)),c.log("InjectorUpdate",`Renaming ${n.basename(p)} to ${d}`),m=await new Promise(s=>t.rename(p,e,e=>s(!e))),m?m?(await new Promise(e=>i(f,e)),await new Promise(e=>t.unlink(u,e)),c.log("InjectorUpdate","Injector Updated!"),m):(c.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>i(p,e)),await new Promise(s=>t.rename(f,e,s)),m):(c.err("InjectorUpdate","Failed to rename the final directory"),m)};var Qt=new Kt;const es={get React(){return f.React},get ReactDOM(){return f.ReactDOM},get WindowConfigFile(){return""},get settings(){return L.collections},get emotes(){return{}},get version(){return i.version},getAllWindowPreferences:function(){return S.getData("windowprefs")||{}},getWindowPreference:function(e){return this.getAllWindowPreferences()[e]},setWindowPreference:function(e,t){const s=this.getAllWindowPreferences();return s[e]=t,S.setData("windowprefs",s)},injectCSS:function(e,t){D.injectStyle(e,t)},clearCSS:function(e){D.removeStyle(e)},linkJS:function(e,t){return D.injectScript(e,t)},unlinkJS:function(e){D.removeScript(e)},alert:function(e,t){oe.alert(e,t)},showConfirmationModal:function(e,t,s={}){return oe.showConfirmationModal(e,t,s)},showToast:function(e,t={}){W.show(e,t)},findModule:function(e){return g.getModule(e)},findAllModules:function(e){return g.getModule(e,!1)},findModuleByProps:function(...e){return g.getByProps(...e)},findModuleByPrototypes:function(...e){return g.getByPrototypes(...e)},findModuleByDisplayName:function(e){return g.getByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),u.getReactInstance(e)},loadData:function(e,t){return S.getPluginData(e,t)}};es.getData=es.loadData,es.saveData=function(e,t,s){return S.setPluginData(e,t,s)},es.setData=es.saveData,es.deleteData=function(e,t){return S.deletePluginData(e,t)},es.monkeyPatch=function(e,t,s){const{before:n,after:i,instead:o,once:r=!1,silent:a=!1,force:l=!1}=s,d=s.displayName||e.displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",d),!e[t]){if(!l)return console.error(t,"does not exist for",d);e[t]=function(){}}const c=e[t],h=()=>{a||console.log("unpatch",t,"of",d),e[t]=c};return e[t]=function(){const s={thisObject:this,methodArguments:arguments,cancelPatch:h,originalMethod:c,callOriginalMethod:()=>s.returnValue=s.originalMethod.apply(s.thisObject,s.methodArguments)};if(o){const n=u.suppressErrors(o,"`instead` callback of "+e[t].displayName)(s);void 0!==n&&(s.returnValue=n)}else n&&u.suppressErrors(n,"`before` callback of "+e[t].displayName)(s),s.callOriginalMethod(),i&&u.suppressErrors(i,"`after` callback of "+e[t].displayName)(s);return r&&h(),s.returnValue},e[t].__monkeyPatched=!0,e[t].__originalMethod||(e[t].__originalMethod=c),e[t].displayName="patched "+(e[t].displayName||t),h},es.onRemoved=function(e,t){return u.onRemoved(e,t)},es.suppressErrors=function(e,t){return u.suppressErrors(e,t)},es.testJSON=function(e){return u.testJSON(e)},es.getPlugin=function(e){return c.warn("BdApi","getPlugin is deprecated. Please make use of the addon api (BdApi.Plugins)"),Xe.addonList.find(t=>t.name==e)},es.isPluginEnabled=function(e){c.warn("BdApi","isPluginEnabled is deprecated. Please make use of the addon api (BdApi.Plugins)");const t=this.getPlugin(e);return!!t&&Xe.isEnabled(t.id)},es.isThemeEnabled=function(e){c.warn("BdApi","isThemeEnabled is deprecated. Please make use of the addon api (BdApi.Themes)");const t=Ke.addonList.find(t=>t.name==e);return!!t&&Ke.isEnabled(t.id)},es.isSettingEnabled=function(e,t,s){return L.get(e,t,s)},es.enableSetting=function(e,t,s){return L.set(e,t,s,!0)},es.disableSetting=function(e,t,s){return L.set(e,t,s,!1)},es.toggleSetting=function(e,t,s){return L.set(e,t,s,!L.get(e,t,s))},es.getBDData=function(e){return S.getBDData(e)},es.setBDData=function(e,t){return S.setBDData(e,t)};const ts=e=>new class{get folder(){return e.folder}isEnabled(t){return e.isEnabled(t)}enable(t){return e.enableAddon(t)}disable(t){return e.disableAddon(t)}toggle(t){return e.toggleAddon(t)}reload(t){return e.reloadAddon(t)}get(t){return e.addonList.find(e=>e.id==t||e.filename==t)}getAll(){return e.addonList}};es.Plugins=ts(Xe),es.Themes=ts(Ke),Object.freeze(es),Object.freeze(es.Plugins),Object.freeze(es.Themes);var ss=es;s.d(t,"default",(function(){return is})),function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const s=e[t];return"function"==typeof s?s.bind(e):s}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}();const ns=document.createElement("div");ns.className="bd-loaderv2",ns.title="BandagedBD is loading...",document.body.appendChild(ns),window.BdApi=ss,window.pluginModule=Xe,window.themeModule=Ke,window.bdEmotes=Ot.Emotes,window.bemotes=Ot.blacklist,window.settingsModule=L,window.DataStore=S,window.DomManager=D,window.utils=u,window.Components=R,window.BDEvents=y,window.bdConfig=i,window.Strings=N;class is{constructor(e){Qt.setConfig(e)}init(){Qt.init()}}!function(){const e="betterdiscord/",t=s(4),n=t._load;t._load=function(t){if("betterdiscord"===t||t.startsWith(e)){if("api"==t.substr(e.length))return ss}return n.apply(this,arguments)}}()}]).default; \ No newline at end of file diff --git a/src/builtins/builtins.js b/src/builtins/builtins.js index 744bfdcd..b667fe2d 100644 --- a/src/builtins/builtins.js +++ b/src/builtins/builtins.js @@ -15,7 +15,7 @@ export {default as VoiceMode} from "./appearance/voicemode"; export {default as EmoteModule} from "./emotes/emotes"; export {default as EmoteMenu} from "./emotes/emotemenu"; -export {default as EmoteAutocaps} from "./emotes/emoteautocaps"; +// export {default as EmoteAutocaps} from "./emotes/emoteautocaps"; export {default as CopySelector} from "./developer/copyselector"; export {default as Debugger} from "./developer/debugger"; diff --git a/src/builtins/emotes/emoteautocaps.js b/src/builtins/emotes/emoteautocaps.js deleted file mode 100644 index c628d281..00000000 --- a/src/builtins/emotes/emoteautocaps.js +++ /dev/null @@ -1,42 +0,0 @@ -import Builtin from "../../structs/builtin"; - -import {Utilities} from "modules"; - -import EmoteModule from "./emotes"; - -export default new class EmoteAutocaps extends Builtin { - get name() {return "EmoteAutocapitalize";} - get collection() {return "emotes";} - get category() {return "general";} - get id() {return "autoCaps";} - - enabled() { - $("body").off(".bdac"); - $("body").on("keyup.bdac change.bdac paste.bdac", $(".channelTextArea-1LDbYG textarea:first"), () => { - const text = $(".channelTextArea-1LDbYG textarea:first").val(); - if (text == undefined) return; - - const lastWord = text.split(" ").pop(); - if (lastWord.length > 3) { - if (lastWord == "danSgame") return; - const ret = this.capitalize(lastWord.toLowerCase()); - if (ret !== null && ret !== undefined) { - Utilities.insertText(Utilities.getTextArea()[0], text.replace(lastWord, ret)); - } - } - }); - } - - disabled() { - $("body").off(".bdac"); - } - - capitalize(value) { - const res = EmoteModule.getCategory("TwitchGlobal"); - for (const p in res) { - if (res.hasOwnProperty(p) && value == (p + "").toLowerCase()) { - return p; - } - } - } -}; \ No newline at end of file diff --git a/src/builtins/emotes/emotemenu.js b/src/builtins/emotes/emotemenu.js index 90060e58..4c68b1a8 100644 --- a/src/builtins/emotes/emotemenu.js +++ b/src/builtins/emotes/emotemenu.js @@ -1,5 +1,6 @@ import Builtin from "../../structs/builtin"; -import {Utilities, Events} from "modules"; +import {Utilities, Events, DOM} from "modules"; +import Modals from "../../ui/modals"; import EmoteModule from "./emotes"; @@ -31,7 +32,7 @@ const favoritesHTML = `
const makeEmote = (emote, url, options = {}) => { const {onContextMenu, onClick} = options; - const emoteContainer = Utilities.parseHTML(`
+ const emoteContainer = DOM.createElement(`
${emote}
`); if (onContextMenu) emoteContainer.addEventListener("contextmenu", onContextMenu); @@ -51,13 +52,13 @@ export default new class EmoteMenu extends Builtin { super(); this.lastTab = "bd-qem-emojis"; - this.qmeHeader = Utilities.parseHTML(headerHTML); + this.qmeHeader = DOM.createElement(headerHTML); for (const button of this.qmeHeader.getElementsByTagName("button")) button.addEventListener("click", this.switchMenu.bind(this)); - this.teContainer = Utilities.parseHTML(twitchEmoteHTML); + this.teContainer = DOM.createElement(twitchEmoteHTML); this.teContainerInner = this.teContainer.querySelector(".emote-menu-inner"); - this.faContainer = Utilities.parseHTML(favoritesHTML); + this.faContainer = DOM.createElement(favoritesHTML); this.faContainerInner = this.faContainer.querySelector(".emote-menu-inner"); this.observer = new MutationObserver(mutations => {for (const mutation of mutations) this.observe(mutation);}); @@ -67,16 +68,17 @@ export default new class EmoteMenu extends Builtin { } async enabled() { - this.log("Starting to observe"); - this.observer.observe(document.getElementById("app-mount"), { - childList: true, - subtree: true - }); - this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis); - if (this.hideEmojis) this.enableHideEmojis(); - if (EmoteModule.emotesLoaded) this.updateTwitchEmotes(); - this.updateFavorites(); - Events.on("emotes-loaded", this.updateTwitchEmotes); + return Modals.alert("Emote Menu Broken", "Emote Menu is currently broken, it is recommended to disable this until it is fixed."); + // this.log("Starting to observe"); + // this.observer.observe(document.getElementById("app-mount"), { + // childList: true, + // subtree: true + // }); + // this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis); + // if (this.hideEmojis) this.enableHideEmojis(); + // if (EmoteModule.emotesLoaded) this.updateTwitchEmotes(); + // this.updateFavorites(); + // Events.on("emotes-loaded", this.updateTwitchEmotes); } disabled() { diff --git a/src/builtins/general/publicservers.js b/src/builtins/general/publicservers.js index 8aeb7c5c..f3bc36da 100644 --- a/src/builtins/general/publicservers.js +++ b/src/builtins/general/publicservers.js @@ -38,17 +38,5 @@ export default new class PublicServers extends Builtin { label.addEventListener("click", () => {this.openPublicServers();}); btn.append(label); return btn; - - // const btn = $("
", { - // "class": DiscordModules.GuildClasses.listItem, - // "id": "bd-pub-li" - // }).append($("
", { - // "class": "wrapper-25eVIn " + DiscordModules.GuildClasses.circleButtonMask, - // "text": Strings.PublicServers.button, - // "id": "bd-pub-button", - // "click": () => { this.openPublicServers(); } - // })); - - // return btn; } }; \ No newline at end of file diff --git a/src/builtins/windowprefs.js b/src/builtins/windowprefs.js index 97c3ca1d..c828158c 100644 --- a/src/builtins/windowprefs.js +++ b/src/builtins/windowprefs.js @@ -7,11 +7,6 @@ export default new class WindowPrefs extends Builtin { get category() {return "window";} get id() {return "transparency";} - initialize() { - super.initialize(); - this.prefs = DataStore.getData("windowprefs") || {}; - } - enabled() { this.setWindowPreference("transparent", true); this.setWindowPreference("backgroundColor", "#00000000"); @@ -25,6 +20,7 @@ export default new class WindowPrefs extends Builtin { } showModal(info) { + if (!this.initialized) return; Modals.showConfirmationModal(Strings.Modals.additionalInfo, info, { confirmText: Strings.Modals.restartNow, cancelText: Strings.Modals.restartLater, @@ -37,16 +33,19 @@ export default new class WindowPrefs extends Builtin { } getWindowPreference(key) { - return this.prefs[key]; + const prefs = DataStore.getData("windowprefs") || {}; + return prefs[key]; } setWindowPreference(key, value) { - this.prefs[key] = value; - DataStore.setData("windowprefs", this.prefs); + const prefs = DataStore.getData("windowprefs") || {}; + prefs[key] = value; + DataStore.setData("windowprefs", prefs); } deleteWindowPreference(key) { - delete this.prefs[key]; - DataStore.setData("windowprefs", this.prefs); + const prefs = DataStore.getData("windowprefs") || {}; + delete prefs[key]; + DataStore.setData("windowprefs", prefs); } }; \ No newline at end of file diff --git a/src/data/settings/emoteconfig.js b/src/data/settings/emoteconfig.js index 5f5974c0..05d7d7b0 100644 --- a/src/data/settings/emoteconfig.js +++ b/src/data/settings/emoteconfig.js @@ -8,7 +8,6 @@ export default [ {type: "switch", id: "download", value: true}, {type: "switch", id: "emoteMenu", value: true}, {type: "switch", id: "hideEmojiMenu", value: false, enableWith: "emoteMenu"}, - {type: "switch", id: "autoCaps", value: false}, {type: "switch", id: "showNames", value: true}, {type: "switch", id: "modifiers", value: true}, {type: "switch", id: "animateOnHover", value: false} diff --git a/src/modules/core.js b/src/modules/core.js index 49e0db5c..c9b0f7ef 100644 --- a/src/modules/core.js +++ b/src/modules/core.js @@ -43,8 +43,6 @@ Core.prototype.init = async function() { return Modals.alert(Strings.Startup.notSupported, Strings.Startup.incompatibleApp.format({app: "Powercord"})); } - console.log(Config); - const latestLocalVersion = Config.updater ? Config.updater.LatestVersion : Config.latestVersion; if (latestLocalVersion > Config.version) { Modals.showConfirmationModal(Strings.Startup.updateAvailable, Strings.Startup.updateInfo.format({version: latestLocalVersion}), { @@ -66,8 +64,6 @@ Core.prototype.init = async function() { }); } - - Logger.log("Startup", "Initializing Settings"); Settings.initialize(); @@ -93,7 +89,7 @@ Core.prototype.init = async function() { const previousVersion = DataStore.getBDData("version"); if (Config.bbdVersion > previousVersion) { - this.showChangelogModal(Changelog); + Modals.showChangelogModal(Changelog); DataStore.setBDData("version", Config.bbdVersion); } }; diff --git a/src/modules/domtools.js b/src/modules/domtools.js index 352175a9..126ccefa 100644 --- a/src/modules/domtools.js +++ b/src/modules/domtools.js @@ -575,9 +575,9 @@ export default class DOMTools { const [type, namespace] = event.split("."); const hasDelegate = delegate && callback; if (!callback) callback = delegate; - const eventFunc = !hasDelegate ? callback : function(event) { - if (event.target.matches(delegate)) { - callback(event); + const eventFunc = !hasDelegate ? callback : function(ev) { + if (ev.target.matches(delegate)) { + callback(ev); } }; @@ -615,12 +615,12 @@ export default class DOMTools { const [type, namespace] = event.split("."); const hasDelegate = delegate && callback; if (!callback) callback = delegate; - const eventFunc = !hasDelegate ? function(event) { - callback(event); + const eventFunc = !hasDelegate ? function(ev) { + callback(ev); element.removeEventListener(type, eventFunc); - } : function(event) { - if (!event.target.matches(delegate)) return; - callback(event); + } : function(ev) { + if (!ev.target.matches(delegate)) return; + callback(ev); element.removeEventListener(type, eventFunc); }; @@ -689,9 +689,9 @@ export default class DOMTools { const hasDelegate = delegate && callback; if (!callback) callback = delegate; - const eventFunc = !hasDelegate ? callback : function(event) { - if (event.target.matches(delegate)) { - callback(event); + const eventFunc = !hasDelegate ? callback : function(ev) { + if (ev.target.matches(delegate)) { + callback(ev); } }; diff --git a/src/modules/pluginapi.js b/src/modules/pluginapi.js index 68960445..9c3030d8 100644 --- a/src/modules/pluginapi.js +++ b/src/modules/pluginapi.js @@ -1,3 +1,4 @@ +import {Config} from "data"; import Utilities from "./utilities"; import WebpackModules from "./webpackmodules"; import DiscordModules from "./discordmodules"; @@ -13,40 +14,24 @@ import Logger from "./logger"; const BdApi = { get React() { return DiscordModules.React; }, get ReactDOM() { return DiscordModules.ReactDOM; }, - get WindowConfigFile() { - if (this._windowConfigFile) return this._windowConfigFile; - const electron = require("electron").remote.app; - const path = require("path"); - const base = electron.getAppPath(); - const roamingBase = electron.getPath("userData"); - const roamingLocation = path.resolve(roamingBase, electron.getVersion(), "modules", "discord_desktop_core", "injector", "config.json"); - const location = path.resolve(base, "..", "app", "config.json"); - const fs = require("fs"); - const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null; - if (!realLocation) return this._windowConfigFile = null; - return this._windowConfigFile = realLocation; - }, + get WindowConfigFile() {return "";}, get settings() {return Settings.collections;}, - get emotes() {return {};} + get emotes() {return {};}, + get version() {return Config.version;} }; BdApi.getAllWindowPreferences = function() { - if (!this.WindowConfigFile) return {}; - return __non_webpack_require__(this.WindowConfigFile); + return DataStore.getData("windowprefs") || {}; }; BdApi.getWindowPreference = function(key) { - if (!this.WindowConfigFile) return undefined; return this.getAllWindowPreferences()[key]; }; BdApi.setWindowPreference = function(key, value) { - if (!this.WindowConfigFile) return; - const fs = require("fs"); const prefs = this.getAllWindowPreferences(); prefs[key] = value; - delete require.cache[this.WindowConfigFile]; - fs.writeFileSync(this.WindowConfigFile, JSON.stringify(prefs, null, 4)); + return DataStore.setData("windowprefs", prefs); }; //Inject CSS to document head @@ -277,4 +262,8 @@ const makeAddonAPI = (manager) => new class AddonAPI { BdApi.Plugins = makeAddonAPI(PluginManager); BdApi.Themes = makeAddonAPI(ThemeManager); +Object.freeze(BdApi); +Object.freeze(BdApi.Plugins); +Object.freeze(BdApi.Themes); + export default BdApi; \ No newline at end of file diff --git a/src/modules/updater.js b/src/modules/updater.js index 29246a0e..3cc87611 100644 --- a/src/modules/updater.js +++ b/src/modules/updater.js @@ -136,7 +136,7 @@ export default class PluginUpdater { * @returns {HTMLElement} check for update button */ static createUpdateButton() { - const updateButton = DOMTools.parseHTML(``); + const updateButton = DOMTools.createElement(``); updateButton.onclick = function () { window.PluginUpdates.checkAll(); }; @@ -181,7 +181,7 @@ export default class PluginUpdater { if (oldRNM || newRNM || BBDLoader) return; if (!window.PluginUpdates.downloaded) { window.PluginUpdates.downloaded = []; - const button = DOMTools.parseHTML(``); + const button = DOMTools.createElement(``); const tooltip = new EmulatedTooltip(button, window.PluginUpdates.downloaded.join(", "), {side: "top"}); button.addEventListener("click", (e) => { e.preventDefault(); @@ -205,7 +205,7 @@ export default class PluginUpdater { */ static showUpdateNotice(pluginName, updateLink) { if (!document.getElementById("pluginNotice")) { - const noticeElement = DOMTools.parseHTML(`
+ const noticeElement = DOMTools.createElement(`
The following plugins have updates:  
`); @@ -218,7 +218,7 @@ export default class PluginUpdater { } const pluginNoticeID = pluginName + "-notice"; if (document.getElementById(pluginNoticeID)) return; - const pluginNoticeElement = DOMTools.parseHTML(`${pluginName}`); + const pluginNoticeElement = DOMTools.createElement(`${pluginName}`); pluginNoticeElement.addEventListener("click", () => { this.downloadPlugin(pluginName, updateLink); }); diff --git a/src/modules/utilities.js b/src/modules/utilities.js index 25b64255..8b287a5a 100644 --- a/src/modules/utilities.js +++ b/src/modules/utilities.js @@ -1,5 +1,6 @@ import {Config} from "data"; import Logger from "./logger"; +import DOM from "./domtools"; export default class Utilities { @@ -27,7 +28,7 @@ export default class Utilities { } static getTextArea() { - return $(".channelTextArea-1LDbYG textarea"); + return DOM.query(".channelTextArea-1LDbYG textarea"); } static insertText(textarea, text) { diff --git a/src/structs/builtin.js b/src/structs/builtin.js index 24f70757..283a8707 100644 --- a/src/structs/builtin.js +++ b/src/structs/builtin.js @@ -17,6 +17,7 @@ export default class BuiltinModule { if (enabled) this.enable(); else this.disable(); }); + this.initialized = true; } registerSetting(collection, category, id, onEnable, onDisable) { diff --git a/src/structs/psconnection.js b/src/structs/psconnection.js index d1320ccc..286a85e1 100644 --- a/src/structs/psconnection.js +++ b/src/structs/psconnection.js @@ -22,78 +22,66 @@ export default class PublicServersConnection { } static search({term = "", category = "", from = 0} = {}) { + const request = require("request"); return new Promise(resolve => { const queries = []; if (category) queries.push(`category=${category.replace(/ /g, "%20")}`); if (term) queries.push(`term=${term.replace(/ /g, "%20")}`); if (from) queries.push(`from=${from}`); const query = `?${queries.join("&")}`; - $.ajax({ - method: "GET", - url: `${this.endPoint}${query}`, - success: data => { - const next = data.size + data.from; - resolve({ - servers: data.results, - size: data.size, - from: data.from, - total: data.total, - next: next >= data.total ? null : next - }); - }, - error: () => resolve(null) - }); - }); - } - - static join(id, native = false) { - return new Promise(resolve => { - if (native) return InviteActions.acceptInvite(id), resolve(true); - $.ajax({ - method: "GET", - url: `${this.joinEndPoint}/${id}`, - headers: { - "Accept": "application/json;", - "Content-Type": "application/json;" , - "x-discord-token": this._accessToken - }, - crossDomain: true, - xhrFields: { - withCredentials: true - }, - success: () => resolve(true), - error: () => resolve(false) - }); - }); - } - - static checkConnection() { - return new Promise(resolve => { - try { - $.ajax({ - method: "GET", - url: this.connectEndPoint, - headers: { - "Accept": "application/json;", - "Content-Type": "application/json;" - }, - crossDomain: true, - xhrFields: { - withCredentials: true - }, - success: data => { - this._accessToken = data.access_token; - resolve(data); - }, - error: () => resolve(false) + request.get({url: `${this.endPoint}${query}${query ? "&schema=new" : "?schema=new"}`, json: true}, (err, resp, data) => { + if (err) return resolve(null); + const next = data.size + data.from; + resolve({ + servers: data.results, + size: data.size, + from: data.from, + total: data.total, + next: next >= data.total ? null : next }); - } - catch (error) { - resolve(false); - } + }); }); } + static async join(id, native = false) { + if (native) return InviteActions.acceptInvite(id); + try { + await fetch(`${this.joinEndPoint}/${id}`,{ + method: "GET", + credentials: "include", + mode: "cors", + headers: { + "Accept": "application/json", + "Content-Type": "application/json" + } + }); + return true; + } + catch (e) { + return false; + } + } + + static async checkConnection() { + try { + const response = await fetch(`https://auth.discordservers.com/info`,{ + method: "GET", + credentials: "include", + mode: "cors", + headers: { + "Accept": "application/json", + "Content-Type": "application/json" + } + }); + const data = await response.json(); + this._accessToken = data.access_token; + return data; + } + catch (error) { + return false; + } + } + static connect() { return new Promise(resolve => { const joinWindow = new BrowserWindow(this.windowOptions); diff --git a/src/ui/floating/container.jsx b/src/ui/floating/container.jsx index e6f80417..72a90803 100644 --- a/src/ui/floating/container.jsx +++ b/src/ui/floating/container.jsx @@ -1,4 +1,4 @@ -import {React, Utilities, Patcher} from "modules"; +import {React, ReactDOM, DOM, WebpackModules} from "modules"; import FloatingWindow from "./window"; @@ -9,9 +9,15 @@ class FloatingWindowContainer extends React.Component { this.state = {windows: []}; } + get minY() { + const appContainer = DOM.query(`#app-mount > div[class*="app-"`); + if (appContainer) return appContainer.offsetTop; + return 0; + } + render() { return this.state.windows.map(window => - + {window.children} ); @@ -43,11 +49,9 @@ class FloatingWindowContainer extends React.Component { } const containerRef = React.createRef(); -// const container = ; -// const App = Utilities.findInReactTree(Utilities.getReactInstance(document.querySelector(".app-19_DXt")), m => m && m.type && m.type.displayName && m.type.displayName == "App"); -// Patcher.after("FloatingContainer", App.type.prototype, "render", (thisObject, args, returnValue) => { -// const group = Utilities.findInRenderTree(returnValue, m => m && m[6] && m[6].type && m[6].type.displayName == "LayerContainer", {walkable: ["children", "props"]}); -// group.push(container); -// }); -// App.stateNode.forceUpdate(); +const container = ; +const wrapped = React.createElement(WebpackModules.getByProps("AppReferencePositionLayer").AppLayerProvider().props.layerContext.Provider, {value: [document.querySelector("#app-mount > .layerContainer-yqaFcK")]}, container); +const div = DOM.createElement(`
`); +DOM.query("#app-mount").append(div); +ReactDOM.render(wrapped, div); export default containerRef.current; \ No newline at end of file diff --git a/src/ui/floating/window.jsx b/src/ui/floating/window.jsx index 66dfb440..d8dbb6ad 100644 --- a/src/ui/floating/window.jsx +++ b/src/ui/floating/window.jsx @@ -5,6 +5,20 @@ import CloseButton from "../icons/close"; import MaximizeIcon from "../icons/fullscreen"; import Modals from "../modals"; +// const Draggable = WebpackModules.getByDisplayName("Draggable"); +// { +// "dragAnywhere": true, +// "className": "pictureInPictureWindow-1B5qSe", +// "maxX": 1969, +// "maxY": this.maxY, +// "onDragStart": "ƒ () {}", +// "onDrag": "ƒ () {}", +// "onDragEnd": "ƒ () {}", +// "children": "
", +// "initialX": 0, +// "initialY": 0 +// } + export default class FloatingWindow extends React.Component { constructor(props) { @@ -15,6 +29,11 @@ export default class FloatingWindow extends React.Component { this.offX = 0; this.offY = 0; + this.maxX = this.props.maxX || Screen.width; + this.maxY = this.props.maxY || Screen.height; + this.minX = this.props.minX || 0; + this.minY = this.props.minY || 0; + this.titlebar = React.createRef(); this.window = React.createRef(); @@ -33,19 +52,23 @@ export default class FloatingWindow extends React.Component { } onResizeStart() { - this.currentWidth = this.window.current.style.width; - this.currentHeight = this.window.current.style.height; + this.currentWidth = this.window.current.offsetWidth; + this.currentHeight = this.window.current.offsetHeight; } onDragStop() { document.removeEventListener("mousemove", this.onDrag, true); - if (this.props.onResize) { - const width = this.window.current.style.width; - const height = this.window.current.style.height; - if (width != this.currentWidth || height != this.currentHeight) this.props.onResize(); - this.currentWidth = width; - this.currentHeight = height; + const width = this.window.current.offsetWidth; + const height = this.window.current.offsetHeight; + if (width != this.currentWidth || height != this.currentHeight) { + if (this.props.onResize) this.props.onResize(); + const left = parseInt(this.window.current.style.left); + const top = parseInt(this.window.current.style.top); + if (left + width >= this.maxX) this.window.current.style.width = (this.maxX - left) + "px"; + if (top + height >= this.maxY) this.window.current.style.height = (this.maxY - top) + "px"; } + this.currentWidth = width; + this.currentHeight = height; } onDragStart(e) { @@ -57,8 +80,16 @@ export default class FloatingWindow extends React.Component { onDrag(e) { const div = this.window.current; - div.style.top = (e.clientY - this.offY) + "px"; - div.style.left = (e.clientX - this.offX) + "px"; + let newTop = (e.clientY - this.offY); + if (newTop <= this.minY) newTop = this.minY; + if (newTop + this.currentHeight >= this.maxY) newTop = this.maxY - this.currentHeight; + + let newLeft = (e.clientX - this.offX); + if (newLeft <= this.minX) newLeft = this.minX; + if (newLeft + this.currentWidth >= this.maxX) newLeft = this.maxX - this.currentWidth; + + div.style.top = newTop + "px"; + div.style.left = newLeft + "px"; } componentWillUnmount() { @@ -104,9 +135,18 @@ export default class FloatingWindow extends React.Component { maximize() { this.window.current.style.width = "100%"; this.window.current.style.height = "100%"; - this.window.current.style.top = "20px"; - this.window.current.style.left = "0px"; if (this.props.onResize) this.props.onResize(); + + const width = this.window.current.offsetWidth; + const height = this.window.current.offsetHeight; + const left = parseInt(this.window.current.style.left); + const top = parseInt(this.window.current.style.top); + + const right = left + width; + const bottom = top + height; + + if (bottom > this.maxY) this.window.current.style.top = (this.maxY - height) + "px"; + if (right > this.maxX) this.window.current.style.left = (this.maxX - width) + "px"; } confirmClose() { diff --git a/src/ui/modals.js b/src/ui/modals.js index 1b2cff15..36b89e9a 100644 --- a/src/ui/modals.js +++ b/src/ui/modals.js @@ -1,5 +1,5 @@ import {Config} from "data"; -import {Logger, WebpackModules, Utilities, React, Settings, Strings, DOM, DiscordModules} from "modules"; +import {Logger, WebpackModules, React, Settings, Strings, DOM, DiscordModules} from "modules"; import FormattableString from "../structs/string"; export default class Modals { @@ -13,7 +13,7 @@ export default class Modals { static get Markdown() {return WebpackModules.findByDisplayName("Markdown");} static default(title, content) { - const modal = Utilities.parseHTML(`
+ const modal = DOM.createElement(`
`); modal.querySelector(".footer button").addEventListener("click", () => { - modal.addClass("closing"); + modal.classList.add("closing"); setTimeout(() => { modal.remove(); }, 300); }); modal.querySelector(".bd-backdrop").addEventListener("click", () => { - modal.addClass("closing"); + modal.classList.add("closing"); setTimeout(() => { modal.remove(); }, 300); }); document.querySelector("#app-mount").append(modal); @@ -88,7 +88,7 @@ export default class Modals { static showAddonErrors({plugins: pluginErrors = [], themes: themeErrors = []}) { if (!pluginErrors || !themeErrors || !this.shouldShowAddonErrors) return; if (!pluginErrors.length && !themeErrors.length) return; - const modal = $(`
+ const modal = DOM.createElement(`