From 29888289c8339a3aa55547c6f9cd6fdeb8678f1c Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Aug 2026 03:54:45 +0000 Subject: [PATCH] chore(release): bump Calls SDK to 5.0.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - sample apps (react, vue, svelte, angular, ionic): @cometchat/calls-sdk-javascript ^5.0.3 -> ^5.0.4, package-lock.json regenerated (resolved + integrity now 5.0.4) - package/: refreshed dist from the published 5.0.4 tarball (index.es.js, index.umd.js, index.d.ts, index.css byte-identical to npm) and package.json 5.0.3 -> 5.0.4 The 5.0.4 API changes are additive/backward-compatible (new CallLog fields getStartedAt/getMode, pagination getters, streaming-related call settings, and an optional boolean param added to SessionMethodsCore.muteAudio()) — no sample app code changes were required. All five sample apps verified building clean against 5.0.4 (react, ionic, svelte, vue, angular). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Ct963RDkHLvdcMMD63Q4qF --- package/index.css | 2 +- package/index.d.ts | 107 +- package/index.es.js | 23283 ++++++++-------- package/index.umd.js | 184 +- package/package.json | 2 +- .../package-lock.json | 8 +- .../package.json | 2 +- .../package-lock.json | 8 +- .../package.json | 2 +- .../package-lock.json | 8 +- .../package.json | 2 +- .../package-lock.json | 8 +- .../package.json | 2 +- .../package-lock.json | 8 +- .../package.json | 2 +- 15 files changed, 12029 insertions(+), 11599 deletions(-) diff --git a/package/index.css b/package/index.css index f15309f..ad12f7b 100644 --- a/package/index.css +++ b/package/index.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css2?family=Roboto&display=swap";:root{--cometchat-calls-spacing: 2px;--cometchat-calls-spacing-1: 4px;--cometchat-calls-spacing-2: 8px;--cometchat-calls-spacing-3: 12px;--cometchat-calls-spacing-4: 16px;--cometchat-calls-spacing-5: 20px;--cometchat-calls-spacing-6: 24px;--cometchat-calls-spacing-7: 28px;--cometchat-calls-spacing-8: 32px;--cometchat-calls-spacing-9: 36px;--cometchat-calls-spacing-10: 40px;--cometchat-calls-spacing-11: 44px;--cometchat-calls-spacing-12: 48px;--cometchat-calls-spacing-13: 52px;--cometchat-calls-spacing-14: 56px;--cometchat-calls-spacing-15: 60px;--cometchat-calls-spacing-16: 64px;--cometchat-calls-spacing-17: 68px;--cometchat-calls-spacing-18: 72px;--cometchat-calls-spacing-19: 76px;--cometchat-calls-spacing-20: 80px;--cometchat-calls-spacing-max: 1000px;--cometchat-calls-padding: var(--cometchat-calls-spacing);--cometchat-calls-padding-1: var(--cometchat-calls-spacing-1);--cometchat-calls-padding-2: var(--cometchat-calls-spacing-2);--cometchat-calls-padding-3: var(--cometchat-calls-spacing-3);--cometchat-calls-padding-4: var(--cometchat-calls-spacing-4);--cometchat-calls-padding-5: var(--cometchat-calls-spacing-5);--cometchat-calls-padding-6: var(--cometchat-calls-spacing-6);--cometchat-calls-padding-7: var(--cometchat-calls-spacing-7);--cometchat-calls-padding-8: var(--cometchat-calls-spacing-8);--cometchat-calls-padding-9: var(--cometchat-calls-spacing-9);--cometchat-calls-padding-10: var(--cometchat-calls-spacing-10);--cometchat-calls-margin: var(--cometchat-calls-spacing);--cometchat-calls-margin-1: var(--cometchat-calls-spacing-1);--cometchat-calls-margin-2: var(--cometchat-calls-spacing-2);--cometchat-calls-margin-3: var(--cometchat-calls-spacing-3);--cometchat-calls-margin-4: var(--cometchat-calls-spacing-4);--cometchat-calls-margin-5: var(--cometchat-calls-spacing-5);--cometchat-calls-margin-6: var(--cometchat-calls-spacing-6);--cometchat-calls-margin-7: var(--cometchat-calls-spacing-7);--cometchat-calls-margin-8: var(--cometchat-calls-spacing-8);--cometchat-calls-margin-9: var(--cometchat-calls-spacing-9);--cometchat-calls-margin-10: var(--cometchat-calls-spacing-10);--cometchat-calls-margin-11: var(--cometchat-calls-spacing-11);--cometchat-calls-margin-12: var(--cometchat-calls-spacing-12);--cometchat-calls-margin-13: var(--cometchat-calls-spacing-13);--cometchat-calls-margin-14: var(--cometchat-calls-spacing-14);--cometchat-calls-margin-15: var(--cometchat-calls-spacing-15);--cometchat-calls-margin-16: var(--cometchat-calls-spacing-16);--cometchat-calls-margin-17: var(--cometchat-calls-spacing-17);--cometchat-calls-margin-18: var(--cometchat-calls-spacing-18);--cometchat-calls-margin-19: var(--cometchat-calls-spacing-19);--cometchat-calls-margin-20: var(--cometchat-calls-spacing-20);--cometchat-calls-radius: var(--cometchat-calls-spacing);--cometchat-calls-radius-1: var(--cometchat-calls-spacing-1);--cometchat-calls-radius-2: var(--cometchat-calls-spacing-2);--cometchat-calls-radius-3: var(--cometchat-calls-spacing-3);--cometchat-calls-radius-4: var(--cometchat-calls-spacing-4);--cometchat-calls-radius-5: var(--cometchat-calls-spacing-5);--cometchat-calls-radius-6: var(--cometchat-calls-spacing-6);--cometchat-calls-radius-max: var(--cometchat-calls-spacing-max);--cometchat-calls-font-family: "Roboto", "Inter";--cometchat-calls-font-title-bold: 700 32px/38.4px var(--cometchat-calls-font-family);--cometchat-calls-font-title-medium: 500 32px/38.4px var(--cometchat-calls-font-family);--cometchat-calls-font-title-regular: 400 32px/38.4px var(--cometchat-calls-font-family);--cometchat-calls-font-heading1-bold: 700 24px/28.8px var(--cometchat-calls-font-family);--cometchat-calls-font-heading1-medium: 500 24px/28.8px var(--cometchat-calls-font-family);--cometchat-calls-font-heading1-regular: 400 24px/28.8px var(--cometchat-calls-font-family);--cometchat-calls-font-heading2-bold: 700 20px/24px var(--cometchat-calls-font-family);--cometchat-calls-font-heading2-medium: 500 20px/24px var(--cometchat-calls-font-family);--cometchat-calls-font-heading2-regular: 400 20px/24px var(--cometchat-calls-font-family);--cometchat-calls-font-heading3-bold: 700 18px/21.6px var(--cometchat-calls-font-family);--cometchat-calls-font-heading3-medium: 500 18px/21.6px var(--cometchat-calls-font-family);--cometchat-calls-font-heading3-regular: 400 18px/21.6px var(--cometchat-calls-font-family);--cometchat-calls-font-heading4-bold: 700 16px/19.2px var(--cometchat-calls-font-family);--cometchat-calls-font-heading4-medium: 500 16px/19.2px var(--cometchat-calls-font-family);--cometchat-calls-font-heading4-regular: 400 16px/19.2px var(--cometchat-calls-font-family);--cometchat-calls-font-body-bold: 700 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-body-medium: 500 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-body-regular: 400 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-caption1-bold: 700 12px/14.4px var(--cometchat-calls-font-family);--cometchat-calls-font-caption1-medium: 500 12px/14.4px var(--cometchat-calls-font-family);--cometchat-calls-font-caption1-regular: 400 12px/14.4px var(--cometchat-calls-font-family);--cometchat-calls-font-caption2-bold: 700 10px/12px var(--cometchat-calls-font-family);--cometchat-calls-font-caption2-medium: 500 10px/12px var(--cometchat-calls-font-family);--cometchat-calls-font-caption2-regular: 400 10px/12px var(--cometchat-calls-font-family);--cometchat-calls-font-button-bold: 700 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-button-medium: 500 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-button-regular: 400 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-link: 400 14px/19.6px var(--cometchat-calls-font-family);--cometchat-calls-primary-color: #6852d6;--cometchat-calls-extended-primary-color-50: #15102b;--cometchat-calls-extended-primary-color-100: #1d173c;--cometchat-calls-extended-primary-color-200: #251e4d;--cometchat-calls-extended-primary-color-300: #2e245e;--cometchat-calls-extended-primary-color-400: #362b6f;--cometchat-calls-extended-primary-color-500: #3e3180;--cometchat-calls-extended-primary-color-600: #473892;--cometchat-calls-extended-primary-color-700: #4f3ea3;--cometchat-calls-extended-primary-color-800: #5745b4;--cometchat-calls-extended-primary-color-900: #7460d9;--cometchat-calls-neutral-color-50: #141414;--cometchat-calls-neutral-color-100: #1a1a1a;--cometchat-calls-neutral-color-200: #272727;--cometchat-calls-neutral-color-300: #383838;--cometchat-calls-neutral-color-400: #4c4c4c;--cometchat-calls-neutral-color-500: #858585;--cometchat-calls-neutral-color-600: #989898;--cometchat-calls-neutral-color-700: #a8a8a8;--cometchat-calls-neutral-color-800: #c8c8c8;--cometchat-calls-neutral-color-900: #ffffff;--cometchat-calls-success-background-color: #ceecdf;--cometchat-calls-warning-background-color: #fff5cf;--cometchat-calls-error-background-color: #f4d8d8;--cometchat-calls-permission-error-color: #ff977d;--cometchat-calls-permission-error-background: #391716;--cometchat-calls-info-color: #0d66bf;--cometchat-calls-warning-color: #d08d04;--cometchat-calls-success-color: #0b9f5d;--cometchat-calls-message-seen-color: #56e8a7;--cometchat-calls-error-color: #c73c3e;--cometchat-calls-call-control-active-background: #f4cccc;--cometchat-calls-static-black: #141414;--cometchat-calls-static-white: #ffffff;--cometchat-calls-background-color-01: var( --cometchat-calls-neutral-color-50 );--cometchat-calls-background-color-02: var( --cometchat-calls-neutral-color-100 );--cometchat-calls-background-color-03: var( --cometchat-calls-neutral-color-200 );--cometchat-calls-background-color-04: var( --cometchat-calls-neutral-color-300 );--cometchat-calls-border-color-light: var( --cometchat-calls-neutral-color-200 );--cometchat-calls-border-color-default: var( --cometchat-calls-neutral-color-300 );--cometchat-calls-border-color-dark: var(--cometchat-calls-neutral-color-400);--cometchat-calls-border-color-highlight: var( --cometchat-calls-primary-color );--cometchat-calls-text-color-primary: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-text-color-secondary: var( --cometchat-calls-neutral-color-600 );--cometchat-calls-text-color-tertiary: var( --cometchat-calls-neutral-color-500 );--cometchat-calls-text-color-disabled: var( --cometchat-calls-neutral-color-400 );--cometchat-calls-text-color-white: var(--cometchat-calls-neutral-color-50);--cometchat-calls-text-color-highlight: var(--cometchat-calls-primary-color);--cometchat-calls-icon-color-primary: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-icon-color-secondary: var( --cometchat-calls-neutral-color-500 );--cometchat-calls-icon-color-tertiary: var( --cometchat-calls-neutral-color-400 );--cometchat-calls-icon-color-white: var(--cometchat-calls-neutral-color-50);--cometchat-calls-icon-color-highlight: var(--cometchat-calls-primary-color);--cometchat-calls-shimmer-background-color: var( --cometchat-calls-background-color-01 );--cometchat-calls-shimmer-gradient-color: linear-gradient( 90deg, #383838 0%, #272727 100% );--cometchat-calls-primary-button-background: var( --cometchat-calls-primary-color );--cometchat-calls-primary-button-text: var(--cometchat-calls-static-white);--cometchat-calls-primary-button-icon: var(--cometchat-calls-static-white);--cometchat-calls-secondary-button-background: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-secondary-button-text: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-secondary-button-icon: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-link-button: var(--cometchat-calls-info-color);--cometchat-calls-fab-button-background: var(--cometchat-calls-primary-color);--cometchat-calls-fab-button-icon: var(--cometchat-calls-static-white);--cometchat-calls-white-hover: var(--cometchat-calls-neutral-color-100);--cometchat-calls-white-pressed: var(--cometchat-calls-neutral-color-300);--cometchat-calls-participants-list-width: 360px;--cometchat-calls-call-header-height: 56px;--cometchat-calls-call-footer-height: 88px}.cometchat-calls-call-stage-wrapper{flex:1;display:flex;flex-direction:column;min-height:0;position:relative;overflow:hidden;padding:0 var(--cometchat-calls-padding-4)}.cometchat-calls-call-screen-content-wrapper{--transition-duration: .3s;--transition-easing: cubic-bezier(.4, 0, .2, 1);height:100%;width:100%;background-color:var(--cometchat-calls-neutral-color-100);position:relative;display:flex;overflow:hidden}.cometchat-calls-call-screen-container{width:100%;height:100%}.cometchat-calls-call-screen-main-content{width:100%;transition:width var(--transition-duration) var(--transition-easing);background:var(--cometchat-calls-background-color-01);position:relative;will-change:width}.cometchat-calls-call-screen-content-wrapper:not(.cometchat-calls-call-screen--spotlight-mode) .cometchat-calls-call-stage-wrapper>div{height:100%!important;width:100%!important}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--spotlight-mode .cometchat-calls-call-screen-main-content{padding:0!important}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--spotlight-mode .cometchat-calls-call-stage-wrapper{position:relative;overflow:hidden;background:var(--cometchat-calls-background-color-01);padding:0 var(--cometchat-calls-padding-5);border-radius:var(--cometchat-calls-radius-2)}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--sidebar-mode .cometchat-calls-call-stage-wrapper{padding:0 var(--cometchat-calls-padding-5);overflow:visible;z-index:1}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--spotlight-mode .cometchat-calls-header-container{position:relative;z-index:1001;background:var(--cometchat-calls-background-color-01);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--spotlight-mode .cometchat-calls-control-pane{position:relative;z-index:100;background:var(--cometchat-calls-background-color-01)}.cometchat-calls-call-screen-sidebar-panel{width:300px;height:100%;background:var(--cometchat-calls-background-color-01);border-left:1px solid var(--cometchat-calls-border-color-light);display:flex;flex-direction:column;flex-shrink:0;position:relative;z-index:50}@media (max-width: 768px){.cometchat-calls-call-screen-sidebar-panel{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:1000;border:none;transform:translate(100%);transition:transform .3s ease}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--sidebar-mode .cometchat-calls-call-screen-sidebar-panel{transform:translate(0)}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--sidebar-mode .cometchat-calls-call-screen-main-content{display:none}}@media (max-width: 679px){.cometchat-calls-tile-grid-container .cometchat-calls-tile-label{min-height:20px;height:20px}.cometchat-calls-tile-grid-container .cometchat-calls-tile-label-name{font:var(--cometchat-calls-font-caption1-regular)}.cometchat-calls-tile-grid-container .cometchat-calls-tile-label svg{height:12px;width:12px}}.cometchat-calls-avatar-wrapper{overflow:hidden;width:100%;height:100%;display:flex;align-items:center;justify-content:center;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-extended-primary-color-500);container-type:inline-size}.cometchat-calls-avatar-image{width:100%;height:100%;object-fit:cover}.cometchat-calls-avatar-fallback{width:100%;height:100%;color:var(--cometchat-calls-static-white);font-size:min(30cqi,48px);font-weight:700;display:flex;align-items:center;justify-content:center;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-extended-primary-color-500);-webkit-user-select:none;user-select:none;font-family:Roboto,sans-serif}.cometchat-calls-frame-rate-indicator{position:absolute;top:4px;left:4px;font-size:9px;font-family:monospace;color:#ffffff80;background:#0000004d;padding:1px 4px;border-radius:3px;pointer-events:none;line-height:1.2}.cometchat-calls-more-option-container{position:relative;display:inline-block}.cometchat-calls-more-option-button{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);cursor:pointer;transition:all .2s ease;padding:0;margin:0}.cometchat-calls-more-option-button:hover{background:var(--cometchat-calls-background-color-04);transform:scale(1.1)}.cometchat-calls-more-option-button--active{background:var(--cometchat-calls-background-color-04)}.cometchat-calls-more-option-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:transparent;z-index:9999}.cometchat-calls-more-option-menu{position:absolute;top:calc(100% + 8px);right:0;background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-light);border-radius:var(--cometchat-calls-radius-3);box-shadow:0 8px 24px #0006;z-index:10000;min-width:152px;overflow:hidden;animation:cometchat-calls-menu-fade-in-below .2s ease-out;opacity:1;visibility:visible;min-height:40px;width:152px;cursor:pointer;box-sizing:border-box}.cometchat-calls-more-option-menu--above{top:auto;bottom:calc(100% + 8px);animation:cometchat-calls-menu-fade-in-above .2s ease-out}@keyframes cometchat-calls-menu-fade-in-below{0%{opacity:0;transform:scale(.95) translateY(-10px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes cometchat-calls-menu-fade-in-above{0%{opacity:0;transform:scale(.95) translateY(10px)}to{opacity:1;transform:scale(1) translateY(0)}}.cometchat-calls-more-option-menu__item{display:flex;align-items:center;width:100%;border:none;background:transparent;text-align:left;cursor:pointer;transition:background-color .2s ease;gap:var(--cometchat-calls-spacing-2);min-height:28px;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-4);box-sizing:border-box;height:48px}.cometchat-calls-more-option-menu__item:hover{background:#ffffff1a}.cometchat-calls-more-option-menu__item--selected{opacity:.6;cursor:not-allowed}.cometchat-calls-more-option-menu__item--selected:hover{background:transparent}.cometchat-calls-more-option-menu__item-text{flex:1;font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-primary)}.cometchat-calls-more-option-button .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-more-option-button--active .cometchat-calls-icon,.cometchat-calls-tile-container .cometchat-calls-more-option-button .cometchat-calls-icon{color:var(--cometchat-calls-primary-button-icon)}.cometchat-calls-more-option-menu__item .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-wave-container{height:16px;display:flex;align-items:center;justify-content:center;gap:3px;--wave-scale: 100%}.cometchat-calls-wave-rect{width:3px;height:4px;background-color:#09c26f;border-radius:1px;transition:transform .2s ease-out}.cometchat-calls-tile-label{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:var(--cometchat-calls-padding-1) var(--cometchat-calls-padding-2);position:absolute;left:var(--cometchat-calls-spacing-2);bottom:var(--cometchat-calls-spacing-2);background:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-1);gap:var(--cometchat-calls-spacing-1);min-height:24px;min-width:75px;z-index:100;max-width:calc(100% - var(--cometchat-calls-spacing-4));box-sizing:border-box}.cometchat-calls-tile-label--raised-hand{background:var(--cometchat-calls-static-white);border-radius:var(--cometchat-calls-radius-max);box-shadow:0 4px 10px #0003;align-items:center;gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-tile-label-name{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-static-white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cometchat-calls-tile-label-name--raised-hand{color:var(--cometchat-calls-static-black)}@keyframes cometchat-calls-shake-hand{0%,to{transform:rotate(0)}10%{transform:rotate(-10deg)}20%{transform:rotate(10deg)}30%{transform:rotate(-8deg)}40%{transform:rotate(8deg)}50%{transform:rotate(-6deg)}60%{transform:rotate(6deg)}70%{transform:rotate(-4deg)}80%{transform:rotate(4deg)}90%{transform:rotate(-2deg)}}.cometchat-calls-tile-label--raised-hand svg{animation:cometchat-calls-shake-hand 1s ease-in-out;transform-origin:bottom center}.cometchat-calls-tile-label .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-tile-label--raised-hand .cometchat-calls-icon{color:var(--cometchat-calls-static-black)}.cometchat-calls-video{height:100%;width:100%;object-fit:cover;position:absolute;top:0;left:0;right:0;bottom:0}.cometchat-calls-video--fade-in{opacity:0;animation:cometchat-calls-video-fade-in .3s ease forwards}@keyframes cometchat-calls-video-fade-in{0%{opacity:0}to{opacity:1}}.cometchat-calls-video--fade-out{opacity:1;animation:cometchat-calls-videoTrackFadeOut .3s ease forwards}@keyframes cometchat-calls-videoTrackFadeOut{0%{opacity:1}to{opacity:0}}.cometchat-calls-video--mirrored{transform:scaleX(-1)}.cometchat-calls-tile-container{width:100%;height:100%;background-color:var(--cometchat-calls-neutral-color-200);position:relative;display:flex;align-items:center;justify-content:center;border-radius:8px;container-type:size;transition:border .3s ease,box-shadow .3s ease}.cometchat-calls-tile-content{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;overflow:hidden;display:flex;align-items:center;justify-content:center}@container (aspect-ratio > 16/9){.cometchat-calls-tile-content{inset:0 auto;width:calc(100cqh * 16 / 9);height:100%;border-radius:0}}@container (aspect-ratio < 9/16){.cometchat-calls-tile-content{inset:auto 0;width:100%;height:calc(100cqw * 16 / 9);border-radius:0}}.cometchat-calls-tile-container--speaking{border:3px solid var(--cometchat-calls-primary-color);box-shadow:0 0 12px #6852d666}.cometchat-calls-tile-container .cometchat-calls-more-option-container{position:absolute;top:6px;right:6px;z-index:1000;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease}.cometchat-calls-tile-container:hover .cometchat-calls-more-option-container{opacity:1;visibility:visible}.cometchat-calls-tile-avatar-container{width:30%;min-width:40px;min-height:40px;max-width:150px;max-height:150px;flex-shrink:0;display:flex;align-items:center;justify-content:center;aspect-ratio:1}.cometchat-calls-tile-container .cometchat-calls-more-option-overlay{position:initial;z-index:1}.cometchat-calls-tile-video--contain{object-fit:contain}.cometchat-calls-sidebar-layout-container{width:100%;height:100%;display:flex;flex-direction:column}.cometchat-calls-sidebar-layout-container--landscape{flex-direction:row}.cometchat-calls-sidebar-layout-container--has-sidebar{gap:8px}.cometchat-calls-sidebar-layout-main-tile{flex:1;min-width:0;min-height:0}.cometchat-calls-sidebar-layout-sidebar{position:relative;display:flex;flex-direction:row;align-items:center;overflow:visible}.cometchat-calls-sidebar-layout-container--landscape .cometchat-calls-sidebar-layout-sidebar{flex-direction:column}.cometchat-calls-sidebar-layout-grid{display:grid;flex:1;gap:8px}.cometchat-calls-pagination-btn{position:absolute;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid rgba(255,255,255,.1);border-radius:var(--cometchat-calls-radius-max);background:#1414144d;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);cursor:pointer;z-index:200;transition:background .2s ease,border-color .2s ease,transform .15s ease,box-shadow .2s ease;padding:0;box-shadow:0 2px 10px #00000040}.cometchat-calls-pagination-btn:hover{background:#14141480;border-color:#ffffff2e;transform:scale(1.08);box-shadow:0 4px 14px #00000059}.cometchat-calls-pagination-btn:active{background:#14141499;transform:scale(.96);box-shadow:0 1px 4px #0000004d}.cometchat-calls-pagination-btn--up,.cometchat-calls-pagination-btn--down{left:50%;transform:translate(-50%)}.cometchat-calls-pagination-btn--up{top:0}.cometchat-calls-pagination-btn--down{bottom:0}.cometchat-calls-pagination-btn--up:hover,.cometchat-calls-pagination-btn--down:hover{transform:translate(-50%) scale(1.08)}.cometchat-calls-pagination-btn--up:active,.cometchat-calls-pagination-btn--down:active{transform:translate(-50%) scale(.96)}.cometchat-calls-pagination-btn--left,.cometchat-calls-pagination-btn--right{top:50%;transform:translateY(-50%)}.cometchat-calls-pagination-btn--left{left:0}.cometchat-calls-pagination-btn--right{right:0}.cometchat-calls-pagination-btn--left:hover,.cometchat-calls-pagination-btn--right:hover{transform:translateY(-50%) scale(1.08)}.cometchat-calls-pagination-btn--left:active,.cometchat-calls-pagination-btn--right:active{transform:translateY(-50%) scale(.96)}.cometchat-calls-pagination-dots{position:absolute;bottom:-15px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:var(--cometchat-calls-spacing-1);z-index:200;padding:var(--cometchat-calls-spacing-1) var(--cometchat-calls-spacing-2);background:none;border:none;box-shadow:none}.cometchat-calls-pagination-dots--landscape{flex-direction:column;bottom:auto;left:auto;right:-16px;top:50%;transform:translateY(-50%);padding:var(--cometchat-calls-spacing-2) var(--cometchat-calls-spacing-1)}.cometchat-calls-pagination-dot{width:5px;height:5px;border:none;padding:0;border-radius:var(--cometchat-calls-radius-max);background:#fff;opacity:.35;transition:opacity .25s ease,transform .25s ease}.cometchat-calls-pagination-dot--active{opacity:.8;transform:scale(1.25)}.cometchat-calls-pagination-btn .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-primary)}.cometchat-calls-loading-spinner{animation:cometchat-calls-spin 1s linear infinite}@keyframes cometchat-calls-spin{to{transform:rotate(360deg)}}.cometchat-calls-processing-overlay{position:absolute;top:0;left:0;bottom:0;right:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:#000c;gap:16px}.cometchat-calls-processing-message{font:var(--cometchat-calls-font-heading4-regular);color:var(--cometchat-calls-icon-color-primary);text-align:center;margin-left:16px;margin-right:16px}.cometchat-calls-processing-message.cometchat-calls-description{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary)}.cometchat-calls-draggable-tile{border-radius:var(--cometchat-calls-radius-2);overflow:hidden;box-shadow:0 8px 32px #0000004d;border:2px solid var(--cometchat-calls-border-color-default);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);user-select:none;transition:none;box-sizing:border-box;touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none}body.cometchat-calls-dragging{overflow:hidden;position:fixed;width:100%;touch-action:none}.cometchat-calls-draggable-tile.cometchat-calls-draggable-tile--dragging{box-shadow:0 16px 48px #0006;transform:scale(1.02)}.cometchat-calls-draggable-tile-content{width:100%;height:100%;pointer-events:none;overflow:hidden}.cometchat-calls-draggable-tile-resize-handle{position:absolute;opacity:0;transition:opacity .2s ease;z-index:10;border-radius:50%;width:16px;height:16px}.cometchat-calls-draggable-tile:hover .cometchat-calls-draggable-tile-resize-handle{opacity:1}.cometchat-calls-draggable-tile-resize-handle--bottom-right{bottom:-6px;right:-6px;cursor:nw-resize}.cometchat-calls-draggable-tile-resize-handle--bottom-left{bottom:-6px;left:-6px;cursor:ne-resize}.cometchat-calls-draggable-tile-resize-handle--top-right{top:-6px;right:-6px;cursor:sw-resize}.cometchat-calls-draggable-tile-resize-handle--top-left{top:-6px;left:-6px;cursor:se-resize}@media (max-width: 768px){.cometchat-calls-draggable-tile-resize-handle{width:20px;height:20px}.cometchat-calls-draggable-tile-resize-handle--bottom-right{bottom:-8px;right:-8px}.cometchat-calls-draggable-tile-resize-handle--bottom-left{bottom:-8px;left:-8px}.cometchat-calls-draggable-tile-resize-handle--top-right{top:-8px;right:-8px}.cometchat-calls-draggable-tile-resize-handle--top-left{top:-8px;left:-8px}}.cometchat-calls-spotlight-container .cometchat-calls-draggable-tile .cometchat-calls-tile-label{height:16px;width:16px;min-width:75px}.cometchat-calls-draggable-tile.cometchat-calls-draggable-tile--dragging *{-webkit-user-select:none;user-select:none;pointer-events:none}.cometchat-calls-draggable-tile.cometchat-calls-draggable-tile--animating{transition-property:left,top;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.cometchat-calls-draggable-tile:hover .cometchat-calls-draggable-tile-resize-handle:after{opacity:1}.cometchat-calls-spotlight-container{position:relative;width:100%;height:100%;background:var(--cometchat-calls-neutral-color-100);overflow:hidden;border-radius:inherit}.cometchat-calls-spotlight-main-view{width:100%;height:100%;position:relative}.cometchat-calls-spotlight-main-view .cometchat-calls-call-screen{width:100%;height:100%;border-radius:0}.cometchat-calls-draggable-tile .cometchat-calls-tile-avatar-container{display:flex;align-items:center;justify-content:center;height:60px;width:60px}.cometchat-calls-draggable-tile .cometchat-calls-tile-avatar-container .cometchat-calls-avatar-fallback{font:var(--cometchat-calls-font-heading1-bold);color:var(--cometchat-calls-static-white)}.cometchat-calls-spotlight-main-view .cometchat-calls-video{width:100%;height:100%}.cometchat-calls-spotlight-container .cometchat-calls-draggable-tile{position:absolute;z-index:1000;max-width:calc(100% - 40px);max-height:calc(100% - 40px)}.cometchat-calls-draggable-tile .cometchat-calls-tile-label{box-sizing:border-box;min-width:60px}.cometchat-calls-draggable-tile .cometchat-calls-tile-label-name{font:var(--cometchat-calls-font-caption1-regular)}.cometchat-calls-draggable-tile .cometchat-calls-tile-label svg{height:12px;width:12px}@media (max-width: 679px){.cometchat-calls-spotlight-container .cometchat-calls-tile-label{min-height:10px;height:10px;min-width:60px}.cometchat-calls-spotlight-container .cometchat-calls-tile-label-name{font:var(--cometchat-calls-font-caption2-regular)}.cometchat-calls-spotlight-container .cometchat-calls-tile-label svg{height:12px;width:12px}}.cometchat-calls-confirmation-dialog-backdrop{position:absolute;top:0;left:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;background-color:#000c;z-index:1000}.cometchat-calls-confirmation-dialog{max-width:372px;width:90%;background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-5);box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;padding:var(--cometchat-calls-padding-8) var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-5);box-sizing:border-box}.cometchat-calls-confirmation-dialog-content{display:flex;flex-direction:column;align-items:center;gap:var(--cometchat-calls-spacing-5)}.cometchat-calls-confirmation-dialog-text{display:flex;flex-direction:column;align-items:flex-start;gap:var(--cometchat-calls-spacing-2);width:100%}.cometchat-calls-confirmation-dialog-title{font:var(--cometchat-calls-font-heading2-medium);color:var(--cometchat-calls-text-color-primary);text-align:center;margin:0;width:100%}.cometchat-calls-confirmation-dialog-description{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary);text-align:center;margin:0;width:100%;line-height:1.2}.cometchat-calls-confirmation-dialog-buttons{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-3);width:100%}.cometchat-calls-confirmation-dialog-button{display:flex;height:40px;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);justify-content:center;align-items:center;border-radius:var(--cometchat-calls-radius-2);font:var(--cometchat-calls-font-button-medium);cursor:pointer;border:none;flex:1;transition:all .2s ease}.cometchat-calls-confirmation-dialog-button-secondary{background:transparent;border:1px solid var(--cometchat-calls-border-color-dark);color:var(--cometchat-calls-text-color-primary)}.cometchat-calls-confirmation-dialog-button-secondary:hover{background:var(--cometchat-calls-white-hover)}.cometchat-calls-confirmation-dialog-button-secondary:active{background:var(--cometchat-calls-white-pressed)}.cometchat-calls-confirmation-dialog-button-primary{background:var(--cometchat-calls-primary-button-background);color:var(--cometchat-calls-primary-button-text)}.cometchat-calls-confirmation-dialog-button-primary:hover{background:var(--cometchat-calls-extended-primary-color-700)}.cometchat-calls-confirmation-dialog-button-primary:active{background:var(--cometchat-calls-extended-primary-color-800)}@media (max-width: 480px){.cometchat-calls-confirmation-dialog{max-width:340px;padding:var(--cometchat-calls-padding-6) var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-4)}.cometchat-calls-confirmation-dialog-buttons{flex-direction:column;gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-confirmation-dialog-button{width:100%}}.cometchat-calls-more-menu-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1049;background:transparent}.cometchat-calls-more-menu-container{position:fixed;background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-light);border-radius:var(--cometchat-calls-radius-2);box-shadow:0 var(--cometchat-calls-spacing-1) var(--cometchat-calls-spacing-3) #00000026,0 var(--cometchat-calls-spacing) var(--cometchat-calls-spacing-2) #0000001a;padding:var(--cometchat-calls-padding-1) 0;z-index:1050;min-width:200px;max-width:280px;width:fit-content;max-height:calc(100vh - var(--cometchat-calls-spacing-4));overflow:hidden;top:auto;left:auto;bottom:auto;right:auto}.cometchat-calls-more-menu-item{display:flex;align-items:center;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);cursor:pointer;background:transparent;-webkit-user-select:none;user-select:none;opacity:1;border:none;width:100%;text-align:left;transition:background-color .15s ease}.cometchat-calls-more-menu-item-label{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-primary);white-space:nowrap}.cometchat-calls-more-menu-item.cometchat-calls-more-menu-item--selected{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-more-menu-item.cometchat-calls-more-menu-item--disabled{cursor:not-allowed;opacity:.5}.cometchat-calls-more-menu-item:not(.cometchat-calls-more-menu-item--disabled):hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-more-menu-item:not(.cometchat-calls-more-menu-item--disabled):active{background:var(--cometchat-calls-background-color-03)}@media (max-width: 768px){.cometchat-calls-more-menu-container{max-width:calc(100vw - var(--cometchat-calls-spacing-4));overflow:hidden}}.cometchat-calls-more-menu-item .cometchat-calls-icon{color:var(--cometchat-calls-text-color-secondary)}.cometchat-calls-settings-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000}.cometchat-calls-settings-error-notification{display:flex;align-items:flex-start;gap:var(--cometchat-calls-spacing-3);padding:var(--cometchat-calls-padding-4);margin-bottom:var(--cometchat-calls-spacing-6);background:var(--cometchat-calls-permission-error-background);border-radius:var(--cometchat-calls-radius-2);color:var(--cometchat-calls-permission-error-color)}.cometchat-calls-settings-error-notification__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin-top:2px}.cometchat-calls-settings-error-notification__content{flex:1;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-1)}.cometchat-calls-settings-error-notification__title{color:var(--cometchat-calls-permission-error-color);font:var(--cometchat-calls-font-body-medium);margin:0;line-height:1.4}.cometchat-calls-settings-error-notification__message{color:var(--cometchat-calls-permission-error-color);font:var(--cometchat-calls-font-caption1-regular);margin:0;line-height:1.4;opacity:.9}.cometchat-calls-settings-modal{background:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-3);display:flex;flex-direction:row;overflow:hidden;box-shadow:0 var(--cometchat-calls-spacing-5) var(--cometchat-calls-spacing-10) #00000080;min-height:600px;min-width:680px;flex-grow:1;flex-shrink:1;max-height:50vh;max-width:700px}.cometchat-calls-settings-header{display:flex;align-items:center;justify-content:flex-end;padding:var(--cometchat-calls-padding-5);background:var(--cometchat-calls-background-color-01)}.cometchat-calls-settings-tab{background:none;border:none;cursor:pointer;transition:all .2s ease;display:flex;align-items:center}.cometchat-calls-settings-body{display:flex;flex:1;overflow:hidden}.cometchat-calls-settings-sidebar-wrapper{min-width:220px;border-right:1px solid var(--cometchat-calls-border-color-light);overflow:hidden;max-width:30%;flex-shrink:1;flex-grow:1}.cometchat-calls-settings-sidebar__header{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-heading2-medium);width:fit-content;min-height:24px;display:flex;justify-content:flex-start;align-items:center;padding:var(--cometchat-calls-padding-5);margin:0}.cometchat-calls-settings-sidebar{width:100%;height:100%;background:var(--cometchat-calls-background-color-01);padding:0;display:flex;flex-direction:column}.cometchat-calls-settings-tab{color:var(--cometchat-calls-text-color-primary);padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);text-align:left;gap:var(--cometchat-calls-spacing-3);font:var(--cometchat-calls-font-body-medium);justify-content:flex-start}.cometchat-calls-settings-tab:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-tab--active{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-settings-tab__label{flex:1}.cometchat-calls-settings-content-wrapper{height:inherit;width:100%;display:flex;flex-direction:column;justify-content:space-between}.cometchat-calls-settings-content{flex:1;padding:var(--cometchat-calls-padding-6);overflow-y:auto;background:var(--cometchat-calls-background-color-01)}.cometchat-calls-settings-content::-webkit-scrollbar{width:8px}.cometchat-calls-settings-content::-webkit-scrollbar-track{background:var(--cometchat-calls-background-color-01)}.cometchat-calls-settings-content::-webkit-scrollbar-thumb{background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-3)}.cometchat-calls-settings-content::-webkit-scrollbar-thumb:hover{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-settings-tab-content{display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-6)}.cometchat-calls-settings-device-section{display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-settings-device-label{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-medium);margin-bottom:var(--cometchat-calls-margin-2)}.cometchat-calls-settings-dropdown{position:relative;width:100%;display:flex;height:fit-content}.cometchat-calls-settings-dropdown__header{display:flex;align-items:center;justify-content:space-between;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-2);color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);cursor:pointer;transition:all .2s ease;min-height:24px;width:100%}.cometchat-calls-settings-dropdown__header:hover{border-color:var(--cometchat-calls-border-color-dark);background:var(--cometchat-calls-background-color-03)}.cometchat-calls-settings-dropdown__header--disabled{background:var(--cometchat-calls-background-color-02);border-color:var(--cometchat-calls-border-color-light);cursor:not-allowed;opacity:.6}.cometchat-calls-settings-dropdown__header--disabled:hover{background:var(--cometchat-calls-background-color-02);border-color:var(--cometchat-calls-border-color-light)}.cometchat-calls-settings-dropdown__selected{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-3);flex:1}.cometchat-calls-settings-dropdown__icon{height:24px;width:24px;display:flex;align-items:center;justify-content:center}.cometchat-calls-settings-dropdown__text{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);width:100%;display:flex;justify-content:flex-start;align-items:center}.cometchat-calls-settings-dropdown__arrow{display:flex;align-items:center;justify-content:center;transition:transform .2s ease;transform:rotate(180deg)}.cometchat-calls-settings-dropdown__arrow--rotated{transform:rotate(0)}.cometchat-calls-settings-dropdown__list{position:absolute;top:100%;left:0;right:0;background:var(--cometchat-calls-background-color-01);max-height:200px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#383838 transparent;z-index:1001;box-shadow:0 var(--cometchat-calls-spacing-2) var(--cometchat-calls-spacing-4) #0003;border-radius:var(--cometchat-calls-radius-2);list-style:none;padding:0;margin:0;margin-top:var(--cometchat-calls-margin-1);border:1px solid var(--cometchat-calls-border-color-light)}.cometchat-calls-settings-dropdown__list::-webkit-scrollbar{width:4px}.cometchat-calls-settings-dropdown__list::-webkit-scrollbar-track{background:transparent}.cometchat-calls-settings-dropdown__list::-webkit-scrollbar-thumb{background:#383838;border-radius:var(--cometchat-calls-radius-max)}.cometchat-calls-settings-dropdown__option{padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);line-height:1.4;cursor:pointer;transition:background-color .2s ease;display:flex;align-items:center;justify-content:space-between}.cometchat-calls-settings-dropdown__option:last-child{border-bottom:none}.cometchat-calls-settings-dropdown__option:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-dropdown__option--selected{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-settings-dropdown__option-text{color:inherit;font-size:inherit}.cometchat-calls-settings-dropdown__checkmark{color:var(--cometchat-calls-text-color-primary);font-weight:700;font-size:16px}.cometchat-calls-settings-video-preview{margin-bottom:var(--cometchat-calls-spacing-6)}.cometchat-calls-settings-video-preview__container{position:relative;width:100%;height:240px;background:var(--cometchat-calls-background-color-02);border-radius:var(--cometchat-calls-radius-3);border:1px solid var(--cometchat-calls-border-color-light);display:flex;align-items:center;justify-content:center;overflow:hidden}.cometchat-calls-settings-video-preview__video--mirrored{transform:scaleX(-1)}.cometchat-calls-settings-video-preview__placeholder,.cometchat-calls-settings-video-preview__loading,.cometchat-calls-settings-video-preview__error{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--cometchat-calls-spacing-3);color:var(--cometchat-calls-text-color-secondary);font:var(--cometchat-calls-font-body-regular);background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-loading-spinner{width:24px;height:24px;border:2px solid var(--cometchat-calls-border-color-light);border-top:2px solid var(--cometchat-calls-primary-color);border-radius:var(--cometchat-calls-radius-max);animation:cometchat-calls-spin 1s linear infinite}@keyframes cometchat-calls-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.cometchat-calls-settings-video-controls{display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-6)}.cometchat-calls-settings-checkbox{display:flex;align-items:center;margin:var(--cometchat-calls-spacing-4) 0}.cometchat-calls-settings-checkbox__container{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-3);cursor:pointer;-webkit-user-select:none;user-select:none}.cometchat-calls-settings-checkbox__input{display:none}.cometchat-calls-settings-checkbox__custom{width:16px;height:16px;border:2px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-1);background:var(--cometchat-calls-background-color-01);position:relative;transition:all .2s ease}.cometchat-calls-settings-checkbox__input:checked+.cometchat-calls-settings-checkbox__custom{background:var(--cometchat-calls-primary-button-background);border-color:var(--cometchat-calls-primary-button-background)}.cometchat-calls-settings-checkbox__input:checked+.cometchat-calls-settings-checkbox__custom:after{content:"✓";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--cometchat-calls-primary-button-text);font-size:12px;font-weight:700}.cometchat-calls-settings-checkbox__label{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular)}.cometchat-calls-settings-notice{margin-top:calc(0px - var(--cometchat-calls-margin-5))}.cometchat-calls-settings-notice__text{color:var(--cometchat-calls-text-color-secondary);font:var(--cometchat-calls-font-caption1-regular)}.cometchat-calls-settings-placeholder{display:flex;align-items:center;justify-content:center;padding:var(--cometchat-calls-padding-10)}.cometchat-calls-settings-placeholder__text{color:var(--cometchat-calls-text-color-secondary);font:var(--cometchat-calls-font-body-regular);text-align:center}.cometchat-calls-settings-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--cometchat-calls-spacing-3);padding:var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-6);background:var(--cometchat-calls-background-color-01)}.cometchat-calls-settings-button{padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);border-radius:var(--cometchat-calls-radius-2);font:var(--cometchat-calls-font-caption1-regular);cursor:pointer;transition:all .2s ease;border:none;min-width:120px;min-height:32px}.cometchat-calls-settings-button--secondary{background:transparent;color:var(--cometchat-calls-text-color-primary);border:1px solid var(--cometchat-calls-border-color-default)}.cometchat-calls-settings-button--secondary:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-button--primary{background:var(--cometchat-calls-primary-button-background);color:var(--cometchat-calls-primary-button-text)}.cometchat-calls-settings-button--primary:hover{opacity:.9}@media (max-width: 768px){.cometchat-calls-settings-overlay{align-items:stretch;justify-content:stretch;padding:0}.cometchat-calls-settings-modal{width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;min-width:0!important;min-height:0!important;border-radius:0!important;flex-direction:column;overflow:hidden}.cometchat-calls-settings-body{flex-direction:column;overflow:hidden}.cometchat-calls-settings-sidebar-wrapper{min-width:0;max-width:none;border-right:none;border-bottom:1px solid var(--cometchat-calls-border-color-light);flex-shrink:0;max-height:fit-content;height:fit-content}.cometchat-calls-settings-sidebar__header{display:flex;align-items:center;justify-content:space-between;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);border-bottom:none;position:relative}.cometchat-calls-settings-sidebar{width:100%;height:auto;flex-direction:row;overflow-x:auto;overflow-y:hidden;padding:0;background:var(--cometchat-calls-background-color-01);justify-content:space-evenly;height:40px}.cometchat-calls-settings-tab{min-width:120px;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);text-align:center;justify-content:center;flex-direction:column;gap:var(--cometchat-calls-spacing-2);font:var(--cometchat-calls-font-caption1-medium);border-bottom:3px solid transparent;border-radius:0;white-space:nowrap}.cometchat-calls-settings-tab svg{display:none}.cometchat-calls-settings-tab:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-tab--active{background:var(--cometchat-calls-background-color-01);border-bottom-color:var(--cometchat-calls-primary-color);color:var(--cometchat-calls-primary-color)}.cometchat-calls-settings-tab__label{flex:none;font:var(--cometchat-calls-font-body-medium)}.cometchat-calls-settings-content-wrapper{height:auto;flex:1;display:flex;flex-direction:column;overflow:hidden}.cometchat-calls-settings-content{padding:var(--cometchat-calls-padding-5);flex:1;overflow-y:auto}.cometchat-calls-settings-footer{padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);flex-shrink:0;border-top:1px solid var(--cometchat-calls-border-color-light);min-height:fit-content}.cometchat-calls-settings-button{min-width:100px;font:var(--cometchat-calls-font-caption1-medium)}.cometchat-calls-settings-video-preview__container{height:200px}.cometchat-calls-settings-dropdown__list{max-height:150px}}@media (max-width: 480px){.cometchat-calls-settings-sidebar{padding:0}.cometchat-calls-settings-tab{min-width:100px;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-1)}.cometchat-calls-settings-tab__label{font-size:11px}.cometchat-calls-settings-content{padding:var(--cometchat-calls-padding-4)}.cometchat-calls-settings-footer{flex-direction:column;gap:var(--cometchat-calls-spacing-2);padding:var(--cometchat-calls-padding-4)}.cometchat-calls-settings-button{width:100%;min-width:0}.cometchat-calls-settings-video-preview__container{height:160px}.cometchat-calls-settings-device-label{font:var(--cometchat-calls-font-caption1-medium)}.cometchat-calls-settings-dropdown__header{padding:var(--cometchat-calls-padding-3);font:var(--cometchat-calls-font-caption1-regular)}}.cometchat-calls-settings-tab .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-settings-dropdown__icon .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-settings-dropdown__arrow .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-settings-error-notification__icon .cometchat-calls-icon{color:var(--cometchat-calls-permission-error-color)}.cometchat-calls-audio-control{position:relative;display:inline-block}.cometchat-calls-audio-control__wrapper{display:flex;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03);overflow:hidden;gap:var(--cometchat-calls-spacing-2);justify-content:space-evenly;align-items:center;flex-shrink:1;height:inherit;cursor:pointer;min-height:56px;min-width:105px}.cometchat-calls-audio-control__wrapper--active{background-color:var(--cometchat-calls-call-control-active-background)}.cometchat-calls-audio-control__warning{height:fit-content;width:fit-content;position:absolute;top:-2px;right:-6px}.cometchat-calls-audio-control__button-wrapper{padding-left:var(--cometchat-calls-padding-3)}.cometchat-calls-audio-control__arrow-wrapper{padding-right:var(--cometchat-calls-padding-3)}.cometchat-calls-audio-control__button-wrapper,.cometchat-calls-audio-control__arrow-wrapper{height:100%;flex:1;min-height:inherit;justify-content:center;display:flex;align-items:center}.cometchat-calls-audio-control__arrow-wrapper[aria-disabled=true]{cursor:not-allowed;opacity:.5}.cometchat-calls-audio-control__button,.cometchat-calls-audio-control__arrow-button{display:flex;align-items:center;justify-content:center;border:none;background:none;padding:0;cursor:pointer;max-height:24px;max-width:24px;flex-shrink:1;min-width:14px;min-height:14px;width:24px;height:24px;flex-grow:1;transition:transform .15s ease,opacity .15s ease}.cometchat-calls-audio-control__button:hover,.cometchat-calls-audio-control__arrow-button:hover{transform:scale(1.05)}.cometchat-calls-audio-control__arrow-button{border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-04)}.cometchat-calls-audio-control__arrow-button:disabled{cursor:not-allowed}.cometchat-calls-audio-control__wrapper--active .cometchat-calls-audio-control__arrow-button{background:var(--cometchat-calls-error-color)}.cometchat-calls-audio-control__divider{height:30px;width:2px;background:var(--cometchat-calls-border-color-default);opacity:.2}.cometchat-calls-audio-control__wrapper--active .cometchat-calls-audio-control__divider{background:var(--cometchat-calls-error-color)}.cometchat-calls-audio-control__dropdown-wrapper{position:absolute;bottom:100%;left:0;right:0;min-width:320px;width:fit-content;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-3);z-index:1000}.cometchat-calls-audio-control__dropdown-bar{background:var(--cometchat-calls-background-color-04);border-radius:var(--cometchat-calls-radius-max);box-shadow:0 4px 16px #00000026;margin-bottom:var(--cometchat-calls-margin-2);display:flex;gap:var(--cometchat-calls-spacing-2);min-width:320px;z-index:1000;width:fit-content;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-2)}.cometchat-calls-audio-control__section{flex:1;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-2);border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03)}.cometchat-calls-audio-control__section:last-child{flex:0 0 auto;justify-content:center;align-items:center;display:flex}.cometchat-calls-audio-control__section--settings{background:none}.cometchat-calls-audio-control__settings-button{width:40px;height:40px;border-radius:var(--cometchat-calls-radius-2);background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease,transform .15s ease}.cometchat-calls-audio-control__settings-button:hover{background:var(--cometchat-calls-background-color-02);transform:scale(1.05)}.cometchat-calls-audio-control__settings-button:focus{outline:2px solid var(--cometchat-calls-primary-color);outline-offset:2px}.cometchat-calls-audio-control__device-menu{background:var(--cometchat-calls-background-color-01);width:fit-content;margin-left:var(--cometchat-calls-margin-4);border-radius:var(--cometchat-calls-radius-3);min-width:260px;padding:var(--cometchat-calls-padding-2) 0 var(--cometchat-calls-padding-2) 0;box-shadow:0 4px 12px #00000026;border:1px solid var(--cometchat-calls-border-color-light)}.cometchat-calls-audio-control__device-menu-speaker{align-self:flex-end}.cometchat-calls-audio-control__device-menu-item{padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);background:var(--cometchat-calls-background-color-01);color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-heading4-regular);display:flex;justify-content:flex-start;align-items:center;transition:background-color .15s ease;cursor:pointer;position:relative}.cometchat-calls-audio-control__device-menu-item:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-audio-control__device-menu-icon{height:24px;width:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-audio-control__device-menu-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cometchat-calls-audio-control__device-menu-loader{width:16px;height:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-audio-selector{position:relative;width:100%;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max)}.cometchat-calls-audio-selector__button{width:100%;border:none;border-radius:var(--cometchat-calls-radius-max);padding:0;cursor:pointer;transition:background-color .2s ease,transform .15s ease;background:var(--cometchat-calls-background-color-03)}.cometchat-calls-audio-selector__button:hover{background:var(--cometchat-calls-background-color-02);transform:translateY(-1px)}.cometchat-calls-audio-selector__button:disabled{opacity:.5;cursor:not-allowed;transform:none}.cometchat-calls-audio-selector__content{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-2);padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3);text-align:left;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);min-width:200px;max-width:230px}.cometchat-calls-audio-selector__device-label{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cometchat-calls-audio-selector__arrow{flex-shrink:0;transform:rotate(0);transition:transform .2s ease}.cometchat-calls-audio-selector__arrow--open{transform:rotate(180deg)}.cometchat-calls-audio-selector__content svg{display:block;flex-shrink:0}.cometchat-calls-audio-control__arrow-button-open{transform:rotate(180deg)}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__arrow-wrapper,.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__divider,.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__dropdown-wrapper{display:none}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__button-wrapper{padding:0}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__wrapper:hover{background:var(--cometchat-calls-background-color-04);transform:scale(1.05)}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__wrapper--active:hover{background:var(--cometchat-calls-call-control-active-background);transform:scale(1.05)}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__wrapper{width:40px;height:40px;min-width:40px;max-width:40px;min-height:40px;max-height:40px;padding:var(--cometchat-calls-padding-2);justify-content:center;border-radius:var(--cometchat-calls-radius-max);flex-shrink:0}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__button{width:24px;height:24px;min-width:24px;min-height:24px;max-width:24px;max-height:24px}@media (prefers-contrast: high){.cometchat-calls-audio-control__settings-button:focus,.cometchat-calls-audio-selector__button:focus{outline:3px solid;outline-offset:2px}.cometchat-calls-audio-control__device-menu{border:2px solid}}@media (prefers-reduced-motion: reduce){.cometchat-calls-audio-control__button,.cometchat-calls-audio-control__arrow-button,.cometchat-calls-audio-control__settings-button,.cometchat-calls-audio-selector__button,.cometchat-calls-audio-selector__arrow{transition:none}.cometchat-calls-audio-control__device-menu-loader svg{animation:none}}.cometchat-calls-audio-control__wrapper .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-audio-control__wrapper--active .cometchat-calls-audio-control__button .cometchat-calls-icon{color:var(--cometchat-calls-error-color)}.cometchat-calls-audio-control__warning .cometchat-calls-icon{color:var(--cometchat-calls-warning-color)}.cometchat-calls-audio-control__dropdown-bar .cometchat-calls-icon,.cometchat-calls-audio-control__device-menu .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-video-control{position:relative;display:inline-block}.cometchat-calls-video-control__wrapper{display:flex;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03);overflow:hidden;gap:var(--cometchat-calls-spacing-2);justify-content:space-evenly;align-items:center;flex-shrink:1;height:inherit;cursor:pointer;min-height:56px;min-width:105px}.cometchat-calls-video-control__button-wrapper{padding-left:var(--cometchat-calls-padding-3)}.cometchat-calls-video-control__arrow-wrapper{padding-right:var(--cometchat-calls-padding-3)}.cometchat-calls-video-control__button-wrapper,.cometchat-calls-video-control__arrow-wrapper{height:100%;flex:1;min-height:inherit;justify-content:center;display:flex;align-items:center}.cometchat-calls-video-control__arrow-wrapper[aria-disabled=true]{cursor:not-allowed;opacity:.5}.cometchat-calls-video-control__wrapper--active{background-color:var(--cometchat-calls-call-control-active-background)}.cometchat-calls-video-control__button,.cometchat-calls-video-control__arrow-button{display:flex;align-items:center;justify-content:center;border:none;background:none;padding:0;cursor:pointer;max-height:24px;max-width:24px;flex-shrink:1;min-width:14px;min-height:14px;width:24px;height:24px;flex-grow:1;transition:transform .15s ease,opacity .15s ease}.cometchat-calls-video-control__button:hover,.cometchat-calls-video-control__arrow-button:hover{transform:scale(1.05)}.cometchat-calls-video-control__arrow-button{border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-04)}.cometchat-calls-video-control__arrow-button-open{transform:rotate(180deg)}.cometchat-calls-video-control__arrow-button:disabled{cursor:not-allowed}.cometchat-calls-video-control__wrapper--active .cometchat-calls-video-control__arrow-button{background:var(--cometchat-calls-error-color)}.cometchat-calls-video-control__divider{height:30px;width:2px;background:var(--cometchat-calls-border-color-default);opacity:.2}.cometchat-calls-video-control__wrapper--active .cometchat-calls-video-control__divider{background:var(--cometchat-calls-error-color)}.cometchat-calls-video-control__dropdown-wrapper{position:absolute;bottom:100%;left:0;right:0;min-width:280px;width:fit-content;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-3);z-index:1000}.cometchat-calls-video-control__dropdown-bar{background:var(--cometchat-calls-background-color-04);border-radius:var(--cometchat-calls-radius-max);box-shadow:0 4px 16px #00000026;margin-bottom:var(--cometchat-calls-margin-2);display:flex;gap:var(--cometchat-calls-spacing-2);min-width:280px;z-index:1000;width:fit-content;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-2)}.cometchat-calls-video-control__section{flex:1;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-2);border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03)}.cometchat-calls-video-control__section:last-child{flex:0 0 auto;justify-content:center;align-items:center;display:flex}.cometchat-calls-video-control__section--settings{background:none}.cometchat-calls-video-control__settings-button{width:40px;height:40px;border-radius:var(--cometchat-calls-radius-2);background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease,transform .15s ease}.cometchat-calls-video-control__settings-button:hover{background:var(--cometchat-calls-background-color-02);transform:scale(1.05)}.cometchat-calls-video-control__device-menu{background:var(--cometchat-calls-background-color-01);width:fit-content;margin-left:var(--cometchat-calls-margin-4);border-radius:var(--cometchat-calls-radius-3);min-width:240px;padding:var(--cometchat-calls-padding-2) 0 var(--cometchat-calls-padding-2) 0;box-shadow:0 4px 12px #00000026;border:1px solid var(--cometchat-calls-border-color-light)}.cometchat-calls-video-control__device-menu-item{padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);background:var(--cometchat-calls-background-color-01);color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-heading4-regular);display:flex;justify-content:flex-start;align-items:center;transition:background-color .15s ease;cursor:pointer;position:relative}.cometchat-calls-video-control__device-menu-item:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-video-control__device-menu-icon{height:24px;width:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-video-control__device-menu-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cometchat-calls-video-control__device-menu-loader{width:16px;height:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-video-selector{position:relative;width:100%;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max)}.cometchat-calls-video-selector__button{width:100%;border:none;border-radius:var(--cometchat-calls-radius-max);padding:0;cursor:pointer;transition:background-color .2s ease,transform .15s ease;background:var(--cometchat-calls-background-color-03)}.cometchat-calls-video-selector__button:hover{background:var(--cometchat-calls-background-color-02);transform:translateY(-1px)}.cometchat-calls-video-selector__button:disabled{opacity:.5;cursor:not-allowed;transform:none}.cometchat-calls-video-selector__content{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-2);padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3);text-align:left;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);min-width:180px}.cometchat-calls-video-selector__device-label{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cometchat-calls-video-selector__arrow{flex-shrink:0;transform:rotate(0);transition:transform .2s ease}.cometchat-calls-video-selector__arrow--open{transform:rotate(180deg)}.cometchat-calls-video-selector__content svg{display:block;flex-shrink:0}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__arrow-wrapper,.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__divider,.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__dropdown-wrapper{display:none}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__button-wrapper{padding:0}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__wrapper:hover{background:var(--cometchat-calls-background-color-04);transform:scale(1.05)}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__wrapper--active:hover{background:var(--cometchat-calls-call-control-active-background);transform:scale(1.05)}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__wrapper{width:40px;height:40px;min-width:40px;max-width:40px;min-height:40px;max-height:40px;padding:var(--cometchat-calls-padding-2);justify-content:center;flex-shrink:0}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__button{width:24px;height:24px;min-width:24px;min-height:24px;max-width:24px;max-height:24px}.cometchat-calls-video-control__warning{height:fit-content;width:fit-content;position:absolute;top:-2px;right:-6px}@media (max-width: 400px){.cometchat-calls-video-control__dropdown-bar{min-width:240px}.cometchat-calls-video-control__settings-button{width:36px;height:36px}.cometchat-calls-video-selector__content{padding:var(--cometchat-calls-padding-2);gap:var(--cometchat-calls-spacing-1);min-width:140px}.cometchat-calls-video-selector__device-label{font:var(--cometchat-calls-font-caption1-regular)}}@media (prefers-contrast: high){.cometchat-calls-video-control__settings-button:focus,.cometchat-calls-video-selector__button:focus{outline:3px solid;outline-offset:2px}.cometchat-calls-video-control__device-menu{border:2px solid}}@media (prefers-reduced-motion: reduce){.cometchat-calls-video-control__button,.cometchat-calls-video-control__arrow-button,.cometchat-calls-video-control__settings-button,.cometchat-calls-video-selector__button,.cometchat-calls-video-selector__arrow{transition:none}.cometchat-calls-video-control__device-menu-loader svg{animation:none}}.cometchat-calls-video-control__wrapper .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-video-control__wrapper--active .cometchat-calls-video-control__button .cometchat-calls-icon{color:var(--cometchat-calls-error-color)}.cometchat-calls-video-control__warning .cometchat-calls-icon{color:var(--cometchat-calls-warning-color)}.cometchat-calls-video-control__dropdown-bar .cometchat-calls-icon,.cometchat-calls-video-control__device-menu .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-control-pane{display:flex;flex-direction:row;align-items:center;justify-content:center;padding:var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-4);position:relative;background:var(--cometchat-calls-background-color-01);border-radius:0;flex-shrink:0;max-width:100%;min-width:fit-content;height:fit-content}.cometchat-calls-control-button{width:56px;height:56px;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;position:relative}.cometchat-calls-control-button--hidden{display:none!important}.cometchat-calls-control-button:hover{background:var(--cometchat-calls-background-color-04);transform:scale(1.05)}.cometchat-calls-control-button--raise-hand{padding-left:var(--cometchat-calls-padding-1)}.cometchat-calls-control-button--raise-hand:hover{background:var(--cometchat-calls-neutral-color-400)}.cometchat-calls-control-button--raise-hand.cometchat-calls-control-button--active{background:var(--cometchat-calls-static-white)}.cometchat-calls-control-button--reactions:hover,.cometchat-calls-control-button--screen-share:hover,.cometchat-calls-control-button--more:hover,.cometchat-calls-control-button--more.cometchat-calls-control-button--active{background:var(--cometchat-calls-neutral-color-400)}.cometchat-calls-control-button--call-end{background:var(--cometchat-calls-error-color);width:72px;border-radius:var(--cometchat-calls-radius-max)}.cometchat-calls-control-button--call-end:hover{background:var(--cometchat-calls-error-color);transform:scale(1.05);opacity:.9}.cometchat-calls-control-button:active{transform:scale(.95)}.cometchat-calls-control-button--active{background:var(--cometchat-calls-neutral-color-400)}@media (max-width: 767px){.cometchat-calls-control-pane{gap:var(--cometchat-calls-spacing-4)}}.cometchat-calls-control-pane--mobile{gap:var(--cometchat-calls-spacing-4)}.cometchat-calls-control-button .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-control-button--raise-hand.cometchat-calls-control-button--active .cometchat-calls-icon{color:var(--cometchat-calls-static-black)}.cometchat-calls-virtual-background-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000;padding:var(--cometchat-calls-padding-4)}.cometchat-calls-virtual-background-modal{background-color:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-4);border:1px solid var(--cometchat-calls-border-color-default);display:flex;flex-direction:column;overflow:hidden;box-shadow:0 var(--cometchat-calls-spacing-6) var(--cometchat-calls-spacing-8) #0000004d}.cometchat-calls-virtual-background-modal--desktop{width:clamp(320px,90vw,540px);height:clamp(420px,80vh,620px);max-height:560px}.cometchat-calls-virtual-background-modal--mobile{width:100%;height:100%;max-width:100vw;max-height:100vh;border-radius:0;border:none}.cometchat-calls-virtual-background-header{display:flex;align-items:center;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);background:var(--cometchat-calls-background-color-01);gap:var(--cometchat-calls-spacing-3)}.cometchat-calls-virtual-background-header-title{font:var(--cometchat-calls-font-heading2-medium);color:var(--cometchat-calls-text-color-primary);margin:0}.cometchat-calls-virtual-background-content{flex:1;display:flex;flex-direction:column;overflow:hidden}.cometchat-calls-virtual-background-preview{padding:var(--cometchat-calls-padding-5);display:flex;justify-content:center;align-items:center;padding-top:var(--cometchat-calls-padding-1)}.cometchat-calls-virtual-background-preview-video-container{position:relative;height:clamp(180px,35vh,280px);border-radius:var(--cometchat-calls-radius-3);overflow:hidden;background-color:var(--cometchat-calls-background-color-03);aspect-ratio:16 / 9;width:100%}.cometchat-calls-virtual-background-preview-video{width:100%;height:100%;object-fit:cover}.cometchat-calls-virtual-background-preview-canvas{position:absolute;top:0;left:0;width:100%;height:100%}.cometchat-calls-virtual-background-preview-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;gap:var(--cometchat-calls-spacing-3)}.cometchat-calls-virtual-background-preview-spinner{width:var(--cometchat-calls-spacing-8);height:var(--cometchat-calls-spacing-8);border:2px solid var(--cometchat-calls-border-color-light);border-top:2px solid var(--cometchat-calls-primary-color);border-radius:50%;animation:cometchat-calls-virtual-background-spin 1s linear infinite}.cometchat-calls-virtual-background-preview-loading-text{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary)}.cometchat-calls-virtual-background-preview-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;gap:var(--cometchat-calls-spacing-3);color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-virtual-background-preview-placeholder-text{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary)}@keyframes cometchat-calls-virtual-background-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.cometchat-calls-virtual-background-options{flex:1;padding:var(--cometchat-calls-padding-5);overflow-y:auto;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-1);padding-top:0}.cometchat-calls-virtual-background-controls-row{display:flex;gap:var(--cometchat-calls-spacing-1);flex-wrap:wrap;justify-content:flex-start}.cometchat-calls-virtual-background-images-row{display:flex;flex-wrap:wrap;gap:var(--cometchat-calls-spacing-1);justify-content:flex-start}.cometchat-calls-virtual-background-images-row .cometchat-calls-virtual-background-option{padding:0}.cometchat-calls-virtual-background-option--add{flex-direction:row;background:transparent;border:none;gap:var(--cometchat-calls-spacing-2);justify-content:flex-start;align-items:center;width:fit-content;min-height:48px;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3);border-radius:var(--cometchat-calls-radius-2)}.cometchat-calls-virtual-background-option--add:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-virtual-background-option-add-text{font:var(--cometchat-calls-font-caption1-regular);color:var(--cometchat-calls-text-color-highlight);text-align:center;line-height:1.2}.cometchat-calls-virtual-background-option{position:relative;width:70px;box-sizing:border-box;height:48px;border:2px solid var(--cometchat-calls-border-color-light);border-radius:var(--cometchat-calls-radius-1);background:var(--cometchat-calls-background-color-03);cursor:pointer;overflow:hidden;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.cometchat-calls-virtual-background-option:hover{border-color:var(--cometchat-calls-border-color-default);transform:scale(1.05)}.cometchat-calls-virtual-background-option--selected,.cometchat-calls-virtual-background-option--selected:hover{border:2px solid var(--cometchat-calls-icon-color-highlight)}.cometchat-calls-virtual-background-option-none{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background:var(--cometchat-calls-background-color-03)}.cometchat-calls-virtual-background-option-blur{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.cometchat-calls-virtual-background-option-blur-effect{width:100%;height:100%;background:linear-gradient(45deg,var(--cometchat-calls-primary-color) 0%,var(--cometchat-calls-extended-primary-color-700) 50%,var(--cometchat-calls-extended-primary-color-900) 100%);filter:blur(4px)}.cometchat-calls-virtual-background-option-image{width:100%;height:100%;object-fit:cover;object-position:center}.cometchat-calls-virtual-background-option-selected-indicator{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;color:var(--cometchat-calls-static-white)}.cometchat-calls-virtual-background-option-selected-indicator:before{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:var(--cometchat-calls-spacing-8);height:var(--cometchat-calls-spacing-8);border-radius:50%;z-index:1}.cometchat-calls-virtual-background-option-selected-indicator svg{position:relative;z-index:2}.cometchat-calls-virtual-background-option-wrapper{position:relative;display:flex;flex-direction:column;align-items:center}.cometchat-calls-virtual-background-option-checkbox{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000004d}.cometchat-calls-virtual-background-option-checkbox .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-primary)}.cometchat-calls-virtual-background-footer{justify-content:flex-end;display:flex;align-items:center;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);background:var(--cometchat-calls-background-color-01);gap:var(--cometchat-calls-spacing-3)}.cometchat-calls-virtual-background-button{border-radius:var(--cometchat-calls-radius-2);font:var(--cometchat-calls-font-button-medium);cursor:pointer;transition:all .2s ease;border:none;display:flex;align-items:center;justify-content:center;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);min-width:120px;min-height:32px}.cometchat-calls-virtual-background-button--primary{background:var(--cometchat-calls-primary-button-background);color:var(--cometchat-calls-primary-button-text)}.cometchat-calls-virtual-background-button--primary:hover{background:var(--cometchat-calls-extended-primary-color-800)}.cometchat-calls-virtual-background-button--primary:disabled{opacity:.6;cursor:not-allowed}.cometchat-calls-virtual-background-button--secondary{background:transparent;color:var(--cometchat-calls-text-color-primary);border:1px solid var(--cometchat-calls-border-color-dark)}.cometchat-calls-virtual-background-button--secondary:hover{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-virtual-background-button--full-width{width:100%}@media (max-width: 767px){.cometchat-calls-virtual-background-overlay{padding:0}.cometchat-calls-virtual-background-option-wrapper{min-width:77px}.cometchat-calls-virtual-background-preview-video-container{height:240px;min-width:320px;width:100%}.cometchat-calls-virtual-background-footer{width:100%;box-sizing:border-box;justify-content:space-between}.cometchat-calls-virtual-background-footer .cometchat-calls-virtual-background-button{min-width:calc(50% - var(--cometchat-calls-padding-5))}}.cometchat-calls-virtual-background-options::-webkit-scrollbar{width:6px}.cometchat-calls-virtual-background-options::-webkit-scrollbar-track{background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-1)}.cometchat-calls-virtual-background-options::-webkit-scrollbar-thumb{background:var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-1)}.cometchat-calls-virtual-background-options::-webkit-scrollbar-thumb:hover{background:var(--cometchat-calls-border-color-dark)}.cometchat-calls-virtual-background-option--add .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-primary)}.cometchat-calls-virtual-background-option-none .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-recording-indicator{display:inline-flex;flex-direction:row;align-items:center;gap:var(--cometchat-calls-spacing-1);padding:var(--cometchat-calls-padding-1) var(--cometchat-calls-padding-2);background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);line-height:1;flex-shrink:0;-webkit-user-select:none;user-select:none}.cometchat-calls-recording-indicator-dot{position:relative;width:8px;height:8px;border-radius:50%;background:var(--cometchat-calls-error-color);flex-shrink:0}.cometchat-calls-recording-indicator-dot:after{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:var(--cometchat-calls-error-color);transform:translate(-50%,-50%);transform-origin:center;opacity:.6;animation:cometchat-calls-recording-pulse 1.6s ease-out infinite}.cometchat-calls-recording-indicator-label{font:var(--cometchat-calls-font-caption2-bold);letter-spacing:.4px;color:var(--cometchat-calls-static-white);text-transform:uppercase}@keyframes cometchat-calls-recording-pulse{0%{transform:translate(-50%,-50%) scale(1);opacity:.6}to{transform:translate(-50%,-50%) scale(2.4);opacity:0}}@media (prefers-reduced-motion: reduce){.cometchat-calls-recording-indicator-dot:after{animation:none;opacity:0}}.cometchat-calls-header-container{display:flex;flex-direction:row;align-items:center;padding:12px 20px;gap:20px;width:100%;box-sizing:border-box}.cometchat-calls-header-session-info{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:4px;flex:1;min-width:0;overflow:hidden}.cometchat-calls-header-title{font-family:Roboto,sans-serif;font-style:normal;font-weight:500;font-size:16px;line-height:120%;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.cometchat-calls-header-session-timer{font-family:Roboto,sans-serif;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#fff}.cometchat-calls-header-session-meta{display:flex;flex-direction:row;align-items:center;gap:8px;min-width:0;max-width:100%}.cometchat-calls-header-actions{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;padding:0;gap:12px;flex-shrink:0}.cometchat-calls-header-action-button{display:flex;justify-content:center;align-items:center;border:none;width:40px;height:40px;background:#272727;border-radius:var(--cometchat-calls-radius-max);cursor:pointer;flex-shrink:0;position:relative}.cometchat-calls-header-action-button.cometchat-calls-header-action-button--active{background:var(--cometchat-calls-background-color-04)}.cometchat-calls-header-layout-dropdown{position:relative;display:inline-block}.cometchat-calls-header-dropdown-menu{position:absolute;top:100%;right:0;background:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-2);box-shadow:0 4px 12px #0000004d;min-width:160px;z-index:200;margin-top:var(--cometchat-calls-margin-1);border:1px solid var(--cometchat-calls-border-color-light);padding:var(--cometchat-calls-padding-2) 0;opacity:0;transform:translateY(-10px) scale(.95);transform-origin:top right}.cometchat-calls-header-dropdown-menu.cometchat-calls-header-dropdown-menu--opening{animation:cometchat-calls-dropdown-enter .15s ease forwards}.cometchat-calls-header-dropdown-menu.cometchat-calls-header-dropdown-menu--closing{animation:cometchat-calls-dropdown-exit .15s ease forwards}.cometchat-calls-header-action-button .cometchat-calls-header-badge{position:absolute;top:-2px;right:-8px;height:20px;width:24px;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-primary-color, #6852d6);color:var(--cometchat-calls-static-white, #fff);font:var(--cometchat-calls-font-caption2-regular);display:flex;align-items:center;box-sizing:border-box;overflow:hidden;justify-content:center;padding-left:1px}@keyframes cometchat-calls-dropdown-enter{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes cometchat-calls-dropdown-exit{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-10px) scale(.95)}}.cometchat-calls-header-dropdown-item{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-3);padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-4);background:none;border:none;cursor:pointer;width:100%;text-align:left;height:40px}.cometchat-calls-header-dropdown-item-name{font:var(--cometchat-calls-font-heading4-regular);color:var(--cometchat-calls-text-color-primary)}.cometchat-calls-header-dropdown-item:hover{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-header-dropdown-item.active{background:var(--cometchat-calls-background-color-03);opacity:.5;cursor:not-allowed}.cometchat-calls-header-action-button .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-header-dropdown-item .cometchat-calls-icon{color:var(--cometchat-calls-neutral-color-600)}.cometchat-calls-ideal-timeout-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;-webkit-backdrop-filter:blur(var(--cometchat-calls-spacing-1));backdrop-filter:blur(var(--cometchat-calls-spacing-1));display:flex;align-items:center;justify-content:center;z-index:10000}.cometchat-calls-ideal-timeout-modal{background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-5);box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;width:400px;padding:var(--cometchat-calls-padding-8) var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-5);max-width:90vw;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-sizing:border-box}.cometchat-calls-ideal-timeout-modal__content{display:flex;flex-direction:column;align-items:center;gap:var(--cometchat-calls-spacing-5);width:100%}.cometchat-calls-ideal-timeout-modal__timer-icon{display:flex;width:80px;height:80px;justify-content:center;align-items:center;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-extended-primary-color-600);flex-shrink:0}.cometchat-calls-ideal-timeout-modal__timer-text{color:var(--cometchat-calls-static-white);font:var(--cometchat-calls-font-heading3-bold);text-align:center}.cometchat-calls-ideal-timeout-modal__text-content{display:flex;flex-direction:column;align-items:center;gap:var(--cometchat-calls-spacing-2);width:100%}.cometchat-calls-ideal-timeout-modal__title{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-heading2-medium);text-align:center;margin:0;width:100%}.cometchat-calls-ideal-timeout-modal__subtitle{color:var(--cometchat-calls-text-color-secondary);font:var(--cometchat-calls-font-body-regular);text-align:center;margin:0;line-height:1.2;width:100%}.cometchat-calls-ideal-timeout-modal__actions{display:flex;align-items:center;gap:12px;width:100%}.cometchat-calls-ideal-timeout-modal__button{display:flex;height:40px;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);justify-content:center;align-items:center;border-radius:var(--cometchat-calls-radius-2);font:var(--cometchat-calls-font-button-medium);cursor:pointer;transition:all .2s ease;width:160px;flex:1;border:none;outline:none}.cometchat-calls-ideal-timeout-modal__button:focus{outline:2px solid var(--cometchat-calls-primary-color);outline-offset:2px}.cometchat-calls-ideal-timeout-modal__button--secondary{background:transparent;color:var(--cometchat-calls-text-color-primary);border:1px solid var(--cometchat-calls-border-color-dark)}.cometchat-calls-ideal-timeout-modal__button--secondary:hover{background:var(--cometchat-calls-background-color-02);border-color:var(--cometchat-calls-border-color-dark)}.cometchat-calls-ideal-timeout-modal__button--secondary:active{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-ideal-timeout-modal__button--primary{background:var(--cometchat-calls-error-color);color:var(--cometchat-calls-static-white)}.cometchat-calls-ideal-timeout-modal__button--primary:hover{background:#b33537}.cometchat-calls-ideal-timeout-modal__button--primary:active{background:#a02e30}@media (max-width: 480px){.cometchat-calls-ideal-timeout-modal{width:320px;padding:var(--cometchat-calls-padding-6) var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-4);margin:var(--cometchat-calls-margin-4)}.cometchat-calls-ideal-timeout-modal__content{gap:var(--cometchat-calls-spacing-4)}.cometchat-calls-ideal-timeout-modal__timer-icon{width:70px;height:70px}.cometchat-calls-ideal-timeout-modal__timer-text{font:var(--cometchat-calls-font-heading4-bold)}.cometchat-calls-ideal-timeout-modal__title{font:var(--cometchat-calls-font-heading3-medium)}.cometchat-calls-ideal-timeout-modal__subtitle{font:var(--cometchat-calls-font-caption1-regular)}.cometchat-calls-ideal-timeout-modal__actions{flex-direction:column;gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-ideal-timeout-modal__button{width:100%;min-width:200px}}@media (max-width: 360px){.cometchat-calls-ideal-timeout-modal{width:280px;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-3)}.cometchat-calls-ideal-timeout-modal__timer-icon{width:60px;height:60px}.cometchat-calls-ideal-timeout-modal__button{min-width:180px;height:36px;padding:var(--cometchat-calls-padding-1) var(--cometchat-calls-padding-4)}}.cometchat-calls-info-view-container{display:flex;height:100%;justify-content:center;align-items:center;background-color:#272727;padding:20px;box-sizing:border-box}.cometchat-calls-info-view-message{color:#fff;text-align:center;font:var(--cometchat-calls-font-body-regular)}.cometchat-calls-participant-item{display:flex;flex-direction:row;align-items:center;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);background-color:var(--cometchat-calls-background-color-02);border-bottom:1px solid var(--cometchat-calls-border-color-light);transition:background-color .2s ease;width:100%;box-sizing:border-box;min-width:0}.cometchat-calls-participant-avatar{width:48px;height:48px;flex-shrink:0;position:relative}.cometchat-calls-participant-pin-icon{position:absolute;bottom:0;right:0;padding:1px;background-color:var(--cometchat-calls-background-color-02);border-radius:50%;display:flex;align-items:center;justify-content:center}.cometchat-calls-participant-text{display:flex;flex-direction:column;align-items:flex-start;gap:var(--cometchat-calls-spacing-1);flex:1;min-width:0;overflow:hidden}.cometchat-calls-participant-name{font:var(--cometchat-calls-font-heading4-medium);color:var(--cometchat-calls-text-color-primary);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.cometchat-calls-participant-description{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.cometchat-calls-participant-icons{display:flex;position:relative;flex-direction:row;align-items:center;gap:var(--cometchat-calls-spacing-3);flex-shrink:0;margin-left:auto;overflow:visible}.cometchat-calls-participant-more-button{display:flex;justify-content:center;align-items:center;width:28px;height:28px;border-radius:var(--cometchat-calls-radius-max);background-color:var(--cometchat-calls-background-color-03);border:none;cursor:pointer;transition:background-color .2s ease,transform .1s ease}.cometchat-calls-participant-more-button:hover{background-color:var(--cometchat-calls-background-color-04);transform:scale(1.05)}@media (max-width: 768px){.cometchat-calls-participant-item{padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3);gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-participant-icons{gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-participant-more-button{width:24px;height:24px}}.cometchat-calls-participant-pin-icon .cometchat-calls-icon,.cometchat-calls-participant-raise-hand.cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-participant-screen-share.cometchat-calls-icon{color:var(--cometchat-calls-primary-color)}.cometchat-calls-participant-signal.cometchat-calls-icon{color:var(--signal-color)}.cometchat-calls-participant-mic.cometchat-calls-icon{color:var(--cometchat-calls-primary-color)}.cometchat-calls-participant-mic--muted.cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-participant-list-wrapper{position:absolute;top:0;right:0;height:100%;width:var(--cometchat-calls-participants-list-width);transform:translate(100%);transition:transform var(--transition-duration) var(--transition-easing);z-index:1000;background:var(--cometchat-calls-background-color-01);box-sizing:border-box;padding:var(--cometchat-calls-padding-2);padding-left:0;will-change:transform}.cometchat-calls-participant-list-wrapper .cometchat-calls-more-option-button{height:28px;width:28px;box-sizing:border-box}.cometchat-calls-participant-list-container{display:flex;flex-direction:column;align-items:flex-start;padding:0;width:100%;height:100%;background:var(--cometchat-calls-background-color-03);flex-shrink:0;box-sizing:border-box;border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-3)}.cometchat-calls-participant-list-header{box-sizing:border-box;display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);width:100%;height:64px;background:var(--cometchat-calls-background-color-03);flex-shrink:0;border-radius:inherit;padding-bottom:0}.cometchat-calls-participant-list-header-text{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding:0;flex-grow:1;overflow:hidden}.cometchat-calls-participant-list-title{width:100%;height:24px;margin:0;font:var(--cometchat-calls-font-heading4-bold);color:var(--cometchat-calls-text-color-primary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.cometchat-calls-participant-list-close-button{display:flex;align-items:center;justify-content:center;padding:0;gap:16px;width:24px;height:24px;background:none;border:none;cursor:pointer;flex-shrink:0}.cometchat-calls-participant-search-container{box-sizing:border-box;display:flex;flex-direction:column;align-items:flex-start;width:100%;background:var(--cometchat-calls-background-color-02);flex-shrink:0;overflow:hidden}.cometchat-calls-participant-search-input-wrapper{display:flex;flex-direction:row;align-items:center;padding:0 var(--cometchat-calls-padding-3);gap:var(--cometchat-calls-spacing-2);width:100%;height:40px;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);box-sizing:border-box}.cometchat-calls-participant-search-icon{flex-shrink:0}.cometchat-calls-participant-search-input{flex-grow:1;height:100%;background:none;border:none;outline:none;padding:0;margin:0;font-family:Roboto,sans-serif;font-style:normal;font-weight:400;font-size:16px;line-height:120%;color:var(--cometchat-calls-text-color-primary)}.cometchat-calls-participant-search-input::placeholder{color:var(--cometchat-calls-text-color-tertiary);font:var(--cometchat-calls-font-heading4-regular);opacity:1}.cometchat-calls-participants-scroll-area{display:flex;flex-direction:column;align-items:flex-start;padding:0;width:100%;flex-grow:1;overflow-y:auto;background:var(--cometchat-calls-background-color-02);overflow-x:visible;border-radius:inherit;border-top-left-radius:0;border-top-right-radius:0}.cometchat-calls-participants-scroll-area::-webkit-scrollbar{width:6px}.cometchat-calls-participants-scroll-area::-webkit-scrollbar-track{background:var(--cometchat-calls-border-color-light);border-radius:3px}.cometchat-calls-participants-scroll-area::-webkit-scrollbar-thumb{background:var(--cometchat-calls-neutral-color-400);border-radius:var(--cometchat-calls-radius-1)}.cometchat-calls-participants-scroll-area::-webkit-scrollbar-thumb:hover{background:var(--cometchat-calls-neutral-color-500)}.cometchat-calls-participant-list-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;overflow:hidden;padding:0;margin:auto}.cometchat-calls-participant-list-empty-state-icon{margin-bottom:24px;opacity:.6}.cometchat-calls-participant-list-empty-state-text{display:flex;flex-direction:column;align-items:center;gap:8px}.cometchat-calls-participant-list-empty-state-title{margin:0;font:var(--cometchat-calls-font-heading3-bold);color:var(--cometchat-calls-text-color-primary);font-size:16px;font-weight:500;line-height:1.2}.cometchat-calls-participant-list-empty-state-subtitle{margin:0;font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary);font-size:14px;font-weight:400;line-height:1.2}.cometchat-calls-participant-list-no-results{padding:20px;text-align:center;width:100%;color:#989898;font-family:Roboto,sans-serif;font-size:14px}.cometchat-calls-participant-search-input-container{width:100%;border-radius:var(--cometchat-calls-radius-max);padding:var(--cometchat-calls-padding-4);box-sizing:border-box}.cometchat-calls-participant-list-share-invite-button-container{width:100%;box-sizing:border-box;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-6)}.cometchat-calls-participant-list-share-invite-button{display:flex;align-items:center;justify-content:center;gap:var(--cometchat-calls-spacing-2);width:100%;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);background:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-2);color:var(--cometchat-calls-static-white);font:var(--cometchat-calls-font-button-medium);cursor:pointer;transition:all .2s ease;margin-top:var(--cometchat-calls-margin-2);border:1px solid var(--cometchat-calls-border-color-dark)}.cometchat-calls-participant-list-share-invite-button:hover{background:var(--cometchat-calls-primary-button-background);transition:background .3s ease-in-out}.cometchat-calls-participant-list-share-invite-button:active{transform:translateY(0)}@media (min-width: 769px){.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--participant-list-open .cometchat-calls-participant-list-wrapper{transform:translate(0)}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--participant-list-open .cometchat-calls-call-screen-main-content{width:calc(100% - var(--cometchat-calls-participants-list-width))}}@media (max-width: 768px){.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--participant-list-open .cometchat-calls-call-screen-main-content{display:none}.cometchat-calls-participant-list-wrapper{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:9999;transform:translate(100%);transition:transform var(--transition-duration) var(--transition-easing);padding:0;margin:0}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--participant-list-open .cometchat-calls-participant-list-wrapper{transform:translate(0)}.cometchat-calls-participant-list-container{width:100%;height:100%;max-width:none;border-radius:0;border:none;box-shadow:none}.cometchat-calls-participant-list-header,.cometchat-calls-participants-scroll-area{border-radius:0}}.cometchat-calls-participant-list-close-button .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-participant-search-input-wrapper .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-participant-list-empty-state-icon .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-tertiary)}.cometchat-calls-participant-list-share-invite-button .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-connection-loader-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:2000;pointer-events:all;color:var(--cometchat-calls-text-color-on-dark, #fff);font:var( --cometchat-calls-font-heading3-semibold, 600 20px/28px "Roboto", sans-serif );letter-spacing:.5px;opacity:1;transition:opacity .3s ease}.cometchat-calls-connection-loader-overlay.cometchat-calls-connection-loader-overlay--fade-out{opacity:0;pointer-events:none}.cometchat-calls-connection-loader-animation{width:75px;aspect-ratio:4;--_g: no-repeat radial-gradient(circle closest-side, #ccc 90%, #0000);background:var(--_g) 0% 50%,var(--_g) 50% 50%,var(--_g) 100% 50%;background-size:calc(100% / 3) 50%;animation:cometchat-calls-bouncing-dots 1s infinite linear}@keyframes cometchat-calls-bouncing-dots{20%{background-position:0% 0%,50% 50%,100% 50%}40%{background-position:0% 100%,50% 0%,100% 50%}60%{background-position:0% 50%,50% 100%,100% 0%}80%{background-position:0% 50%,50% 50%,100% 100%}}.cometchat-calls-notification{display:flex;width:fit-content;max-width:340px;min-width:120px;padding:12px;align-items:center;gap:8px;border-radius:8px;border:1px solid #383838;background:#1a1a1a;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;font-family:Roboto,-apple-system,Helvetica,sans-serif;animation:cometchat-calls-notification-slide-in .3s ease-out;transition:all .3s ease}.cometchat-calls-notification--default{background:#1a1a1a;border:1px solid #383838}.cometchat-calls-notification--default .cometchat-calls-notification__message{color:#fff}.cometchat-calls-notification--info{background:#1a1a1a;border:1px solid #383838}.cometchat-calls-notification--info .cometchat-calls-notification__message{color:#fff}.cometchat-calls-notification--success{background:#ceecdf;border:1px solid rgba(255,255,255,.2)}.cometchat-calls-notification--success .cometchat-calls-notification__message{color:#097f4a}.cometchat-calls-notification--warning{background:#fff5cf;border:1px solid rgba(255,255,255,.2);padding:8px 12px}.cometchat-calls-notification--warning .cometchat-calls-notification__message{color:#994000}.cometchat-calls-notification--error{background:#f4d8d8;border:1px solid rgba(255,255,255,.2);padding:8px 12px}.cometchat-calls-notification--error .cometchat-calls-notification__message{color:#9f3032}.cometchat-calls-notification:has(.cometchat-calls-notification__close),.cometchat-calls-notification:has(.cometchat-calls-notification__button){padding:8px 12px}.cometchat-calls-notification__message{font-size:14px;font-style:normal;font-weight:400;line-height:120%;margin:0;word-wrap:break-word;flex:1}.cometchat-calls-notification__button{color:#8c78f0;text-align:center;font-size:14px;font-style:normal;font-weight:400;line-height:120%;background:transparent;border:none;cursor:pointer;transition:opacity .2s ease;margin:0;padding:0;white-space:nowrap}.cometchat-calls-notification__button:hover{opacity:.8}.cometchat-calls-notification__close{width:24px;height:24px;background:transparent;border:none;cursor:pointer;transition:opacity .2s ease;margin:0;padding:0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-notification__close:hover{opacity:.8}.cometchat-calls-notification__close svg{width:24px;height:24px}@keyframes cometchat-calls-notification-slide-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@media (max-width: 480px){.cometchat-calls-notification{max-width:calc(100vw - 32px);min-width:100px;margin:8px 16px}}.cometchat-calls-notification__close .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-notification-container{position:absolute;bottom:70px;left:20px;display:flex;flex-direction:column-reverse;gap:10px;z-index:1100} +@import"https://fonts.googleapis.com/css2?family=Roboto&display=swap";:root{--cometchat-calls-spacing: 2px;--cometchat-calls-spacing-1: 4px;--cometchat-calls-spacing-2: 8px;--cometchat-calls-spacing-3: 12px;--cometchat-calls-spacing-4: 16px;--cometchat-calls-spacing-5: 20px;--cometchat-calls-spacing-6: 24px;--cometchat-calls-spacing-7: 28px;--cometchat-calls-spacing-8: 32px;--cometchat-calls-spacing-9: 36px;--cometchat-calls-spacing-10: 40px;--cometchat-calls-spacing-11: 44px;--cometchat-calls-spacing-12: 48px;--cometchat-calls-spacing-13: 52px;--cometchat-calls-spacing-14: 56px;--cometchat-calls-spacing-15: 60px;--cometchat-calls-spacing-16: 64px;--cometchat-calls-spacing-17: 68px;--cometchat-calls-spacing-18: 72px;--cometchat-calls-spacing-19: 76px;--cometchat-calls-spacing-20: 80px;--cometchat-calls-spacing-max: 1000px;--cometchat-calls-padding: var(--cometchat-calls-spacing);--cometchat-calls-padding-1: var(--cometchat-calls-spacing-1);--cometchat-calls-padding-2: var(--cometchat-calls-spacing-2);--cometchat-calls-padding-3: var(--cometchat-calls-spacing-3);--cometchat-calls-padding-4: var(--cometchat-calls-spacing-4);--cometchat-calls-padding-5: var(--cometchat-calls-spacing-5);--cometchat-calls-padding-6: var(--cometchat-calls-spacing-6);--cometchat-calls-padding-7: var(--cometchat-calls-spacing-7);--cometchat-calls-padding-8: var(--cometchat-calls-spacing-8);--cometchat-calls-padding-9: var(--cometchat-calls-spacing-9);--cometchat-calls-padding-10: var(--cometchat-calls-spacing-10);--cometchat-calls-margin: var(--cometchat-calls-spacing);--cometchat-calls-margin-1: var(--cometchat-calls-spacing-1);--cometchat-calls-margin-2: var(--cometchat-calls-spacing-2);--cometchat-calls-margin-3: var(--cometchat-calls-spacing-3);--cometchat-calls-margin-4: var(--cometchat-calls-spacing-4);--cometchat-calls-margin-5: var(--cometchat-calls-spacing-5);--cometchat-calls-margin-6: var(--cometchat-calls-spacing-6);--cometchat-calls-margin-7: var(--cometchat-calls-spacing-7);--cometchat-calls-margin-8: var(--cometchat-calls-spacing-8);--cometchat-calls-margin-9: var(--cometchat-calls-spacing-9);--cometchat-calls-margin-10: var(--cometchat-calls-spacing-10);--cometchat-calls-margin-11: var(--cometchat-calls-spacing-11);--cometchat-calls-margin-12: var(--cometchat-calls-spacing-12);--cometchat-calls-margin-13: var(--cometchat-calls-spacing-13);--cometchat-calls-margin-14: var(--cometchat-calls-spacing-14);--cometchat-calls-margin-15: var(--cometchat-calls-spacing-15);--cometchat-calls-margin-16: var(--cometchat-calls-spacing-16);--cometchat-calls-margin-17: var(--cometchat-calls-spacing-17);--cometchat-calls-margin-18: var(--cometchat-calls-spacing-18);--cometchat-calls-margin-19: var(--cometchat-calls-spacing-19);--cometchat-calls-margin-20: var(--cometchat-calls-spacing-20);--cometchat-calls-radius: var(--cometchat-calls-spacing);--cometchat-calls-radius-1: var(--cometchat-calls-spacing-1);--cometchat-calls-radius-2: var(--cometchat-calls-spacing-2);--cometchat-calls-radius-3: var(--cometchat-calls-spacing-3);--cometchat-calls-radius-4: var(--cometchat-calls-spacing-4);--cometchat-calls-radius-5: var(--cometchat-calls-spacing-5);--cometchat-calls-radius-6: var(--cometchat-calls-spacing-6);--cometchat-calls-radius-max: var(--cometchat-calls-spacing-max);--cometchat-calls-font-family: "Roboto", "Inter";--cometchat-calls-font-title-bold: 700 32px/38.4px var(--cometchat-calls-font-family);--cometchat-calls-font-title-medium: 500 32px/38.4px var(--cometchat-calls-font-family);--cometchat-calls-font-title-regular: 400 32px/38.4px var(--cometchat-calls-font-family);--cometchat-calls-font-heading1-bold: 700 24px/28.8px var(--cometchat-calls-font-family);--cometchat-calls-font-heading1-medium: 500 24px/28.8px var(--cometchat-calls-font-family);--cometchat-calls-font-heading1-regular: 400 24px/28.8px var(--cometchat-calls-font-family);--cometchat-calls-font-heading2-bold: 700 20px/24px var(--cometchat-calls-font-family);--cometchat-calls-font-heading2-medium: 500 20px/24px var(--cometchat-calls-font-family);--cometchat-calls-font-heading2-regular: 400 20px/24px var(--cometchat-calls-font-family);--cometchat-calls-font-heading3-bold: 700 18px/21.6px var(--cometchat-calls-font-family);--cometchat-calls-font-heading3-medium: 500 18px/21.6px var(--cometchat-calls-font-family);--cometchat-calls-font-heading3-regular: 400 18px/21.6px var(--cometchat-calls-font-family);--cometchat-calls-font-heading4-bold: 700 16px/19.2px var(--cometchat-calls-font-family);--cometchat-calls-font-heading4-medium: 500 16px/19.2px var(--cometchat-calls-font-family);--cometchat-calls-font-heading4-regular: 400 16px/19.2px var(--cometchat-calls-font-family);--cometchat-calls-font-body-bold: 700 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-body-medium: 500 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-body-regular: 400 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-caption1-bold: 700 12px/14.4px var(--cometchat-calls-font-family);--cometchat-calls-font-caption1-medium: 500 12px/14.4px var(--cometchat-calls-font-family);--cometchat-calls-font-caption1-regular: 400 12px/14.4px var(--cometchat-calls-font-family);--cometchat-calls-font-caption2-bold: 700 10px/12px var(--cometchat-calls-font-family);--cometchat-calls-font-caption2-medium: 500 10px/12px var(--cometchat-calls-font-family);--cometchat-calls-font-caption2-regular: 400 10px/12px var(--cometchat-calls-font-family);--cometchat-calls-font-button-bold: 700 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-button-medium: 500 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-button-regular: 400 14px/16.8px var(--cometchat-calls-font-family);--cometchat-calls-font-link: 400 14px/19.6px var(--cometchat-calls-font-family);--cometchat-calls-primary-color: #6852d6;--cometchat-calls-extended-primary-color-50: #15102b;--cometchat-calls-extended-primary-color-100: #1d173c;--cometchat-calls-extended-primary-color-200: #251e4d;--cometchat-calls-extended-primary-color-300: #2e245e;--cometchat-calls-extended-primary-color-400: #362b6f;--cometchat-calls-extended-primary-color-500: #3e3180;--cometchat-calls-extended-primary-color-600: #473892;--cometchat-calls-extended-primary-color-700: #4f3ea3;--cometchat-calls-extended-primary-color-800: #5745b4;--cometchat-calls-extended-primary-color-900: #7460d9;--cometchat-calls-neutral-color-50: #141414;--cometchat-calls-neutral-color-100: #1a1a1a;--cometchat-calls-neutral-color-200: #272727;--cometchat-calls-neutral-color-300: #383838;--cometchat-calls-neutral-color-400: #4c4c4c;--cometchat-calls-neutral-color-500: #858585;--cometchat-calls-neutral-color-600: #989898;--cometchat-calls-neutral-color-700: #a8a8a8;--cometchat-calls-neutral-color-800: #c8c8c8;--cometchat-calls-neutral-color-900: #ffffff;--cometchat-calls-success-background-color: #ceecdf;--cometchat-calls-warning-background-color: #fff5cf;--cometchat-calls-error-background-color: #f4d8d8;--cometchat-calls-permission-error-color: #ff977d;--cometchat-calls-permission-error-background: #391716;--cometchat-calls-info-color: #0d66bf;--cometchat-calls-warning-color: #d08d04;--cometchat-calls-success-color: #0b9f5d;--cometchat-calls-message-seen-color: #56e8a7;--cometchat-calls-error-color: #c73c3e;--cometchat-calls-call-control-active-background: #f4cccc;--cometchat-calls-static-black: #141414;--cometchat-calls-static-white: #ffffff;--cometchat-calls-background-color-01: var( --cometchat-calls-neutral-color-50 );--cometchat-calls-background-color-02: var( --cometchat-calls-neutral-color-100 );--cometchat-calls-background-color-03: var( --cometchat-calls-neutral-color-200 );--cometchat-calls-background-color-04: var( --cometchat-calls-neutral-color-300 );--cometchat-calls-border-color-light: var( --cometchat-calls-neutral-color-200 );--cometchat-calls-border-color-default: var( --cometchat-calls-neutral-color-300 );--cometchat-calls-border-color-dark: var(--cometchat-calls-neutral-color-400);--cometchat-calls-border-color-highlight: var( --cometchat-calls-primary-color );--cometchat-calls-text-color-primary: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-text-color-secondary: var( --cometchat-calls-neutral-color-600 );--cometchat-calls-text-color-tertiary: var( --cometchat-calls-neutral-color-500 );--cometchat-calls-text-color-disabled: var( --cometchat-calls-neutral-color-400 );--cometchat-calls-text-color-white: var(--cometchat-calls-neutral-color-50);--cometchat-calls-text-color-highlight: var(--cometchat-calls-primary-color);--cometchat-calls-icon-color-primary: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-icon-color-secondary: var( --cometchat-calls-neutral-color-500 );--cometchat-calls-icon-color-tertiary: var( --cometchat-calls-neutral-color-400 );--cometchat-calls-icon-color-white: var(--cometchat-calls-neutral-color-50);--cometchat-calls-icon-color-highlight: var(--cometchat-calls-primary-color);--cometchat-calls-shimmer-background-color: var( --cometchat-calls-background-color-01 );--cometchat-calls-shimmer-gradient-color: linear-gradient( 90deg, #383838 0%, #272727 100% );--cometchat-calls-primary-button-background: var( --cometchat-calls-primary-color );--cometchat-calls-primary-button-text: var(--cometchat-calls-static-white);--cometchat-calls-primary-button-icon: var(--cometchat-calls-static-white);--cometchat-calls-secondary-button-background: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-secondary-button-text: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-secondary-button-icon: var( --cometchat-calls-neutral-color-900 );--cometchat-calls-link-button: var(--cometchat-calls-info-color);--cometchat-calls-fab-button-background: var(--cometchat-calls-primary-color);--cometchat-calls-fab-button-icon: var(--cometchat-calls-static-white);--cometchat-calls-white-hover: var(--cometchat-calls-neutral-color-100);--cometchat-calls-white-pressed: var(--cometchat-calls-neutral-color-300);--cometchat-calls-participants-list-width: 360px;--cometchat-calls-call-header-height: 56px;--cometchat-calls-call-footer-height: 88px}.cometchat-calls-call-stage-wrapper{flex:1;display:flex;flex-direction:column;min-height:0;position:relative;overflow:hidden;padding:0 var(--cometchat-calls-padding-4)}.cometchat-calls-call-screen-content-wrapper{--transition-duration: .3s;--transition-easing: cubic-bezier(.4, 0, .2, 1);height:100%;width:100%;background-color:var(--cometchat-calls-neutral-color-100);position:relative;display:flex;overflow:hidden}.cometchat-calls-call-screen-container{width:100%;height:100%}.cometchat-calls-call-screen-main-content{width:100%;transition:width var(--transition-duration) var(--transition-easing);background:var(--cometchat-calls-background-color-01);position:relative;will-change:width}.cometchat-calls-call-screen-content-wrapper:not(.cometchat-calls-call-screen--spotlight-mode) .cometchat-calls-call-stage-wrapper>div{height:100%!important;width:100%!important}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--spotlight-mode .cometchat-calls-call-screen-main-content{padding:0!important}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--spotlight-mode .cometchat-calls-call-stage-wrapper{position:relative;overflow:hidden;background:var(--cometchat-calls-background-color-01);padding:0 var(--cometchat-calls-padding-5);border-radius:var(--cometchat-calls-radius-2)}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--sidebar-mode .cometchat-calls-call-stage-wrapper{padding:0 var(--cometchat-calls-padding-5);overflow:visible;z-index:1}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--spotlight-mode .cometchat-calls-header-container{position:relative;z-index:1001;background:var(--cometchat-calls-background-color-01);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--spotlight-mode .cometchat-calls-control-pane{position:relative;z-index:100;background:var(--cometchat-calls-background-color-01)}.cometchat-calls-call-screen-sidebar-panel{width:300px;height:100%;background:var(--cometchat-calls-background-color-01);border-left:1px solid var(--cometchat-calls-border-color-light);display:flex;flex-direction:column;flex-shrink:0;position:relative;z-index:50}@media (max-width: 768px){.cometchat-calls-call-screen-sidebar-panel{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:1000;border:none;transform:translate(100%);transition:transform .3s ease}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--sidebar-mode .cometchat-calls-call-screen-sidebar-panel{transform:translate(0)}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--sidebar-mode .cometchat-calls-call-screen-main-content{display:none}}@media (max-width: 679px){.cometchat-calls-tile-grid-container .cometchat-calls-tile-label{min-height:20px;height:20px}.cometchat-calls-tile-grid-container .cometchat-calls-tile-label-name{font:var(--cometchat-calls-font-caption1-regular)}.cometchat-calls-tile-grid-container .cometchat-calls-tile-label svg{height:12px;width:12px}}.cometchat-calls-avatar-wrapper{overflow:hidden;width:100%;height:100%;display:flex;align-items:center;justify-content:center;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-extended-primary-color-500);container-type:inline-size}.cometchat-calls-avatar-image{width:100%;height:100%;object-fit:cover}.cometchat-calls-avatar-fallback{width:100%;height:100%;color:var(--cometchat-calls-static-white);font-size:min(30cqi,48px);font-weight:700;display:flex;align-items:center;justify-content:center;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-extended-primary-color-500);-webkit-user-select:none;user-select:none;font-family:Roboto,sans-serif}.cometchat-calls-frame-rate-indicator{position:absolute;top:4px;left:4px;font-size:9px;font-family:monospace;color:#ffffff80;background:#0000004d;padding:1px 4px;border-radius:3px;pointer-events:none;line-height:1.2}.cometchat-calls-more-option-container{position:relative;display:inline-block}.cometchat-calls-more-option-button{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);cursor:pointer;transition:all .2s ease;padding:0;margin:0}.cometchat-calls-more-option-button:hover{background:var(--cometchat-calls-background-color-04);transform:scale(1.1)}.cometchat-calls-more-option-button--active{background:var(--cometchat-calls-background-color-04)}.cometchat-calls-more-option-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:transparent;z-index:9999}.cometchat-calls-more-option-menu{position:absolute;top:calc(100% + 8px);right:0;background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-light);border-radius:var(--cometchat-calls-radius-3);box-shadow:0 8px 24px #0006;z-index:10000;min-width:152px;overflow:hidden;animation:cometchat-calls-menu-fade-in-below .2s ease-out;opacity:1;visibility:visible;min-height:40px;width:152px;cursor:pointer;box-sizing:border-box}.cometchat-calls-more-option-menu--above{top:auto;bottom:calc(100% + 8px);animation:cometchat-calls-menu-fade-in-above .2s ease-out}@keyframes cometchat-calls-menu-fade-in-below{0%{opacity:0;transform:scale(.95) translateY(-10px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes cometchat-calls-menu-fade-in-above{0%{opacity:0;transform:scale(.95) translateY(10px)}to{opacity:1;transform:scale(1) translateY(0)}}.cometchat-calls-more-option-menu__item{display:flex;align-items:center;width:100%;border:none;background:transparent;text-align:left;cursor:pointer;transition:background-color .2s ease;gap:var(--cometchat-calls-spacing-2);min-height:28px;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-4);box-sizing:border-box;height:48px}.cometchat-calls-more-option-menu__item:hover{background:#ffffff1a}.cometchat-calls-more-option-menu__item--selected{opacity:.6;cursor:not-allowed}.cometchat-calls-more-option-menu__item--selected:hover{background:transparent}.cometchat-calls-more-option-menu__item-text{flex:1;font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-primary)}.cometchat-calls-more-option-button .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-more-option-button--active .cometchat-calls-icon,.cometchat-calls-tile-container .cometchat-calls-more-option-button .cometchat-calls-icon{color:var(--cometchat-calls-primary-button-icon)}.cometchat-calls-more-option-menu__item .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-wave-container{height:16px;display:flex;align-items:center;justify-content:center;gap:3px;--wave-scale: 100%}.cometchat-calls-wave-rect{width:3px;height:4px;background-color:#09c26f;border-radius:1px;transition:transform .2s ease-out}.cometchat-calls-tile-label{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:var(--cometchat-calls-padding-1) var(--cometchat-calls-padding-2);position:absolute;left:var(--cometchat-calls-spacing-2);bottom:var(--cometchat-calls-spacing-2);background:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-1);gap:var(--cometchat-calls-spacing-1);min-height:24px;min-width:75px;z-index:100;max-width:calc(100% - var(--cometchat-calls-spacing-4));box-sizing:border-box}.cometchat-calls-tile-label--raised-hand{background:var(--cometchat-calls-static-white);border-radius:var(--cometchat-calls-radius-max);box-shadow:0 4px 10px #0003;align-items:center;gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-tile-label-name{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-static-white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cometchat-calls-tile-label-name--raised-hand{color:var(--cometchat-calls-static-black)}@keyframes cometchat-calls-shake-hand{0%,to{transform:rotate(0)}10%{transform:rotate(-10deg)}20%{transform:rotate(10deg)}30%{transform:rotate(-8deg)}40%{transform:rotate(8deg)}50%{transform:rotate(-6deg)}60%{transform:rotate(6deg)}70%{transform:rotate(-4deg)}80%{transform:rotate(4deg)}90%{transform:rotate(-2deg)}}.cometchat-calls-tile-label--raised-hand svg{animation:cometchat-calls-shake-hand 1s ease-in-out;transform-origin:bottom center}.cometchat-calls-tile-label .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-tile-label--raised-hand .cometchat-calls-icon{color:var(--cometchat-calls-static-black)}.cometchat-calls-video{height:100%;width:100%;object-fit:cover;position:absolute;top:0;left:0;right:0;bottom:0}.cometchat-calls-video--fade-in{opacity:0;animation:cometchat-calls-video-fade-in .3s ease forwards}@keyframes cometchat-calls-video-fade-in{0%{opacity:0}to{opacity:1}}.cometchat-calls-video--fade-out{opacity:1;animation:cometchat-calls-videoTrackFadeOut .3s ease forwards}@keyframes cometchat-calls-videoTrackFadeOut{0%{opacity:1}to{opacity:0}}.cometchat-calls-video--mirrored{transform:scaleX(-1)}.cometchat-calls-tile-container{width:100%;height:100%;background-color:var(--cometchat-calls-neutral-color-200);position:relative;display:flex;align-items:center;justify-content:center;border-radius:8px;container-type:size;transition:border .3s ease,box-shadow .3s ease}.cometchat-calls-tile-content{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;overflow:hidden;display:flex;align-items:center;justify-content:center}@container (aspect-ratio > 16/9){.cometchat-calls-tile-content{inset:0 auto;width:calc(100cqh * 16 / 9);height:100%;border-radius:0}}@container (aspect-ratio < 9/16){.cometchat-calls-tile-content{inset:auto 0;width:100%;height:calc(100cqw * 16 / 9);border-radius:0}}.cometchat-calls-tile-container--speaking{border:3px solid var(--cometchat-calls-primary-color);box-shadow:0 0 12px #6852d666}.cometchat-calls-tile-container .cometchat-calls-more-option-container{position:absolute;top:6px;right:6px;z-index:1000;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease}.cometchat-calls-tile-container:hover .cometchat-calls-more-option-container{opacity:1;visibility:visible}.cometchat-calls-tile-avatar-container{width:30%;min-width:40px;min-height:40px;max-width:150px;max-height:150px;flex-shrink:0;display:flex;align-items:center;justify-content:center;aspect-ratio:1}.cometchat-calls-tile-container .cometchat-calls-more-option-overlay{position:initial;z-index:1}.cometchat-calls-tile-video--contain{object-fit:contain}.cometchat-calls-sidebar-layout-container{width:100%;height:100%;display:flex;flex-direction:column}.cometchat-calls-sidebar-layout-container--landscape{flex-direction:row}.cometchat-calls-sidebar-layout-container--has-sidebar{gap:8px}.cometchat-calls-sidebar-layout-main-tile{flex:1;min-width:0;min-height:0}.cometchat-calls-sidebar-layout-sidebar{position:relative;display:flex;flex-direction:row;align-items:center;overflow:visible}.cometchat-calls-sidebar-layout-container--landscape .cometchat-calls-sidebar-layout-sidebar{flex-direction:column}.cometchat-calls-sidebar-layout-grid{display:grid;flex:1;gap:8px}.cometchat-calls-pagination-btn{position:absolute;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid rgba(255,255,255,.1);border-radius:var(--cometchat-calls-radius-max);background:#1414144d;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);cursor:pointer;z-index:200;transition:background .2s ease,border-color .2s ease,transform .15s ease,box-shadow .2s ease;padding:0;box-shadow:0 2px 10px #00000040}.cometchat-calls-pagination-btn:hover{background:#14141480;border-color:#ffffff2e;transform:scale(1.08);box-shadow:0 4px 14px #00000059}.cometchat-calls-pagination-btn:active{background:#14141499;transform:scale(.96);box-shadow:0 1px 4px #0000004d}.cometchat-calls-pagination-btn--up,.cometchat-calls-pagination-btn--down{left:50%;transform:translate(-50%)}.cometchat-calls-pagination-btn--up{top:0}.cometchat-calls-pagination-btn--down{bottom:0}.cometchat-calls-pagination-btn--up:hover,.cometchat-calls-pagination-btn--down:hover{transform:translate(-50%) scale(1.08)}.cometchat-calls-pagination-btn--up:active,.cometchat-calls-pagination-btn--down:active{transform:translate(-50%) scale(.96)}.cometchat-calls-pagination-btn--left,.cometchat-calls-pagination-btn--right{top:50%;transform:translateY(-50%)}.cometchat-calls-pagination-btn--left{left:0}.cometchat-calls-pagination-btn--right{right:0}.cometchat-calls-pagination-btn--left:hover,.cometchat-calls-pagination-btn--right:hover{transform:translateY(-50%) scale(1.08)}.cometchat-calls-pagination-btn--left:active,.cometchat-calls-pagination-btn--right:active{transform:translateY(-50%) scale(.96)}.cometchat-calls-pagination-dots{position:absolute;bottom:-15px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:var(--cometchat-calls-spacing-1);z-index:200;padding:var(--cometchat-calls-spacing-1) var(--cometchat-calls-spacing-2);background:none;border:none;box-shadow:none}.cometchat-calls-pagination-dots--landscape{flex-direction:column;bottom:auto;left:auto;right:-16px;top:50%;transform:translateY(-50%);padding:var(--cometchat-calls-spacing-2) var(--cometchat-calls-spacing-1)}.cometchat-calls-pagination-dot{width:5px;height:5px;border:none;padding:0;border-radius:var(--cometchat-calls-radius-max);background:#fff;opacity:.35;transition:opacity .25s ease,transform .25s ease}.cometchat-calls-pagination-dot--active{opacity:.8;transform:scale(1.25)}.cometchat-calls-pagination-btn .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-primary)}.cometchat-calls-loading-spinner{animation:cometchat-calls-spin 1s linear infinite}@keyframes cometchat-calls-spin{to{transform:rotate(360deg)}}.cometchat-calls-processing-overlay{position:absolute;top:0;left:0;bottom:0;right:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:#000c;gap:16px}.cometchat-calls-processing-message{font:var(--cometchat-calls-font-heading4-regular);color:var(--cometchat-calls-icon-color-primary);text-align:center;margin-left:16px;margin-right:16px}.cometchat-calls-processing-message.cometchat-calls-description{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary)}.cometchat-calls-draggable-tile{border-radius:var(--cometchat-calls-radius-2);overflow:hidden;box-shadow:0 8px 32px #0000004d;border:2px solid var(--cometchat-calls-border-color-default);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);user-select:none;transition:none;box-sizing:border-box;touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none}body.cometchat-calls-dragging{overflow:hidden;position:fixed;width:100%;touch-action:none}.cometchat-calls-draggable-tile.cometchat-calls-draggable-tile--dragging{box-shadow:0 16px 48px #0006;transform:scale(1.02)}.cometchat-calls-draggable-tile-content{width:100%;height:100%;pointer-events:none;overflow:hidden}.cometchat-calls-draggable-tile-resize-handle{position:absolute;opacity:0;transition:opacity .2s ease;z-index:10;border-radius:50%;width:16px;height:16px}.cometchat-calls-draggable-tile:hover .cometchat-calls-draggable-tile-resize-handle{opacity:1}.cometchat-calls-draggable-tile-resize-handle--bottom-right{bottom:-6px;right:-6px;cursor:nw-resize}.cometchat-calls-draggable-tile-resize-handle--bottom-left{bottom:-6px;left:-6px;cursor:ne-resize}.cometchat-calls-draggable-tile-resize-handle--top-right{top:-6px;right:-6px;cursor:sw-resize}.cometchat-calls-draggable-tile-resize-handle--top-left{top:-6px;left:-6px;cursor:se-resize}@media (max-width: 768px){.cometchat-calls-draggable-tile-resize-handle{width:20px;height:20px}.cometchat-calls-draggable-tile-resize-handle--bottom-right{bottom:-8px;right:-8px}.cometchat-calls-draggable-tile-resize-handle--bottom-left{bottom:-8px;left:-8px}.cometchat-calls-draggable-tile-resize-handle--top-right{top:-8px;right:-8px}.cometchat-calls-draggable-tile-resize-handle--top-left{top:-8px;left:-8px}}.cometchat-calls-spotlight-container .cometchat-calls-draggable-tile .cometchat-calls-tile-label{height:16px;width:16px;min-width:75px}.cometchat-calls-draggable-tile.cometchat-calls-draggable-tile--dragging *{-webkit-user-select:none;user-select:none;pointer-events:none}.cometchat-calls-draggable-tile.cometchat-calls-draggable-tile--animating{transition-property:left,top;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.cometchat-calls-draggable-tile:hover .cometchat-calls-draggable-tile-resize-handle:after{opacity:1}.cometchat-calls-spotlight-container{position:relative;width:100%;height:100%;background:var(--cometchat-calls-neutral-color-100);overflow:hidden;border-radius:inherit}.cometchat-calls-spotlight-main-view{width:100%;height:100%;position:relative}.cometchat-calls-spotlight-main-view .cometchat-calls-call-screen{width:100%;height:100%;border-radius:0}.cometchat-calls-draggable-tile .cometchat-calls-tile-avatar-container{display:flex;align-items:center;justify-content:center;height:60px;width:60px}.cometchat-calls-draggable-tile .cometchat-calls-tile-avatar-container .cometchat-calls-avatar-fallback{font:var(--cometchat-calls-font-heading1-bold);color:var(--cometchat-calls-static-white)}.cometchat-calls-spotlight-main-view .cometchat-calls-video{width:100%;height:100%}.cometchat-calls-spotlight-container .cometchat-calls-draggable-tile{position:absolute;z-index:1000;max-width:calc(100% - 40px);max-height:calc(100% - 40px)}.cometchat-calls-draggable-tile .cometchat-calls-tile-label{box-sizing:border-box;min-width:60px}.cometchat-calls-draggable-tile .cometchat-calls-tile-label-name{font:var(--cometchat-calls-font-caption1-regular)}.cometchat-calls-draggable-tile .cometchat-calls-tile-label svg{height:12px;width:12px}@media (max-width: 679px){.cometchat-calls-spotlight-container .cometchat-calls-tile-label{min-height:10px;height:10px;min-width:60px}.cometchat-calls-spotlight-container .cometchat-calls-tile-label-name{font:var(--cometchat-calls-font-caption2-regular)}.cometchat-calls-spotlight-container .cometchat-calls-tile-label svg{height:12px;width:12px}}.cometchat-calls-confirmation-dialog-backdrop{position:absolute;top:0;left:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;background-color:#000c;z-index:1000}.cometchat-calls-confirmation-dialog{max-width:372px;width:90%;background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-5);box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;padding:var(--cometchat-calls-padding-8) var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-5);box-sizing:border-box}.cometchat-calls-confirmation-dialog-content{display:flex;flex-direction:column;align-items:center;gap:var(--cometchat-calls-spacing-5)}.cometchat-calls-confirmation-dialog-text{display:flex;flex-direction:column;align-items:flex-start;gap:var(--cometchat-calls-spacing-2);width:100%}.cometchat-calls-confirmation-dialog-title{font:var(--cometchat-calls-font-heading2-medium);color:var(--cometchat-calls-text-color-primary);text-align:center;margin:0;width:100%}.cometchat-calls-confirmation-dialog-description{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary);text-align:center;margin:0;width:100%;line-height:1.2}.cometchat-calls-confirmation-dialog-input{width:100%;height:40px;padding:0 var(--cometchat-calls-padding-3);font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-primary);background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-2);box-sizing:border-box;outline:none}.cometchat-calls-confirmation-dialog-input:focus{border-color:var(--cometchat-calls-extended-primary-color-500)}.cometchat-calls-confirmation-dialog-button-primary:disabled{opacity:.5;cursor:not-allowed}.cometchat-calls-confirmation-dialog-buttons{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-3);width:100%}.cometchat-calls-confirmation-dialog-button{display:flex;height:40px;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);justify-content:center;align-items:center;border-radius:var(--cometchat-calls-radius-2);font:var(--cometchat-calls-font-button-medium);cursor:pointer;border:none;flex:1;transition:all .2s ease}.cometchat-calls-confirmation-dialog-button-secondary{background:transparent;border:1px solid var(--cometchat-calls-border-color-dark);color:var(--cometchat-calls-text-color-primary)}.cometchat-calls-confirmation-dialog-button-secondary:hover{background:var(--cometchat-calls-white-hover)}.cometchat-calls-confirmation-dialog-button-secondary:active{background:var(--cometchat-calls-white-pressed)}.cometchat-calls-confirmation-dialog-button-primary{background:var(--cometchat-calls-primary-button-background);color:var(--cometchat-calls-primary-button-text)}.cometchat-calls-confirmation-dialog-button-primary:hover{background:var(--cometchat-calls-extended-primary-color-700)}.cometchat-calls-confirmation-dialog-button-primary:active{background:var(--cometchat-calls-extended-primary-color-800)}@media (max-width: 480px){.cometchat-calls-confirmation-dialog{max-width:340px;padding:var(--cometchat-calls-padding-6) var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-4)}.cometchat-calls-confirmation-dialog-buttons{flex-direction:column;gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-confirmation-dialog-button{width:100%}}.cometchat-calls-more-menu-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1049;background:transparent}.cometchat-calls-more-menu-container{position:fixed;background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-light);border-radius:var(--cometchat-calls-radius-2);box-shadow:0 var(--cometchat-calls-spacing-1) var(--cometchat-calls-spacing-3) #00000026,0 var(--cometchat-calls-spacing) var(--cometchat-calls-spacing-2) #0000001a;padding:var(--cometchat-calls-padding-1) 0;z-index:1050;min-width:200px;max-width:280px;width:fit-content;max-height:calc(100vh - var(--cometchat-calls-spacing-4));overflow:hidden;top:auto;left:auto;bottom:auto;right:auto}.cometchat-calls-more-menu-item{display:flex;align-items:center;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);cursor:pointer;background:transparent;-webkit-user-select:none;user-select:none;opacity:1;border:none;width:100%;text-align:left;transition:background-color .15s ease}.cometchat-calls-more-menu-item-label{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-primary);white-space:nowrap}.cometchat-calls-more-menu-item.cometchat-calls-more-menu-item--selected{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-more-menu-item.cometchat-calls-more-menu-item--disabled{cursor:not-allowed;opacity:.5}.cometchat-calls-more-menu-item:not(.cometchat-calls-more-menu-item--disabled):hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-more-menu-item:not(.cometchat-calls-more-menu-item--disabled):active{background:var(--cometchat-calls-background-color-03)}@media (max-width: 768px){.cometchat-calls-more-menu-container{max-width:calc(100vw - var(--cometchat-calls-spacing-4));overflow:hidden}}.cometchat-calls-more-menu-item .cometchat-calls-icon{color:var(--cometchat-calls-text-color-secondary)}.cometchat-calls-settings-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000}.cometchat-calls-settings-error-notification{display:flex;align-items:flex-start;gap:var(--cometchat-calls-spacing-3);padding:var(--cometchat-calls-padding-4);margin-bottom:var(--cometchat-calls-spacing-6);background:var(--cometchat-calls-permission-error-background);border-radius:var(--cometchat-calls-radius-2);color:var(--cometchat-calls-permission-error-color)}.cometchat-calls-settings-error-notification__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin-top:2px}.cometchat-calls-settings-error-notification__content{flex:1;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-1)}.cometchat-calls-settings-error-notification__title{color:var(--cometchat-calls-permission-error-color);font:var(--cometchat-calls-font-body-medium);margin:0;line-height:1.4}.cometchat-calls-settings-error-notification__message{color:var(--cometchat-calls-permission-error-color);font:var(--cometchat-calls-font-caption1-regular);margin:0;line-height:1.4;opacity:.9}.cometchat-calls-settings-modal{background:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-3);display:flex;flex-direction:row;overflow:hidden;box-shadow:0 var(--cometchat-calls-spacing-5) var(--cometchat-calls-spacing-10) #00000080;min-height:600px;min-width:680px;flex-grow:1;flex-shrink:1;max-height:50vh;max-width:700px}.cometchat-calls-settings-header{display:flex;align-items:center;justify-content:flex-end;padding:var(--cometchat-calls-padding-5);background:var(--cometchat-calls-background-color-01)}.cometchat-calls-settings-tab{background:none;border:none;cursor:pointer;transition:all .2s ease;display:flex;align-items:center}.cometchat-calls-settings-body{display:flex;flex:1;overflow:hidden}.cometchat-calls-settings-sidebar-wrapper{min-width:220px;border-right:1px solid var(--cometchat-calls-border-color-light);overflow:hidden;max-width:30%;flex-shrink:1;flex-grow:1}.cometchat-calls-settings-sidebar__header{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-heading2-medium);width:fit-content;min-height:24px;display:flex;justify-content:flex-start;align-items:center;padding:var(--cometchat-calls-padding-5);margin:0}.cometchat-calls-settings-sidebar{width:100%;height:100%;background:var(--cometchat-calls-background-color-01);padding:0;display:flex;flex-direction:column}.cometchat-calls-settings-tab{color:var(--cometchat-calls-text-color-primary);padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);text-align:left;gap:var(--cometchat-calls-spacing-3);font:var(--cometchat-calls-font-body-medium);justify-content:flex-start}.cometchat-calls-settings-tab:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-tab--active{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-settings-tab__label{flex:1}.cometchat-calls-settings-content-wrapper{height:inherit;width:100%;display:flex;flex-direction:column;justify-content:space-between}.cometchat-calls-settings-content{flex:1;padding:var(--cometchat-calls-padding-6);overflow-y:auto;background:var(--cometchat-calls-background-color-01)}.cometchat-calls-settings-content::-webkit-scrollbar{width:8px}.cometchat-calls-settings-content::-webkit-scrollbar-track{background:var(--cometchat-calls-background-color-01)}.cometchat-calls-settings-content::-webkit-scrollbar-thumb{background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-3)}.cometchat-calls-settings-content::-webkit-scrollbar-thumb:hover{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-settings-tab-content{display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-6)}.cometchat-calls-settings-device-section{display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-settings-device-label{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-medium);margin-bottom:var(--cometchat-calls-margin-2)}.cometchat-calls-settings-dropdown{position:relative;width:100%;display:flex;height:fit-content}.cometchat-calls-settings-dropdown__header{display:flex;align-items:center;justify-content:space-between;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-2);color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);cursor:pointer;transition:all .2s ease;min-height:24px;width:100%}.cometchat-calls-settings-dropdown__header:hover{border-color:var(--cometchat-calls-border-color-dark);background:var(--cometchat-calls-background-color-03)}.cometchat-calls-settings-dropdown__header--disabled{background:var(--cometchat-calls-background-color-02);border-color:var(--cometchat-calls-border-color-light);cursor:not-allowed;opacity:.6}.cometchat-calls-settings-dropdown__header--disabled:hover{background:var(--cometchat-calls-background-color-02);border-color:var(--cometchat-calls-border-color-light)}.cometchat-calls-settings-dropdown__selected{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-3);flex:1}.cometchat-calls-settings-dropdown__icon{height:24px;width:24px;display:flex;align-items:center;justify-content:center}.cometchat-calls-settings-dropdown__text{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);width:100%;display:flex;justify-content:flex-start;align-items:center}.cometchat-calls-settings-dropdown__arrow{display:flex;align-items:center;justify-content:center;transition:transform .2s ease;transform:rotate(180deg)}.cometchat-calls-settings-dropdown__arrow--rotated{transform:rotate(0)}.cometchat-calls-settings-dropdown__list{position:absolute;top:100%;left:0;right:0;background:var(--cometchat-calls-background-color-01);max-height:200px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#383838 transparent;z-index:1001;box-shadow:0 var(--cometchat-calls-spacing-2) var(--cometchat-calls-spacing-4) #0003;border-radius:var(--cometchat-calls-radius-2);list-style:none;padding:0;margin:0;margin-top:var(--cometchat-calls-margin-1);border:1px solid var(--cometchat-calls-border-color-light)}.cometchat-calls-settings-dropdown__list::-webkit-scrollbar{width:4px}.cometchat-calls-settings-dropdown__list::-webkit-scrollbar-track{background:transparent}.cometchat-calls-settings-dropdown__list::-webkit-scrollbar-thumb{background:#383838;border-radius:var(--cometchat-calls-radius-max)}.cometchat-calls-settings-dropdown__option{padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);line-height:1.4;cursor:pointer;transition:background-color .2s ease;display:flex;align-items:center;justify-content:space-between}.cometchat-calls-settings-dropdown__option:last-child{border-bottom:none}.cometchat-calls-settings-dropdown__option:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-dropdown__option--selected{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-settings-dropdown__option-text{color:inherit;font-size:inherit}.cometchat-calls-settings-dropdown__checkmark{color:var(--cometchat-calls-text-color-primary);font-weight:700;font-size:16px}.cometchat-calls-settings-video-preview{margin-bottom:var(--cometchat-calls-spacing-6)}.cometchat-calls-settings-video-preview__container{position:relative;width:100%;height:240px;background:var(--cometchat-calls-background-color-02);border-radius:var(--cometchat-calls-radius-3);border:1px solid var(--cometchat-calls-border-color-light);display:flex;align-items:center;justify-content:center;overflow:hidden}.cometchat-calls-settings-video-preview__video--mirrored{transform:scaleX(-1)}.cometchat-calls-settings-video-preview__placeholder,.cometchat-calls-settings-video-preview__loading,.cometchat-calls-settings-video-preview__error{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--cometchat-calls-spacing-3);color:var(--cometchat-calls-text-color-secondary);font:var(--cometchat-calls-font-body-regular);background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-loading-spinner{width:24px;height:24px;border:2px solid var(--cometchat-calls-border-color-light);border-top:2px solid var(--cometchat-calls-primary-color);border-radius:var(--cometchat-calls-radius-max);animation:cometchat-calls-spin 1s linear infinite}@keyframes cometchat-calls-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.cometchat-calls-settings-video-controls{display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-6)}.cometchat-calls-settings-checkbox{display:flex;align-items:center;margin:var(--cometchat-calls-spacing-4) 0}.cometchat-calls-settings-checkbox__container{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-3);cursor:pointer;-webkit-user-select:none;user-select:none}.cometchat-calls-settings-checkbox__input{display:none}.cometchat-calls-settings-checkbox__custom{width:16px;height:16px;border:2px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-1);background:var(--cometchat-calls-background-color-01);position:relative;transition:all .2s ease}.cometchat-calls-settings-checkbox__input:checked+.cometchat-calls-settings-checkbox__custom{background:var(--cometchat-calls-primary-button-background);border-color:var(--cometchat-calls-primary-button-background)}.cometchat-calls-settings-checkbox__input:checked+.cometchat-calls-settings-checkbox__custom:after{content:"✓";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--cometchat-calls-primary-button-text);font-size:12px;font-weight:700}.cometchat-calls-settings-checkbox__label{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular)}.cometchat-calls-settings-notice{margin-top:calc(0px - var(--cometchat-calls-margin-5))}.cometchat-calls-settings-notice__text{color:var(--cometchat-calls-text-color-secondary);font:var(--cometchat-calls-font-caption1-regular)}.cometchat-calls-settings-placeholder{display:flex;align-items:center;justify-content:center;padding:var(--cometchat-calls-padding-10)}.cometchat-calls-settings-placeholder__text{color:var(--cometchat-calls-text-color-secondary);font:var(--cometchat-calls-font-body-regular);text-align:center}.cometchat-calls-settings-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--cometchat-calls-spacing-3);padding:var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-6);background:var(--cometchat-calls-background-color-01)}.cometchat-calls-settings-button{padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);border-radius:var(--cometchat-calls-radius-2);font:var(--cometchat-calls-font-caption1-regular);cursor:pointer;transition:all .2s ease;border:none;min-width:120px;min-height:32px}.cometchat-calls-settings-button--secondary{background:transparent;color:var(--cometchat-calls-text-color-primary);border:1px solid var(--cometchat-calls-border-color-default)}.cometchat-calls-settings-button--secondary:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-button--primary{background:var(--cometchat-calls-primary-button-background);color:var(--cometchat-calls-primary-button-text)}.cometchat-calls-settings-button--primary:hover{opacity:.9}@media (max-width: 768px){.cometchat-calls-settings-overlay{align-items:stretch;justify-content:stretch;padding:0}.cometchat-calls-settings-modal{width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;min-width:0!important;min-height:0!important;border-radius:0!important;flex-direction:column;overflow:hidden}.cometchat-calls-settings-body{flex-direction:column;overflow:hidden}.cometchat-calls-settings-sidebar-wrapper{min-width:0;max-width:none;border-right:none;border-bottom:1px solid var(--cometchat-calls-border-color-light);flex-shrink:0;max-height:fit-content;height:fit-content}.cometchat-calls-settings-sidebar__header{display:flex;align-items:center;justify-content:space-between;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);border-bottom:none;position:relative}.cometchat-calls-settings-sidebar{width:100%;height:auto;flex-direction:row;overflow-x:auto;overflow-y:hidden;padding:0;background:var(--cometchat-calls-background-color-01);justify-content:space-evenly;height:40px}.cometchat-calls-settings-tab{min-width:120px;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);text-align:center;justify-content:center;flex-direction:column;gap:var(--cometchat-calls-spacing-2);font:var(--cometchat-calls-font-caption1-medium);border-bottom:3px solid transparent;border-radius:0;white-space:nowrap}.cometchat-calls-settings-tab svg{display:none}.cometchat-calls-settings-tab:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-settings-tab--active{background:var(--cometchat-calls-background-color-01);border-bottom-color:var(--cometchat-calls-primary-color);color:var(--cometchat-calls-primary-color)}.cometchat-calls-settings-tab__label{flex:none;font:var(--cometchat-calls-font-body-medium)}.cometchat-calls-settings-content-wrapper{height:auto;flex:1;display:flex;flex-direction:column;overflow:hidden}.cometchat-calls-settings-content{padding:var(--cometchat-calls-padding-5);flex:1;overflow-y:auto}.cometchat-calls-settings-footer{padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);flex-shrink:0;border-top:1px solid var(--cometchat-calls-border-color-light);min-height:fit-content}.cometchat-calls-settings-button{min-width:100px;font:var(--cometchat-calls-font-caption1-medium)}.cometchat-calls-settings-video-preview__container{height:200px}.cometchat-calls-settings-dropdown__list{max-height:150px}}@media (max-width: 480px){.cometchat-calls-settings-sidebar{padding:0}.cometchat-calls-settings-tab{min-width:100px;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-1)}.cometchat-calls-settings-tab__label{font-size:11px}.cometchat-calls-settings-content{padding:var(--cometchat-calls-padding-4)}.cometchat-calls-settings-footer{flex-direction:column;gap:var(--cometchat-calls-spacing-2);padding:var(--cometchat-calls-padding-4)}.cometchat-calls-settings-button{width:100%;min-width:0}.cometchat-calls-settings-video-preview__container{height:160px}.cometchat-calls-settings-device-label{font:var(--cometchat-calls-font-caption1-medium)}.cometchat-calls-settings-dropdown__header{padding:var(--cometchat-calls-padding-3);font:var(--cometchat-calls-font-caption1-regular)}}.cometchat-calls-settings-tab .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-settings-dropdown__icon .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-settings-dropdown__arrow .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-settings-error-notification__icon .cometchat-calls-icon{color:var(--cometchat-calls-permission-error-color)}.cometchat-calls-audio-control{position:relative;display:inline-block}.cometchat-calls-audio-control__wrapper{display:flex;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03);overflow:hidden;gap:var(--cometchat-calls-spacing-2);justify-content:space-evenly;align-items:center;flex-shrink:1;height:inherit;cursor:pointer;min-height:56px;min-width:105px}.cometchat-calls-audio-control__wrapper--active{background-color:var(--cometchat-calls-call-control-active-background)}.cometchat-calls-audio-control__warning{height:fit-content;width:fit-content;position:absolute;top:-2px;right:-6px}.cometchat-calls-audio-control__button-wrapper{padding-left:var(--cometchat-calls-padding-3)}.cometchat-calls-audio-control__arrow-wrapper{padding-right:var(--cometchat-calls-padding-3)}.cometchat-calls-audio-control__button-wrapper,.cometchat-calls-audio-control__arrow-wrapper{height:100%;flex:1;min-height:inherit;justify-content:center;display:flex;align-items:center}.cometchat-calls-audio-control__arrow-wrapper[aria-disabled=true]{cursor:not-allowed;opacity:.5}.cometchat-calls-audio-control__button,.cometchat-calls-audio-control__arrow-button{display:flex;align-items:center;justify-content:center;border:none;background:none;padding:0;cursor:pointer;max-height:24px;max-width:24px;flex-shrink:1;min-width:14px;min-height:14px;width:24px;height:24px;flex-grow:1;transition:transform .15s ease,opacity .15s ease}.cometchat-calls-audio-control__button:hover,.cometchat-calls-audio-control__arrow-button:hover{transform:scale(1.05)}.cometchat-calls-audio-control__arrow-button{border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-04)}.cometchat-calls-audio-control__arrow-button:disabled{cursor:not-allowed}.cometchat-calls-audio-control__wrapper--active .cometchat-calls-audio-control__arrow-button{background:var(--cometchat-calls-error-color)}.cometchat-calls-audio-control__divider{height:30px;width:2px;background:var(--cometchat-calls-border-color-default);opacity:.2}.cometchat-calls-audio-control__wrapper--active .cometchat-calls-audio-control__divider{background:var(--cometchat-calls-error-color)}.cometchat-calls-audio-control__dropdown-wrapper{position:absolute;bottom:100%;left:0;right:0;min-width:320px;width:fit-content;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-3);z-index:1000}.cometchat-calls-audio-control__dropdown-bar{background:var(--cometchat-calls-background-color-04);border-radius:var(--cometchat-calls-radius-max);box-shadow:0 4px 16px #00000026;margin-bottom:var(--cometchat-calls-margin-2);display:flex;gap:var(--cometchat-calls-spacing-2);min-width:320px;z-index:1000;width:fit-content;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-2)}.cometchat-calls-audio-control__section{flex:1;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-2);border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03)}.cometchat-calls-audio-control__section:last-child{flex:0 0 auto;justify-content:center;align-items:center;display:flex}.cometchat-calls-audio-control__section--settings{background:none}.cometchat-calls-audio-control__settings-button{width:40px;height:40px;border-radius:var(--cometchat-calls-radius-2);background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease,transform .15s ease}.cometchat-calls-audio-control__settings-button:hover{background:var(--cometchat-calls-background-color-02);transform:scale(1.05)}.cometchat-calls-audio-control__settings-button:focus{outline:2px solid var(--cometchat-calls-primary-color);outline-offset:2px}.cometchat-calls-audio-control__device-menu{background:var(--cometchat-calls-background-color-01);width:fit-content;margin-left:var(--cometchat-calls-margin-4);border-radius:var(--cometchat-calls-radius-3);min-width:260px;padding:var(--cometchat-calls-padding-2) 0 var(--cometchat-calls-padding-2) 0;box-shadow:0 4px 12px #00000026;border:1px solid var(--cometchat-calls-border-color-light)}.cometchat-calls-audio-control__device-menu-speaker{align-self:flex-end}.cometchat-calls-audio-control__device-menu-item{padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);background:var(--cometchat-calls-background-color-01);color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-heading4-regular);display:flex;justify-content:flex-start;align-items:center;transition:background-color .15s ease;cursor:pointer;position:relative}.cometchat-calls-audio-control__device-menu-item:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-audio-control__device-menu-icon{height:24px;width:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-audio-control__device-menu-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cometchat-calls-audio-control__device-menu-loader{width:16px;height:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-audio-selector{position:relative;width:100%;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max)}.cometchat-calls-audio-selector__button{width:100%;border:none;border-radius:var(--cometchat-calls-radius-max);padding:0;cursor:pointer;transition:background-color .2s ease,transform .15s ease;background:var(--cometchat-calls-background-color-03)}.cometchat-calls-audio-selector__button:hover{background:var(--cometchat-calls-background-color-02);transform:translateY(-1px)}.cometchat-calls-audio-selector__button:disabled{opacity:.5;cursor:not-allowed;transform:none}.cometchat-calls-audio-selector__content{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-2);padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3);text-align:left;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);min-width:200px;max-width:230px}.cometchat-calls-audio-selector__device-label{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cometchat-calls-audio-selector__arrow{flex-shrink:0;transform:rotate(0);transition:transform .2s ease}.cometchat-calls-audio-selector__arrow--open{transform:rotate(180deg)}.cometchat-calls-audio-selector__content svg{display:block;flex-shrink:0}.cometchat-calls-audio-control__arrow-button-open{transform:rotate(180deg)}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__arrow-wrapper,.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__divider,.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__dropdown-wrapper{display:none}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__button-wrapper{padding:0}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__wrapper:hover{background:var(--cometchat-calls-background-color-04);transform:scale(1.05)}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__wrapper--active:hover{background:var(--cometchat-calls-call-control-active-background);transform:scale(1.05)}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__wrapper{width:40px;height:40px;min-width:40px;max-width:40px;min-height:40px;max-height:40px;padding:var(--cometchat-calls-padding-2);justify-content:center;border-radius:var(--cometchat-calls-radius-max);flex-shrink:0}.cometchat-calls-control-pane--mobile .cometchat-calls-audio-control__button{width:24px;height:24px;min-width:24px;min-height:24px;max-width:24px;max-height:24px}@media (prefers-contrast: high){.cometchat-calls-audio-control__settings-button:focus,.cometchat-calls-audio-selector__button:focus{outline:3px solid;outline-offset:2px}.cometchat-calls-audio-control__device-menu{border:2px solid}}@media (prefers-reduced-motion: reduce){.cometchat-calls-audio-control__button,.cometchat-calls-audio-control__arrow-button,.cometchat-calls-audio-control__settings-button,.cometchat-calls-audio-selector__button,.cometchat-calls-audio-selector__arrow{transition:none}.cometchat-calls-audio-control__device-menu-loader svg{animation:none}}.cometchat-calls-audio-control__wrapper .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-audio-control__wrapper--active .cometchat-calls-audio-control__button .cometchat-calls-icon{color:var(--cometchat-calls-error-color)}.cometchat-calls-audio-control__warning .cometchat-calls-icon{color:var(--cometchat-calls-warning-color)}.cometchat-calls-audio-control__dropdown-bar .cometchat-calls-icon,.cometchat-calls-audio-control__device-menu .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-video-control{position:relative;display:inline-block}.cometchat-calls-video-control__wrapper{display:flex;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03);overflow:hidden;gap:var(--cometchat-calls-spacing-2);justify-content:space-evenly;align-items:center;flex-shrink:1;height:inherit;cursor:pointer;min-height:56px;min-width:105px}.cometchat-calls-video-control__button-wrapper{padding-left:var(--cometchat-calls-padding-3)}.cometchat-calls-video-control__arrow-wrapper{padding-right:var(--cometchat-calls-padding-3)}.cometchat-calls-video-control__button-wrapper,.cometchat-calls-video-control__arrow-wrapper{height:100%;flex:1;min-height:inherit;justify-content:center;display:flex;align-items:center}.cometchat-calls-video-control__arrow-wrapper[aria-disabled=true]{cursor:not-allowed;opacity:.5}.cometchat-calls-video-control__wrapper--active{background-color:var(--cometchat-calls-call-control-active-background)}.cometchat-calls-video-control__button,.cometchat-calls-video-control__arrow-button{display:flex;align-items:center;justify-content:center;border:none;background:none;padding:0;cursor:pointer;max-height:24px;max-width:24px;flex-shrink:1;min-width:14px;min-height:14px;width:24px;height:24px;flex-grow:1;transition:transform .15s ease,opacity .15s ease}.cometchat-calls-video-control__button:hover,.cometchat-calls-video-control__arrow-button:hover{transform:scale(1.05)}.cometchat-calls-video-control__arrow-button{border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-04)}.cometchat-calls-video-control__arrow-button-open{transform:rotate(180deg)}.cometchat-calls-video-control__arrow-button:disabled{cursor:not-allowed}.cometchat-calls-video-control__wrapper--active .cometchat-calls-video-control__arrow-button{background:var(--cometchat-calls-error-color)}.cometchat-calls-video-control__divider{height:30px;width:2px;background:var(--cometchat-calls-border-color-default);opacity:.2}.cometchat-calls-video-control__wrapper--active .cometchat-calls-video-control__divider{background:var(--cometchat-calls-error-color)}.cometchat-calls-video-control__dropdown-wrapper{position:absolute;bottom:100%;left:0;right:0;min-width:280px;width:fit-content;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-3);z-index:1000}.cometchat-calls-video-control__dropdown-bar{background:var(--cometchat-calls-background-color-04);border-radius:var(--cometchat-calls-radius-max);box-shadow:0 4px 16px #00000026;margin-bottom:var(--cometchat-calls-margin-2);display:flex;gap:var(--cometchat-calls-spacing-2);min-width:280px;z-index:1000;width:fit-content;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-2)}.cometchat-calls-video-control__section{flex:1;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-2);border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03)}.cometchat-calls-video-control__section:last-child{flex:0 0 auto;justify-content:center;align-items:center;display:flex}.cometchat-calls-video-control__section--settings{background:none}.cometchat-calls-video-control__settings-button{width:40px;height:40px;border-radius:var(--cometchat-calls-radius-2);background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease,transform .15s ease}.cometchat-calls-video-control__settings-button:hover{background:var(--cometchat-calls-background-color-02);transform:scale(1.05)}.cometchat-calls-video-control__device-menu{background:var(--cometchat-calls-background-color-01);width:fit-content;margin-left:var(--cometchat-calls-margin-4);border-radius:var(--cometchat-calls-radius-3);min-width:240px;padding:var(--cometchat-calls-padding-2) 0 var(--cometchat-calls-padding-2) 0;box-shadow:0 4px 12px #00000026;border:1px solid var(--cometchat-calls-border-color-light)}.cometchat-calls-video-control__device-menu-item{padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);background:var(--cometchat-calls-background-color-01);color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-heading4-regular);display:flex;justify-content:flex-start;align-items:center;transition:background-color .15s ease;cursor:pointer;position:relative}.cometchat-calls-video-control__device-menu-item:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-video-control__device-menu-icon{height:24px;width:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-video-control__device-menu-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cometchat-calls-video-control__device-menu-loader{width:16px;height:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-video-selector{position:relative;width:100%;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max)}.cometchat-calls-video-selector__button{width:100%;border:none;border-radius:var(--cometchat-calls-radius-max);padding:0;cursor:pointer;transition:background-color .2s ease,transform .15s ease;background:var(--cometchat-calls-background-color-03)}.cometchat-calls-video-selector__button:hover{background:var(--cometchat-calls-background-color-02);transform:translateY(-1px)}.cometchat-calls-video-selector__button:disabled{opacity:.5;cursor:not-allowed;transform:none}.cometchat-calls-video-selector__content{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-2);padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3);text-align:left;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);min-width:180px}.cometchat-calls-video-selector__device-label{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-body-regular);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cometchat-calls-video-selector__arrow{flex-shrink:0;transform:rotate(0);transition:transform .2s ease}.cometchat-calls-video-selector__arrow--open{transform:rotate(180deg)}.cometchat-calls-video-selector__content svg{display:block;flex-shrink:0}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__arrow-wrapper,.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__divider,.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__dropdown-wrapper{display:none}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__button-wrapper{padding:0}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__wrapper:hover{background:var(--cometchat-calls-background-color-04);transform:scale(1.05)}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__wrapper--active:hover{background:var(--cometchat-calls-call-control-active-background);transform:scale(1.05)}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__wrapper{width:40px;height:40px;min-width:40px;max-width:40px;min-height:40px;max-height:40px;padding:var(--cometchat-calls-padding-2);justify-content:center;flex-shrink:0}.cometchat-calls-control-pane--mobile .cometchat-calls-video-control__button{width:24px;height:24px;min-width:24px;min-height:24px;max-width:24px;max-height:24px}.cometchat-calls-video-control__warning{height:fit-content;width:fit-content;position:absolute;top:-2px;right:-6px}@media (max-width: 400px){.cometchat-calls-video-control__dropdown-bar{min-width:240px}.cometchat-calls-video-control__settings-button{width:36px;height:36px}.cometchat-calls-video-selector__content{padding:var(--cometchat-calls-padding-2);gap:var(--cometchat-calls-spacing-1);min-width:140px}.cometchat-calls-video-selector__device-label{font:var(--cometchat-calls-font-caption1-regular)}}@media (prefers-contrast: high){.cometchat-calls-video-control__settings-button:focus,.cometchat-calls-video-selector__button:focus{outline:3px solid;outline-offset:2px}.cometchat-calls-video-control__device-menu{border:2px solid}}@media (prefers-reduced-motion: reduce){.cometchat-calls-video-control__button,.cometchat-calls-video-control__arrow-button,.cometchat-calls-video-control__settings-button,.cometchat-calls-video-selector__button,.cometchat-calls-video-selector__arrow{transition:none}.cometchat-calls-video-control__device-menu-loader svg{animation:none}}.cometchat-calls-video-control__wrapper .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-video-control__wrapper--active .cometchat-calls-video-control__button .cometchat-calls-icon{color:var(--cometchat-calls-error-color)}.cometchat-calls-video-control__warning .cometchat-calls-icon{color:var(--cometchat-calls-warning-color)}.cometchat-calls-video-control__dropdown-bar .cometchat-calls-icon,.cometchat-calls-video-control__device-menu .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-control-pane{display:flex;flex-direction:row;align-items:center;justify-content:center;padding:var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-4);position:relative;background:var(--cometchat-calls-background-color-01);border-radius:0;flex-shrink:0;max-width:100%;min-width:fit-content;height:fit-content}.cometchat-calls-control-button{width:56px;height:56px;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-background-color-03);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;position:relative}.cometchat-calls-control-button--hidden{display:none!important}.cometchat-calls-control-button:hover{background:var(--cometchat-calls-background-color-04);transform:scale(1.05)}.cometchat-calls-control-button--raise-hand{padding-left:var(--cometchat-calls-padding-1)}.cometchat-calls-control-button--raise-hand:hover{background:var(--cometchat-calls-neutral-color-400)}.cometchat-calls-control-button--raise-hand.cometchat-calls-control-button--active{background:var(--cometchat-calls-static-white)}.cometchat-calls-control-button--reactions:hover,.cometchat-calls-control-button--screen-share:hover,.cometchat-calls-control-button--more:hover,.cometchat-calls-control-button--more.cometchat-calls-control-button--active{background:var(--cometchat-calls-neutral-color-400)}.cometchat-calls-control-button--call-end{background:var(--cometchat-calls-error-color);width:72px;border-radius:var(--cometchat-calls-radius-max)}.cometchat-calls-control-button--call-end:hover{background:var(--cometchat-calls-error-color);transform:scale(1.05);opacity:.9}.cometchat-calls-control-button:active{transform:scale(.95)}.cometchat-calls-control-button--active{background:var(--cometchat-calls-neutral-color-400)}@media (max-width: 767px){.cometchat-calls-control-pane{gap:var(--cometchat-calls-spacing-4)}}.cometchat-calls-control-pane--mobile{gap:var(--cometchat-calls-spacing-4)}.cometchat-calls-control-button .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-control-button--raise-hand.cometchat-calls-control-button--active .cometchat-calls-icon{color:var(--cometchat-calls-static-black)}.cometchat-calls-virtual-background-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000;padding:var(--cometchat-calls-padding-4)}.cometchat-calls-virtual-background-modal{background-color:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-4);border:1px solid var(--cometchat-calls-border-color-default);display:flex;flex-direction:column;overflow:hidden;box-shadow:0 var(--cometchat-calls-spacing-6) var(--cometchat-calls-spacing-8) #0000004d}.cometchat-calls-virtual-background-modal--desktop{width:clamp(320px,90vw,540px);height:clamp(420px,80vh,620px);max-height:560px}.cometchat-calls-virtual-background-modal--mobile{width:100%;height:100%;max-width:100vw;max-height:100vh;border-radius:0;border:none}.cometchat-calls-virtual-background-header{display:flex;align-items:center;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);background:var(--cometchat-calls-background-color-01);gap:var(--cometchat-calls-spacing-3)}.cometchat-calls-virtual-background-header-title{font:var(--cometchat-calls-font-heading2-medium);color:var(--cometchat-calls-text-color-primary);margin:0}.cometchat-calls-virtual-background-content{flex:1;display:flex;flex-direction:column;overflow:hidden}.cometchat-calls-virtual-background-preview{padding:var(--cometchat-calls-padding-5);display:flex;justify-content:center;align-items:center;padding-top:var(--cometchat-calls-padding-1)}.cometchat-calls-virtual-background-preview-video-container{position:relative;height:clamp(180px,35vh,280px);border-radius:var(--cometchat-calls-radius-3);overflow:hidden;background-color:var(--cometchat-calls-background-color-03);aspect-ratio:16 / 9;width:100%}.cometchat-calls-virtual-background-preview-video{width:100%;height:100%;object-fit:cover}.cometchat-calls-virtual-background-preview-canvas{position:absolute;top:0;left:0;width:100%;height:100%}.cometchat-calls-virtual-background-preview-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;gap:var(--cometchat-calls-spacing-3)}.cometchat-calls-virtual-background-preview-spinner{width:var(--cometchat-calls-spacing-8);height:var(--cometchat-calls-spacing-8);border:2px solid var(--cometchat-calls-border-color-light);border-top:2px solid var(--cometchat-calls-primary-color);border-radius:50%;animation:cometchat-calls-virtual-background-spin 1s linear infinite}.cometchat-calls-virtual-background-preview-loading-text{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary)}.cometchat-calls-virtual-background-preview-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;gap:var(--cometchat-calls-spacing-3);color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-virtual-background-preview-placeholder-text{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary)}@keyframes cometchat-calls-virtual-background-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.cometchat-calls-virtual-background-options{flex:1;padding:var(--cometchat-calls-padding-5);overflow-y:auto;display:flex;flex-direction:column;gap:var(--cometchat-calls-spacing-1);padding-top:0}.cometchat-calls-virtual-background-controls-row{display:flex;gap:var(--cometchat-calls-spacing-1);flex-wrap:wrap;justify-content:flex-start}.cometchat-calls-virtual-background-images-row{display:flex;flex-wrap:wrap;gap:var(--cometchat-calls-spacing-1);justify-content:flex-start}.cometchat-calls-virtual-background-images-row .cometchat-calls-virtual-background-option{padding:0}.cometchat-calls-virtual-background-option--add{flex-direction:row;background:transparent;border:none;gap:var(--cometchat-calls-spacing-2);justify-content:flex-start;align-items:center;width:fit-content;min-height:48px;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3);border-radius:var(--cometchat-calls-radius-2)}.cometchat-calls-virtual-background-option--add:hover{background:var(--cometchat-calls-background-color-02)}.cometchat-calls-virtual-background-option-add-text{font:var(--cometchat-calls-font-caption1-regular);color:var(--cometchat-calls-text-color-highlight);text-align:center;line-height:1.2}.cometchat-calls-virtual-background-option{position:relative;width:70px;box-sizing:border-box;height:48px;border:2px solid var(--cometchat-calls-border-color-light);border-radius:var(--cometchat-calls-radius-1);background:var(--cometchat-calls-background-color-03);cursor:pointer;overflow:hidden;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.cometchat-calls-virtual-background-option:hover{border-color:var(--cometchat-calls-border-color-default);transform:scale(1.05)}.cometchat-calls-virtual-background-option--selected,.cometchat-calls-virtual-background-option--selected:hover{border:2px solid var(--cometchat-calls-icon-color-highlight)}.cometchat-calls-virtual-background-option-none{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background:var(--cometchat-calls-background-color-03)}.cometchat-calls-virtual-background-option-blur{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.cometchat-calls-virtual-background-option-blur-effect{width:100%;height:100%;background:linear-gradient(45deg,var(--cometchat-calls-primary-color) 0%,var(--cometchat-calls-extended-primary-color-700) 50%,var(--cometchat-calls-extended-primary-color-900) 100%);filter:blur(4px)}.cometchat-calls-virtual-background-option-image{width:100%;height:100%;object-fit:cover;object-position:center}.cometchat-calls-virtual-background-option-selected-indicator{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;color:var(--cometchat-calls-static-white)}.cometchat-calls-virtual-background-option-selected-indicator:before{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:var(--cometchat-calls-spacing-8);height:var(--cometchat-calls-spacing-8);border-radius:50%;z-index:1}.cometchat-calls-virtual-background-option-selected-indicator svg{position:relative;z-index:2}.cometchat-calls-virtual-background-option-wrapper{position:relative;display:flex;flex-direction:column;align-items:center}.cometchat-calls-virtual-background-option-checkbox{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000004d}.cometchat-calls-virtual-background-option-checkbox .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-primary)}.cometchat-calls-virtual-background-footer{justify-content:flex-end;display:flex;align-items:center;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-5);background:var(--cometchat-calls-background-color-01);gap:var(--cometchat-calls-spacing-3)}.cometchat-calls-virtual-background-button{border-radius:var(--cometchat-calls-radius-2);font:var(--cometchat-calls-font-button-medium);cursor:pointer;transition:all .2s ease;border:none;display:flex;align-items:center;justify-content:center;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);min-width:120px;min-height:32px}.cometchat-calls-virtual-background-button--primary{background:var(--cometchat-calls-primary-button-background);color:var(--cometchat-calls-primary-button-text)}.cometchat-calls-virtual-background-button--primary:hover{background:var(--cometchat-calls-extended-primary-color-800)}.cometchat-calls-virtual-background-button--primary:disabled{opacity:.6;cursor:not-allowed}.cometchat-calls-virtual-background-button--secondary{background:transparent;color:var(--cometchat-calls-text-color-primary);border:1px solid var(--cometchat-calls-border-color-dark)}.cometchat-calls-virtual-background-button--secondary:hover{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-virtual-background-button--full-width{width:100%}@media (max-width: 767px){.cometchat-calls-virtual-background-overlay{padding:0}.cometchat-calls-virtual-background-option-wrapper{min-width:77px}.cometchat-calls-virtual-background-preview-video-container{height:240px;min-width:320px;width:100%}.cometchat-calls-virtual-background-footer{width:100%;box-sizing:border-box;justify-content:space-between}.cometchat-calls-virtual-background-footer .cometchat-calls-virtual-background-button{min-width:calc(50% - var(--cometchat-calls-padding-5))}}.cometchat-calls-virtual-background-options::-webkit-scrollbar{width:6px}.cometchat-calls-virtual-background-options::-webkit-scrollbar-track{background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-1)}.cometchat-calls-virtual-background-options::-webkit-scrollbar-thumb{background:var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-1)}.cometchat-calls-virtual-background-options::-webkit-scrollbar-thumb:hover{background:var(--cometchat-calls-border-color-dark)}.cometchat-calls-virtual-background-option--add .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-primary)}.cometchat-calls-virtual-background-option-none .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-recording-indicator{display:inline-flex;flex-direction:row;align-items:center;gap:var(--cometchat-calls-spacing-1);padding:var(--cometchat-calls-padding-1) var(--cometchat-calls-padding-2);background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);line-height:1;flex-shrink:0;-webkit-user-select:none;user-select:none}.cometchat-calls-recording-indicator-dot{position:relative;width:8px;height:8px;border-radius:50%;background:var(--cometchat-calls-error-color);flex-shrink:0}.cometchat-calls-recording-indicator-dot:after{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:var(--cometchat-calls-error-color);transform:translate(-50%,-50%);transform-origin:center;opacity:.6;animation:cometchat-calls-recording-pulse 1.6s ease-out infinite}.cometchat-calls-recording-indicator-label{font:var(--cometchat-calls-font-caption2-bold);letter-spacing:.4px;color:var(--cometchat-calls-static-white);text-transform:uppercase}@keyframes cometchat-calls-recording-pulse{0%{transform:translate(-50%,-50%) scale(1);opacity:.6}to{transform:translate(-50%,-50%) scale(2.4);opacity:0}}@media (prefers-reduced-motion: reduce){.cometchat-calls-recording-indicator-dot:after{animation:none;opacity:0}}.cometchat-calls-streaming-indicator{display:inline-flex;flex-direction:row;align-items:center;gap:var(--cometchat-calls-spacing-1);padding:var(--cometchat-calls-padding-1) var(--cometchat-calls-padding-2);background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);line-height:1;flex-shrink:0;-webkit-user-select:none;user-select:none}.cometchat-calls-streaming-indicator-dot{position:relative;width:8px;height:8px;border-radius:50%;background:var(--cometchat-calls-warning-color, #ff9500);flex-shrink:0}.cometchat-calls-streaming-indicator-dot:after{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:var(--cometchat-calls-warning-color, #ff9500);transform:translate(-50%,-50%);transform-origin:center;opacity:.6;animation:cometchat-calls-streaming-pulse 1.6s ease-out infinite}.cometchat-calls-streaming-indicator-label{font:var(--cometchat-calls-font-caption2-bold);letter-spacing:.4px;color:var(--cometchat-calls-static-white);text-transform:uppercase}@keyframes cometchat-calls-streaming-pulse{0%{transform:translate(-50%,-50%) scale(1);opacity:.6}to{transform:translate(-50%,-50%) scale(2.4);opacity:0}}@media (prefers-reduced-motion: reduce){.cometchat-calls-streaming-indicator-dot:after{animation:none;opacity:0}}.cometchat-calls-header-container{display:flex;flex-direction:row;align-items:center;padding:12px 20px;gap:20px;width:100%;box-sizing:border-box}.cometchat-calls-header-session-info{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:4px;flex:1;min-width:0;overflow:hidden}.cometchat-calls-header-title{font-family:Roboto,sans-serif;font-style:normal;font-weight:500;font-size:16px;line-height:120%;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.cometchat-calls-header-session-timer{font-family:Roboto,sans-serif;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#fff}.cometchat-calls-header-session-meta{display:flex;flex-direction:row;align-items:center;gap:8px;min-width:0;max-width:100%}.cometchat-calls-header-actions{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;padding:0;gap:12px;flex-shrink:0}.cometchat-calls-header-action-button{display:flex;justify-content:center;align-items:center;border:none;width:40px;height:40px;background:#272727;border-radius:var(--cometchat-calls-radius-max);cursor:pointer;flex-shrink:0;position:relative}.cometchat-calls-header-action-button.cometchat-calls-header-action-button--active{background:var(--cometchat-calls-background-color-04)}.cometchat-calls-header-layout-dropdown{position:relative;display:inline-block}.cometchat-calls-header-dropdown-menu{position:absolute;top:100%;right:0;background:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-2);box-shadow:0 4px 12px #0000004d;min-width:160px;z-index:200;margin-top:var(--cometchat-calls-margin-1);border:1px solid var(--cometchat-calls-border-color-light);padding:var(--cometchat-calls-padding-2) 0;opacity:0;transform:translateY(-10px) scale(.95);transform-origin:top right}.cometchat-calls-header-dropdown-menu.cometchat-calls-header-dropdown-menu--opening{animation:cometchat-calls-dropdown-enter .15s ease forwards}.cometchat-calls-header-dropdown-menu.cometchat-calls-header-dropdown-menu--closing{animation:cometchat-calls-dropdown-exit .15s ease forwards}.cometchat-calls-header-action-button .cometchat-calls-header-badge{position:absolute;top:-2px;right:-8px;height:20px;width:24px;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-primary-color, #6852d6);color:var(--cometchat-calls-static-white, #fff);font:var(--cometchat-calls-font-caption2-regular);display:flex;align-items:center;box-sizing:border-box;overflow:hidden;justify-content:center;padding-left:1px}@keyframes cometchat-calls-dropdown-enter{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes cometchat-calls-dropdown-exit{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-10px) scale(.95)}}.cometchat-calls-header-dropdown-item{display:flex;align-items:center;gap:var(--cometchat-calls-spacing-3);padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-4);background:none;border:none;cursor:pointer;width:100%;text-align:left;height:40px}.cometchat-calls-header-dropdown-item-name{font:var(--cometchat-calls-font-heading4-regular);color:var(--cometchat-calls-text-color-primary)}.cometchat-calls-header-dropdown-item:hover{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-header-dropdown-item.active{background:var(--cometchat-calls-background-color-03);opacity:.5;cursor:not-allowed}.cometchat-calls-header-action-button .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-header-dropdown-item .cometchat-calls-icon{color:var(--cometchat-calls-neutral-color-600)}.cometchat-calls-ideal-timeout-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;-webkit-backdrop-filter:blur(var(--cometchat-calls-spacing-1));backdrop-filter:blur(var(--cometchat-calls-spacing-1));display:flex;align-items:center;justify-content:center;z-index:10000}.cometchat-calls-ideal-timeout-modal{background:var(--cometchat-calls-background-color-01);border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-5);box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;width:400px;padding:var(--cometchat-calls-padding-8) var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-5) var(--cometchat-calls-padding-5);max-width:90vw;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-sizing:border-box}.cometchat-calls-ideal-timeout-modal__content{display:flex;flex-direction:column;align-items:center;gap:var(--cometchat-calls-spacing-5);width:100%}.cometchat-calls-ideal-timeout-modal__timer-icon{display:flex;width:80px;height:80px;justify-content:center;align-items:center;border-radius:var(--cometchat-calls-radius-max);background:var(--cometchat-calls-extended-primary-color-600);flex-shrink:0}.cometchat-calls-ideal-timeout-modal__timer-text{color:var(--cometchat-calls-static-white);font:var(--cometchat-calls-font-heading3-bold);text-align:center}.cometchat-calls-ideal-timeout-modal__text-content{display:flex;flex-direction:column;align-items:center;gap:var(--cometchat-calls-spacing-2);width:100%}.cometchat-calls-ideal-timeout-modal__title{color:var(--cometchat-calls-text-color-primary);font:var(--cometchat-calls-font-heading2-medium);text-align:center;margin:0;width:100%}.cometchat-calls-ideal-timeout-modal__subtitle{color:var(--cometchat-calls-text-color-secondary);font:var(--cometchat-calls-font-body-regular);text-align:center;margin:0;line-height:1.2;width:100%}.cometchat-calls-ideal-timeout-modal__actions{display:flex;align-items:center;gap:12px;width:100%}.cometchat-calls-ideal-timeout-modal__button{display:flex;height:40px;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);justify-content:center;align-items:center;border-radius:var(--cometchat-calls-radius-2);font:var(--cometchat-calls-font-button-medium);cursor:pointer;transition:all .2s ease;width:160px;flex:1;border:none;outline:none}.cometchat-calls-ideal-timeout-modal__button:focus{outline:2px solid var(--cometchat-calls-primary-color);outline-offset:2px}.cometchat-calls-ideal-timeout-modal__button--secondary{background:transparent;color:var(--cometchat-calls-text-color-primary);border:1px solid var(--cometchat-calls-border-color-dark)}.cometchat-calls-ideal-timeout-modal__button--secondary:hover{background:var(--cometchat-calls-background-color-02);border-color:var(--cometchat-calls-border-color-dark)}.cometchat-calls-ideal-timeout-modal__button--secondary:active{background:var(--cometchat-calls-background-color-03)}.cometchat-calls-ideal-timeout-modal__button--primary{background:var(--cometchat-calls-error-color);color:var(--cometchat-calls-static-white)}.cometchat-calls-ideal-timeout-modal__button--primary:hover{background:#b33537}.cometchat-calls-ideal-timeout-modal__button--primary:active{background:#a02e30}@media (max-width: 480px){.cometchat-calls-ideal-timeout-modal{width:320px;padding:var(--cometchat-calls-padding-6) var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-4);margin:var(--cometchat-calls-margin-4)}.cometchat-calls-ideal-timeout-modal__content{gap:var(--cometchat-calls-spacing-4)}.cometchat-calls-ideal-timeout-modal__timer-icon{width:70px;height:70px}.cometchat-calls-ideal-timeout-modal__timer-text{font:var(--cometchat-calls-font-heading4-bold)}.cometchat-calls-ideal-timeout-modal__title{font:var(--cometchat-calls-font-heading3-medium)}.cometchat-calls-ideal-timeout-modal__subtitle{font:var(--cometchat-calls-font-caption1-regular)}.cometchat-calls-ideal-timeout-modal__actions{flex-direction:column;gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-ideal-timeout-modal__button{width:100%;min-width:200px}}@media (max-width: 360px){.cometchat-calls-ideal-timeout-modal{width:280px;padding:var(--cometchat-calls-padding-4) var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-3)}.cometchat-calls-ideal-timeout-modal__timer-icon{width:60px;height:60px}.cometchat-calls-ideal-timeout-modal__button{min-width:180px;height:36px;padding:var(--cometchat-calls-padding-1) var(--cometchat-calls-padding-4)}}.cometchat-calls-info-view-container{display:flex;height:100%;justify-content:center;align-items:center;background-color:#272727;padding:20px;box-sizing:border-box}.cometchat-calls-info-view-message{color:#fff;text-align:center;font:var(--cometchat-calls-font-body-regular)}.cometchat-calls-participant-item{display:flex;flex-direction:row;align-items:center;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);background-color:var(--cometchat-calls-background-color-02);border-bottom:1px solid var(--cometchat-calls-border-color-light);transition:background-color .2s ease;width:100%;box-sizing:border-box;min-width:0}.cometchat-calls-participant-avatar{width:48px;height:48px;flex-shrink:0;position:relative}.cometchat-calls-participant-pin-icon{position:absolute;bottom:0;right:0;padding:1px;background-color:var(--cometchat-calls-background-color-02);border-radius:50%;display:flex;align-items:center;justify-content:center}.cometchat-calls-participant-text{display:flex;flex-direction:column;align-items:flex-start;gap:var(--cometchat-calls-spacing-1);flex:1;min-width:0;overflow:hidden}.cometchat-calls-participant-name{font:var(--cometchat-calls-font-heading4-medium);color:var(--cometchat-calls-text-color-primary);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.cometchat-calls-participant-description{font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.cometchat-calls-participant-icons{display:flex;position:relative;flex-direction:row;align-items:center;gap:var(--cometchat-calls-spacing-3);flex-shrink:0;margin-left:auto;overflow:visible}.cometchat-calls-participant-more-button{display:flex;justify-content:center;align-items:center;width:28px;height:28px;border-radius:var(--cometchat-calls-radius-max);background-color:var(--cometchat-calls-background-color-03);border:none;cursor:pointer;transition:background-color .2s ease,transform .1s ease}.cometchat-calls-participant-more-button:hover{background-color:var(--cometchat-calls-background-color-04);transform:scale(1.05)}@media (max-width: 768px){.cometchat-calls-participant-item{padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-3);gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-participant-icons{gap:var(--cometchat-calls-spacing-2)}.cometchat-calls-participant-more-button{width:24px;height:24px}}.cometchat-calls-participant-pin-icon .cometchat-calls-icon,.cometchat-calls-participant-raise-hand.cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-participant-screen-share.cometchat-calls-icon{color:var(--cometchat-calls-primary-color)}.cometchat-calls-participant-signal.cometchat-calls-icon{color:var(--signal-color)}.cometchat-calls-participant-mic.cometchat-calls-icon{color:var(--cometchat-calls-primary-color)}.cometchat-calls-participant-mic--muted.cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-participant-list-wrapper{position:absolute;top:0;right:0;height:100%;width:var(--cometchat-calls-participants-list-width);transform:translate(100%);transition:transform var(--transition-duration) var(--transition-easing);z-index:1000;background:var(--cometchat-calls-background-color-01);box-sizing:border-box;padding:var(--cometchat-calls-padding-2);padding-left:0;will-change:transform}.cometchat-calls-participant-list-wrapper .cometchat-calls-more-option-button{height:28px;width:28px;box-sizing:border-box}.cometchat-calls-participant-list-container{display:flex;flex-direction:column;align-items:flex-start;padding:0;width:100%;height:100%;background:var(--cometchat-calls-background-color-03);flex-shrink:0;box-sizing:border-box;border:1px solid var(--cometchat-calls-border-color-default);border-radius:var(--cometchat-calls-radius-3)}.cometchat-calls-participant-list-header{box-sizing:border-box;display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-4);gap:var(--cometchat-calls-spacing-3);width:100%;height:64px;background:var(--cometchat-calls-background-color-03);flex-shrink:0;border-radius:inherit;padding-bottom:0}.cometchat-calls-participant-list-header-text{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding:0;flex-grow:1;overflow:hidden}.cometchat-calls-participant-list-title{width:100%;height:24px;margin:0;font:var(--cometchat-calls-font-heading4-bold);color:var(--cometchat-calls-text-color-primary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.cometchat-calls-participant-list-close-button{display:flex;align-items:center;justify-content:center;padding:0;gap:16px;width:24px;height:24px;background:none;border:none;cursor:pointer;flex-shrink:0}.cometchat-calls-participant-search-container{box-sizing:border-box;display:flex;flex-direction:column;align-items:flex-start;width:100%;background:var(--cometchat-calls-background-color-02);flex-shrink:0;overflow:hidden}.cometchat-calls-participant-search-input-wrapper{display:flex;flex-direction:row;align-items:center;padding:0 var(--cometchat-calls-padding-3);gap:var(--cometchat-calls-spacing-2);width:100%;height:40px;background:var(--cometchat-calls-background-color-03);border-radius:var(--cometchat-calls-radius-max);box-sizing:border-box}.cometchat-calls-participant-search-icon{flex-shrink:0}.cometchat-calls-participant-search-input{flex-grow:1;height:100%;background:none;border:none;outline:none;padding:0;margin:0;font-family:Roboto,sans-serif;font-style:normal;font-weight:400;font-size:16px;line-height:120%;color:var(--cometchat-calls-text-color-primary)}.cometchat-calls-participant-search-input::placeholder{color:var(--cometchat-calls-text-color-tertiary);font:var(--cometchat-calls-font-heading4-regular);opacity:1}.cometchat-calls-participants-scroll-area{display:flex;flex-direction:column;align-items:flex-start;padding:0;width:100%;flex-grow:1;overflow-y:auto;background:var(--cometchat-calls-background-color-02);overflow-x:visible;border-radius:inherit;border-top-left-radius:0;border-top-right-radius:0}.cometchat-calls-participants-scroll-area::-webkit-scrollbar{width:6px}.cometchat-calls-participants-scroll-area::-webkit-scrollbar-track{background:var(--cometchat-calls-border-color-light);border-radius:3px}.cometchat-calls-participants-scroll-area::-webkit-scrollbar-thumb{background:var(--cometchat-calls-neutral-color-400);border-radius:var(--cometchat-calls-radius-1)}.cometchat-calls-participants-scroll-area::-webkit-scrollbar-thumb:hover{background:var(--cometchat-calls-neutral-color-500)}.cometchat-calls-participant-list-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;overflow:hidden;padding:0;margin:auto}.cometchat-calls-participant-list-empty-state-icon{margin-bottom:24px;opacity:.6}.cometchat-calls-participant-list-empty-state-text{display:flex;flex-direction:column;align-items:center;gap:8px}.cometchat-calls-participant-list-empty-state-title{margin:0;font:var(--cometchat-calls-font-heading3-bold);color:var(--cometchat-calls-text-color-primary);font-size:16px;font-weight:500;line-height:1.2}.cometchat-calls-participant-list-empty-state-subtitle{margin:0;font:var(--cometchat-calls-font-body-regular);color:var(--cometchat-calls-text-color-secondary);font-size:14px;font-weight:400;line-height:1.2}.cometchat-calls-participant-list-no-results{padding:20px;text-align:center;width:100%;color:#989898;font-family:Roboto,sans-serif;font-size:14px}.cometchat-calls-participant-search-input-container{width:100%;border-radius:var(--cometchat-calls-radius-max);padding:var(--cometchat-calls-padding-4);box-sizing:border-box}.cometchat-calls-participant-list-share-invite-button-container{width:100%;box-sizing:border-box;padding:var(--cometchat-calls-padding-3) var(--cometchat-calls-padding-6)}.cometchat-calls-participant-list-share-invite-button{display:flex;align-items:center;justify-content:center;gap:var(--cometchat-calls-spacing-2);width:100%;padding:var(--cometchat-calls-padding-2) var(--cometchat-calls-padding-5);background:var(--cometchat-calls-background-color-01);border-radius:var(--cometchat-calls-radius-2);color:var(--cometchat-calls-static-white);font:var(--cometchat-calls-font-button-medium);cursor:pointer;transition:all .2s ease;margin-top:var(--cometchat-calls-margin-2);border:1px solid var(--cometchat-calls-border-color-dark)}.cometchat-calls-participant-list-share-invite-button:hover{background:var(--cometchat-calls-primary-button-background);transition:background .3s ease-in-out}.cometchat-calls-participant-list-share-invite-button:active{transform:translateY(0)}@media (min-width: 769px){.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--participant-list-open .cometchat-calls-participant-list-wrapper{transform:translate(0)}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--participant-list-open .cometchat-calls-call-screen-main-content{width:calc(100% - var(--cometchat-calls-participants-list-width))}}@media (max-width: 768px){.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--participant-list-open .cometchat-calls-call-screen-main-content{display:none}.cometchat-calls-participant-list-wrapper{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:9999;transform:translate(100%);transition:transform var(--transition-duration) var(--transition-easing);padding:0;margin:0}.cometchat-calls-call-screen-content-wrapper.cometchat-calls-call-screen--participant-list-open .cometchat-calls-participant-list-wrapper{transform:translate(0)}.cometchat-calls-participant-list-container{width:100%;height:100%;max-width:none;border-radius:0;border:none;box-shadow:none}.cometchat-calls-participant-list-header,.cometchat-calls-participants-scroll-area{border-radius:0}}.cometchat-calls-participant-list-close-button .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-participant-search-input-wrapper .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-participant-list-empty-state-icon .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-tertiary)}.cometchat-calls-participant-list-share-invite-button .cometchat-calls-icon{color:var(--cometchat-calls-static-white)}.cometchat-calls-connection-loader-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:2000;pointer-events:all;color:var(--cometchat-calls-text-color-on-dark, #fff);font:var( --cometchat-calls-font-heading3-semibold, 600 20px/28px "Roboto", sans-serif );letter-spacing:.5px;opacity:1;transition:opacity .3s ease}.cometchat-calls-connection-loader-overlay.cometchat-calls-connection-loader-overlay--fade-out{opacity:0;pointer-events:none}.cometchat-calls-connection-loader-animation{width:75px;aspect-ratio:4;--_g: no-repeat radial-gradient(circle closest-side, #ccc 90%, #0000);background:var(--_g) 0% 50%,var(--_g) 50% 50%,var(--_g) 100% 50%;background-size:calc(100% / 3) 50%;animation:cometchat-calls-bouncing-dots 1s infinite linear}@keyframes cometchat-calls-bouncing-dots{20%{background-position:0% 0%,50% 50%,100% 50%}40%{background-position:0% 100%,50% 0%,100% 50%}60%{background-position:0% 50%,50% 100%,100% 0%}80%{background-position:0% 50%,50% 50%,100% 100%}}.cometchat-calls-notification{display:flex;width:fit-content;max-width:340px;min-width:120px;padding:12px;align-items:center;gap:8px;border-radius:8px;border:1px solid #383838;background:#1a1a1a;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;font-family:Roboto,-apple-system,Helvetica,sans-serif;animation:cometchat-calls-notification-slide-in .3s ease-out;transition:all .3s ease}.cometchat-calls-notification--default{background:#1a1a1a;border:1px solid #383838}.cometchat-calls-notification--default .cometchat-calls-notification__message{color:#fff}.cometchat-calls-notification--info{background:#1a1a1a;border:1px solid #383838}.cometchat-calls-notification--info .cometchat-calls-notification__message{color:#fff}.cometchat-calls-notification--success{background:#ceecdf;border:1px solid rgba(255,255,255,.2)}.cometchat-calls-notification--success .cometchat-calls-notification__message{color:#097f4a}.cometchat-calls-notification--warning{background:#fff5cf;border:1px solid rgba(255,255,255,.2);padding:8px 12px}.cometchat-calls-notification--warning .cometchat-calls-notification__message{color:#994000}.cometchat-calls-notification--error{background:#f4d8d8;border:1px solid rgba(255,255,255,.2);padding:8px 12px}.cometchat-calls-notification--error .cometchat-calls-notification__message{color:#9f3032}.cometchat-calls-notification:has(.cometchat-calls-notification__close),.cometchat-calls-notification:has(.cometchat-calls-notification__button){padding:8px 12px}.cometchat-calls-notification__message{font-size:14px;font-style:normal;font-weight:400;line-height:120%;margin:0;word-wrap:break-word;flex:1}.cometchat-calls-notification__button{color:#8c78f0;text-align:center;font-size:14px;font-style:normal;font-weight:400;line-height:120%;background:transparent;border:none;cursor:pointer;transition:opacity .2s ease;margin:0;padding:0;white-space:nowrap}.cometchat-calls-notification__button:hover{opacity:.8}.cometchat-calls-notification__close{width:24px;height:24px;background:transparent;border:none;cursor:pointer;transition:opacity .2s ease;margin:0;padding:0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cometchat-calls-notification__close:hover{opacity:.8}.cometchat-calls-notification__close svg{width:24px;height:24px}@keyframes cometchat-calls-notification-slide-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@media (max-width: 480px){.cometchat-calls-notification{max-width:calc(100vw - 32px);min-width:100px;margin:8px 16px}}.cometchat-calls-notification__close .cometchat-calls-icon{color:var(--cometchat-calls-icon-color-secondary)}.cometchat-calls-notification-container{position:absolute;bottom:70px;left:20px;display:flex;flex-direction:column-reverse;gap:10px;z-index:1100} diff --git a/package/index.d.ts b/package/index.d.ts index ffcfe18..97bfdcc 100644 --- a/package/index.d.ts +++ b/package/index.d.ts @@ -19,6 +19,7 @@ declare type AudioMode = { type: AudioModeType; selected: boolean; uid?: string; + name?: string; }; declare type AudioModeType = 'BLUETOOTH' | 'EARPIECE' | 'HEADPHONES' | 'SPEAKER'; @@ -233,10 +234,22 @@ export declare class CallLog { * The time the call was initiated at. */ private initiatedAt; + /** + * The time the call started at. Sent by the calls host in place of + * `initiatedAt`; read {@link getStartedAt} and fall back to + * {@link getInitiatedAt} when only one of the two is present. + */ + private startedAt; /** * The call category of the call log. */ private callCategory; + /** + * The mode of the call log. Sent by the calls host in place of + * `callCategory`; read {@link getMode} and fall back to + * {@link getCallCategory} when only one of the two is present. + */ + private mode; /** * @type {CallUser} * The initiator of the call log. @@ -350,6 +363,26 @@ export declare class CallLog { * @param value - The time the call was initiated at. */ setInitiatedAt(value: number): void; + /** + * Gets the time the call started at. + * @returns The time the call started at. + */ + getStartedAt(): number; + /** + * Sets the time the call started at. + * @param value - The time the call started at. + */ + setStartedAt(value: number): void; + /** + * Gets the mode of the call log. + * @returns The mode of the call log. + */ + getMode(): string; + /** + * Sets the mode of the call log. + * @param value - The mode to set. + */ + setMode(value: string): void; /** * Gets the call category of the call log. * @returns The call category of the call log. @@ -545,6 +578,16 @@ declare class CallLogRequest { * @returns A promise that resolves to an array of CallLog objects, or an empty array if there are no previous pages, or rejects with a CometChatCallsException if there was an error.. */ fetchPrevious(): Promise; + /** + * Gets the page the cursor currently sits on. + * @returns The current page, or `0` before the first successful fetch. + */ + getCurrentPage(): number; + /** + * Gets the number of pages the server reported. + * @returns The total page count, or `0` before the first successful fetch. + */ + getTotalPages(): number; /** * Makes an API call to fetch call logs. * @param isFetchNext Whether to fetch the next page of call logs. @@ -1147,6 +1190,29 @@ declare type ConfigStateBoth = { * @default true */ hideRecordingButton: boolean; + /** + * Hides the streaming button from the call controls, preventing the user + * from manually starting or stopping a live stream from within the SDK UI. + * + * @default true + */ + hideStreamingButton: boolean; + /** + * The RTMP URL to stream to when the user starts a live stream from the + * call controls. When set, pressing the start-streaming button skips the + * confirmation dialog (which normally asks for a URL and key) and starts + * streaming to this URL immediately. + * + * @default undefined — the user is asked for a URL when starting a stream + */ + streamUrl?: string; + /** + * The stream key sent along with `streamUrl` when a live stream is + * started. Ignored when `streamUrl` is not set. + * + * @default undefined + */ + streamKey?: string; /** * Hides the entire bottom control bar (mic, camera, leave, and every other * call control). Useful when the host app provides its own controls. @@ -1233,6 +1299,13 @@ declare type ConfigStateBoth = { * @default false */ hideRecordingStatusIndicator: boolean; + /** + * Hides the "streaming live" badge shown while the session is being + * streamed. The stream itself is unaffected. + * + * @default false + */ + hideStreamingStatusIndicator: boolean; /** * Hides the button that switches between the front and rear cameras. * Mainly relevant on mobile devices with more than one camera. @@ -1433,6 +1506,8 @@ declare const EVENT_LISTENER_METHODS: { readonly onVideoResumed: "onVideoResumed"; readonly onRecordingStarted: "onRecordingStarted"; readonly onRecordingStopped: "onRecordingStopped"; + readonly onStreamingStarted: "onStreamingStarted"; + readonly onStreamingStopped: "onStreamingStopped"; readonly onScreenShareStarted: "onScreenShareStarted"; readonly onScreenShareStopped: "onScreenShareStopped"; }; @@ -1449,6 +1524,8 @@ declare const EVENT_LISTENER_METHODS: { readonly onParticipantStoppedScreenShare: "onParticipantStoppedScreenShare"; readonly onParticipantStartedRecording: "onParticipantStartedRecording"; readonly onParticipantStoppedRecording: "onParticipantStoppedRecording"; + readonly onParticipantStartedStreaming: "onParticipantStartedStreaming"; + readonly onParticipantStoppedStreaming: "onParticipantStoppedStreaming"; readonly onDominantSpeakerChanged: "onDominantSpeakerChanged"; readonly onParticipantListChanged: "onParticipantListChanged"; }; @@ -2144,9 +2221,15 @@ declare class SessionMethods extends SessionMethodsCore { declare class SessionMethodsCore { /** - * Mutes the local user's audio during the call. + * Mutes or unmutes the local user's audio during the call. + * + * The boolean parameter exists for backward compatibility with the v4 SDK, + * where `muteAudio(false)` was the way to unmute. New code should prefer + * {@link SessionMethodsCore.unmuteAudio} for clarity. + * + * @param muteAudio - `true` (default) mutes the local audio track, `false` unmutes it. */ - static muteAudio(): void; + static muteAudio(muteAudio?: boolean): void; /** * Unmutes the local user's audio during the call. */ @@ -2157,9 +2240,15 @@ declare class SessionMethodsCore { */ static toggleAudio(): void; /** - * Pauses the local user's video stream. + * Pauses or resumes the local user's video stream. + * + * The boolean parameter exists for backward compatibility with the v4 SDK, + * where `pauseVideo(false)` was the way to resume. New code should prefer + * {@link SessionMethodsCore.resumeVideo} for clarity. + * + * @param pauseVideo - `true` (default) pauses the local video track, `false` resumes it. */ - static pauseVideo(): void; + static pauseVideo(pauseVideo?: boolean): void; /** * Resumes the local user's video stream. */ @@ -2200,6 +2289,16 @@ declare class SessionMethodsCore { * @param layout - The type of layout to set (tile, sidebar or spotlight). */ static setLayout(layout: Layout): void; + /** + * Starts streaming the call to the given RTMP destination. + * @param streamUrl - The RTMP ingest URL (e.g., "rtmp://a.rtmp.youtube.com/live2"). + * @param streamKey - The stream key for the destination (e.g., "xxxx-xxxx-xxxx-xxxx-xxxx"). + */ + static startStreaming(streamUrl: string, streamKey: string): void; + /** + * Stops the ongoing call streaming. + */ + static stopStreaming(): void; /** * Starts recording the call. */ diff --git a/package/index.es.js b/package/index.es.js index 64df006..6f23d7d 100644 --- a/package/index.es.js +++ b/package/index.es.js @@ -1,7 +1,7 @@ -import './index.css';var rT = Object.defineProperty; -var oT = (c, s, u) => s in c ? rT(c, s, { enumerable: !0, configurable: !0, writable: !0, value: u }) : c[s] = u; -var z = (c, s, u) => oT(c, typeof s != "symbol" ? s + "" : s, u); -class jN { +import './index.css';var fT = Object.defineProperty; +var gT = (l, s, u) => s in l ? fT(l, s, { enumerable: !0, configurable: !0, writable: !0, value: u }) : l[s] = u; +var z = (l, s, u) => gT(l, typeof s != "symbol" ? s + "" : s, u); +class r9 { addEventListener(s, u) { return { remove: () => { @@ -12,144 +12,144 @@ class jN { return this; } } -var Pl; +var Gl; // @__NO_SIDE_EFFECTS__ -function A5(c) { +function j5(l) { return { - lang: (c == null ? void 0 : c.lang) ?? (Pl == null ? void 0 : Pl.lang), - message: c == null ? void 0 : c.message, - abortEarly: (c == null ? void 0 : c.abortEarly) ?? (Pl == null ? void 0 : Pl.abortEarly), - abortPipeEarly: (c == null ? void 0 : c.abortPipeEarly) ?? (Pl == null ? void 0 : Pl.abortPipeEarly) + lang: (l == null ? void 0 : l.lang) ?? (Gl == null ? void 0 : Gl.lang), + message: l == null ? void 0 : l.message, + abortEarly: (l == null ? void 0 : l.abortEarly) ?? (Gl == null ? void 0 : Gl.abortEarly), + abortPipeEarly: (l == null ? void 0 : l.abortPipeEarly) ?? (Gl == null ? void 0 : Gl.abortPipeEarly) }; } -var xS; +var OS; // @__NO_SIDE_EFFECTS__ -function sT(c) { - return xS == null ? void 0 : xS.get(c); +function vT(l) { + return OS == null ? void 0 : OS.get(l); } -var ZS; +var BS; // @__NO_SIDE_EFFECTS__ -function lT(c) { - return ZS == null ? void 0 : ZS.get(c); +function ST(l) { + return BS == null ? void 0 : BS.get(l); } -var OS; +var wS; // @__NO_SIDE_EFFECTS__ -function cT(c, s) { +function RT(l, s) { var u; - return (u = OS == null ? void 0 : OS.get(c)) == null ? void 0 : u.get(s); + return (u = wS == null ? void 0 : wS.get(l)) == null ? void 0 : u.get(s); } // @__NO_SIDE_EFFECTS__ -function hR(c) { - var u, p; - const s = typeof c; - return s === "string" ? `"${c}"` : s === "number" || s === "bigint" || s === "boolean" ? `${c}` : s === "object" || s === "function" ? (c && ((p = (u = Object.getPrototypeOf(c)) == null ? void 0 : u.constructor) == null ? void 0 : p.name)) ?? "null" : s; +function R6(l) { + var u, m; + const s = typeof l; + return s === "string" ? `"${l}"` : s === "number" || s === "bigint" || s === "boolean" ? `${l}` : s === "object" || s === "function" ? (l && ((m = (u = Object.getPrototypeOf(l)) == null ? void 0 : u.constructor) == null ? void 0 : m.name)) ?? "null" : s; } -function ho(c, s, u, p, g) { - const S = g && "input" in g ? g.input : u.value, U = (g == null ? void 0 : g.expected) ?? c.expects ?? null, Q = (g == null ? void 0 : g.received) ?? /* @__PURE__ */ hR(S), T = { - kind: c.kind, - type: c.type, +function po(l, s, u, m, g) { + const S = g && "input" in g ? g.input : u.value, U = (g == null ? void 0 : g.expected) ?? l.expects ?? null, M = (g == null ? void 0 : g.received) ?? /* @__PURE__ */ R6(S), T = { + kind: l.kind, + type: l.type, input: S, expected: U, - received: Q, - message: `Invalid ${s}: ${U ? `Expected ${U} but r` : "R"}eceived ${Q}`, - requirement: c.requirement, + received: M, + message: `Invalid ${s}: ${U ? `Expected ${U} but r` : "R"}eceived ${M}`, + requirement: l.requirement, path: g == null ? void 0 : g.path, issues: g == null ? void 0 : g.issues, - lang: p.lang, - abortEarly: p.abortEarly, - abortPipeEarly: p.abortPipeEarly - }, F = c.kind === "schema", b = (g == null ? void 0 : g.message) ?? c.message ?? /* @__PURE__ */ cT(c.reference, T.lang) ?? (F ? /* @__PURE__ */ lT(T.lang) : null) ?? p.message ?? /* @__PURE__ */ sT(T.lang); + lang: m.lang, + abortEarly: m.abortEarly, + abortPipeEarly: m.abortPipeEarly + }, F = l.kind === "schema", b = (g == null ? void 0 : g.message) ?? l.message ?? /* @__PURE__ */ RT(l.reference, T.lang) ?? (F ? /* @__PURE__ */ ST(T.lang) : null) ?? m.message ?? /* @__PURE__ */ vT(T.lang); b !== void 0 && (T.message = typeof b == "function" ? ( // @ts-expect-error b(T) ) : b), F && (u.typed = !1), u.issues ? u.issues.push(T) : u.issues = [T]; } // @__NO_SIDE_EFFECTS__ -function $a(c) { +function $a(l) { return { version: 1, vendor: "valibot", validate(s) { - return c["~run"]({ value: s }, /* @__PURE__ */ A5()); + return l["~run"]({ value: s }, /* @__PURE__ */ j5()); } }; } // @__NO_SIDE_EFFECTS__ -function dT(c, s) { - return Object.hasOwn(c, s) && s !== "__proto__" && s !== "prototype" && s !== "constructor"; +function ET(l, s) { + return Object.hasOwn(l, s) && s !== "__proto__" && s !== "prototype" && s !== "constructor"; } // @__NO_SIDE_EFFECTS__ -function J5(c, s) { - const u = [...new Set(c)]; +function P5(l, s) { + const u = [...new Set(l)]; return u.length > 1 ? `(${u.join(` ${s} `)})` : u[0] ?? "never"; } // @__NO_SIDE_EFFECTS__ -function uT(c, s, u) { - return typeof c.fallback == "function" ? ( +function UT(l, s, u) { + return typeof l.fallback == "function" ? ( // @ts-expect-error - c.fallback(s, u) + l.fallback(s, u) ) : ( // @ts-expect-error - c.fallback + l.fallback ); } // @__NO_SIDE_EFFECTS__ -function L5(c, s, u) { - return typeof c.default == "function" ? ( +function G5(l, s, u) { + return typeof l.default == "function" ? ( // @ts-expect-error - c.default(s, u) + l.default(s, u) ) : ( // @ts-expect-error - c.default + l.default ); } // @__NO_SIDE_EFFECTS__ -function I5() { +function Y5() { return { kind: "schema", type: "any", - reference: I5, + reference: Y5, expects: "any", async: !1, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(c) { - return c.typed = !0, c; + "~run"(l) { + return l.typed = !0, l; } }; } // @__NO_SIDE_EFFECTS__ -function If(c, s) { +function zf(l, s) { return { kind: "schema", type: "array", - reference: If, + reference: zf, expects: "Array", async: !1, - item: c, + item: l, message: s, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(u, p) { + "~run"(u, m) { var S; const g = u.value; if (Array.isArray(g)) { u.typed = !0, u.value = []; for (let U = 0; U < g.length; U++) { - const Q = g[U], T = this.item["~run"]({ value: Q }, p); + const M = g[U], T = this.item["~run"]({ value: M }, m); if (T.issues) { const F = { type: "array", origin: "value", input: g, key: U, - value: Q + value: M }; for (const b of T.issues) b.path ? b.path.unshift(F) : b.path = [F], (S = u.issues) == null || S.push(b); - if (u.issues || (u.issues = T.issues), p.abortEarly) { + if (u.issues || (u.issues = T.issues), m.abortEarly) { u.typed = !1; break; } @@ -157,65 +157,65 @@ function If(c, s) { T.typed || (u.typed = !1), u.value.push(T.value); } } else - ho(this, "type", u, p); + po(this, "type", u, m); return u; } }; } // @__NO_SIDE_EFFECTS__ -function Qa(c) { +function Qa(l) { return { kind: "schema", type: "boolean", reference: Qa, expects: "boolean", async: !1, - message: c, + message: l, get "~standard"() { return /* @__PURE__ */ $a(this); }, "~run"(s, u) { - return typeof s.value == "boolean" ? s.typed = !0 : ho(this, "type", s, u), s; + return typeof s.value == "boolean" ? s.typed = !0 : po(this, "type", s, u), s; } }; } // @__NO_SIDE_EFFECTS__ -function Gg(c, s) { +function Xg(l, s) { return { kind: "schema", type: "literal", - reference: Gg, - expects: /* @__PURE__ */ hR(c), + reference: Xg, + expects: /* @__PURE__ */ R6(l), async: !1, - literal: c, + literal: l, message: s, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(u, p) { - return u.value === this.literal ? u.typed = !0 : ho(this, "type", u, p), u; + "~run"(u, m) { + return u.value === this.literal ? u.typed = !0 : po(this, "type", u, m), u; } }; } // @__NO_SIDE_EFFECTS__ -function qS(c, s, u) { +function t6(l, s, u) { return { kind: "schema", type: "map", - reference: qS, + reference: t6, expects: "Map", async: !1, - key: c, + key: l, value: s, message: u, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(p, g) { - var U, Q; - const S = p.value; + "~run"(m, g) { + var U, M; + const S = m.value; if (S instanceof Map) { - p.typed = !0, p.value = /* @__PURE__ */ new Map(); + m.typed = !0, m.value = /* @__PURE__ */ new Map(); for (const [T, F] of S) { const b = this.key["~run"]({ value: T }, g); if (b.issues) { @@ -227,17 +227,17 @@ function qS(c, s, u) { value: F }; for (const A of b.issues) - A.path ? A.path.unshift(V) : A.path = [V], (U = p.issues) == null || U.push(A); - if (p.issues || (p.issues = b.issues), g.abortEarly) { - p.typed = !1; + A.path ? A.path.unshift(V) : A.path = [V], (U = m.issues) == null || U.push(A); + if (m.issues || (m.issues = b.issues), g.abortEarly) { + m.typed = !1; break; } } - const M = this.value["~run"]( + const k = this.value["~run"]( { value: F }, g ); - if (M.issues) { + if (k.issues) { const V = { type: "map", origin: "value", @@ -245,64 +245,64 @@ function qS(c, s, u) { key: T, value: F }; - for (const A of M.issues) - A.path ? A.path.unshift(V) : A.path = [V], (Q = p.issues) == null || Q.push(A); - if (p.issues || (p.issues = M.issues), g.abortEarly) { - p.typed = !1; + for (const A of k.issues) + A.path ? A.path.unshift(V) : A.path = [V], (M = m.issues) == null || M.push(A); + if (m.issues || (m.issues = k.issues), g.abortEarly) { + m.typed = !1; break; } } - (!b.typed || !M.typed) && (p.typed = !1), p.value.set(b.value, M.value); + (!b.typed || !k.typed) && (m.typed = !1), m.value.set(b.value, k.value); } } else - ho(this, "type", p, g); - return p; + po(this, "type", m, g); + return m; } }; } // @__NO_SIDE_EFFECTS__ -function ma(c) { +function ma(l) { return { kind: "schema", type: "number", reference: ma, expects: "number", async: !1, - message: c, + message: l, get "~standard"() { return /* @__PURE__ */ $a(this); }, "~run"(s, u) { - return typeof s.value == "number" && !isNaN(s.value) ? s.typed = !0 : ho(this, "type", s, u), s; + return typeof s.value == "number" && !isNaN(s.value) ? s.typed = !0 : po(this, "type", s, u), s; } }; } // @__NO_SIDE_EFFECTS__ -function di(c, s) { +function di(l, s) { return { kind: "schema", type: "object", reference: di, expects: "Object", async: !1, - entries: c, + entries: l, message: s, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(u, p) { + "~run"(u, m) { var S; const g = u.value; if (g && typeof g == "object") { u.typed = !0, u.value = {}; for (const U in this.entries) { - const Q = this.entries[U]; - if (U in g || (Q.type === "exact_optional" || Q.type === "optional" || Q.type === "nullish") && // @ts-expect-error - Q.default !== void 0) { + const M = this.entries[U]; + if (U in g || (M.type === "exact_optional" || M.type === "optional" || M.type === "nullish") && // @ts-expect-error + M.default !== void 0) { const T = U in g ? ( // @ts-expect-error g[U] - ) : /* @__PURE__ */ L5(Q), F = Q["~run"]({ value: T }, p); + ) : /* @__PURE__ */ G5(M), F = M["~run"]({ value: T }, m); if (F.issues) { const b = { type: "object", @@ -311,17 +311,17 @@ function di(c, s) { key: U, value: T }; - for (const M of F.issues) - M.path ? M.path.unshift(b) : M.path = [b], (S = u.issues) == null || S.push(M); - if (u.issues || (u.issues = F.issues), p.abortEarly) { + for (const k of F.issues) + k.path ? k.path.unshift(b) : k.path = [b], (S = u.issues) == null || S.push(k); + if (u.issues || (u.issues = F.issues), m.abortEarly) { u.typed = !1; break; } } F.typed || (u.typed = !1), u.value[U] = F.value; - } else if (Q.fallback !== void 0) - u.value[U] = /* @__PURE__ */ uT(Q); - else if (Q.type !== "exact_optional" && Q.type !== "optional" && Q.type !== "nullish" && (ho(this, "key", u, p, { + } else if (M.fallback !== void 0) + u.value[U] = /* @__PURE__ */ UT(M); + else if (M.type !== "exact_optional" && M.type !== "optional" && M.type !== "nullish" && (po(this, "key", u, m, { input: void 0, expected: `"${U}"`, path: [ @@ -334,72 +334,72 @@ function di(c, s) { value: g[U] } ] - }), p.abortEarly)) + }), m.abortEarly)) break; } } else - ho(this, "type", u, p); + po(this, "type", u, m); return u; } }; } // @__NO_SIDE_EFFECTS__ -function $e(c, s) { +function et(l, s) { return { kind: "schema", type: "optional", - reference: $e, - expects: `(${c.expects} | undefined)`, + reference: et, + expects: `(${l.expects} | undefined)`, async: !1, - wrapped: c, + wrapped: l, default: s, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(u, p) { - return u.value === void 0 && (this.default !== void 0 && (u.value = /* @__PURE__ */ L5(this, u, p)), u.value === void 0) ? (u.typed = !0, u) : this.wrapped["~run"](u, p); + "~run"(u, m) { + return u.value === void 0 && (this.default !== void 0 && (u.value = /* @__PURE__ */ G5(this, u, m)), u.value === void 0) ? (u.typed = !0, u) : this.wrapped["~run"](u, m); } }; } // @__NO_SIDE_EFFECTS__ -function W5(c, s) { +function X5(l, s) { return { kind: "schema", type: "picklist", - reference: W5, - expects: /* @__PURE__ */ J5(c.map(hR), "|"), + reference: X5, + expects: /* @__PURE__ */ P5(l.map(R6), "|"), async: !1, - options: c, + options: l, message: s, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(u, p) { - return this.options.includes(u.value) ? u.typed = !0 : ho(this, "type", u, p), u; + "~run"(u, m) { + return this.options.includes(u.value) ? u.typed = !0 : po(this, "type", u, m), u; } }; } // @__NO_SIDE_EFFECTS__ -function H5(c, s, u) { +function K5(l, s, u) { return { kind: "schema", type: "record", - reference: H5, + reference: K5, expects: "Object", async: !1, - key: c, + key: l, value: s, message: u, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(p, g) { - var U, Q; - const S = p.value; + "~run"(m, g) { + var U, M; + const S = m.value; if (S && typeof S == "object") { - p.typed = !0, p.value = {}; + m.typed = !0, m.value = {}; for (const T in S) - if (/* @__PURE__ */ dT(S, T)) { + if (/* @__PURE__ */ ET(S, T)) { const F = S[T], b = this.key["~run"]({ value: T }, g); if (b.issues) { const V = { @@ -410,17 +410,17 @@ function H5(c, s, u) { value: F }; for (const A of b.issues) - A.path = [V], (U = p.issues) == null || U.push(A); - if (p.issues || (p.issues = b.issues), g.abortEarly) { - p.typed = !1; + A.path = [V], (U = m.issues) == null || U.push(A); + if (m.issues || (m.issues = b.issues), g.abortEarly) { + m.typed = !1; break; } } - const M = this.value["~run"]( + const k = this.value["~run"]( { value: F }, g ); - if (M.issues) { + if (k.issues) { const V = { type: "object", origin: "value", @@ -428,66 +428,66 @@ function H5(c, s, u) { key: T, value: F }; - for (const A of M.issues) - A.path ? A.path.unshift(V) : A.path = [V], (Q = p.issues) == null || Q.push(A); - if (p.issues || (p.issues = M.issues), g.abortEarly) { - p.typed = !1; + for (const A of k.issues) + A.path ? A.path.unshift(V) : A.path = [V], (M = m.issues) == null || M.push(A); + if (m.issues || (m.issues = k.issues), g.abortEarly) { + m.typed = !1; break; } } - (!b.typed || !M.typed) && (p.typed = !1), b.typed && (p.value[b.value] = M.value); + (!b.typed || !k.typed) && (m.typed = !1), b.typed && (m.value[b.value] = k.value); } } else - ho(this, "type", p, g); - return p; + po(this, "type", m, g); + return m; } }; } // @__NO_SIDE_EFFECTS__ -function Xt(c) { +function Xt(l) { return { kind: "schema", type: "string", reference: Xt, expects: "string", async: !1, - message: c, + message: l, get "~standard"() { return /* @__PURE__ */ $a(this); }, "~run"(s, u) { - return typeof s.value == "string" ? s.typed = !0 : ho(this, "type", s, u), s; + return typeof s.value == "string" ? s.typed = !0 : po(this, "type", s, u), s; } }; } // @__NO_SIDE_EFFECTS__ -function D3(c) { +function L3(l) { let s; - if (c) - for (const u of c) + if (l) + for (const u of l) s ? s.push(...u.issues) : s = u.issues; return s; } // @__NO_SIDE_EFFECTS__ -function z5(c, s) { +function q5(l, s) { return { kind: "schema", type: "union", - reference: z5, - expects: /* @__PURE__ */ J5( - c.map((u) => u.expects), + reference: q5, + expects: /* @__PURE__ */ P5( + l.map((u) => u.expects), "|" ), async: !1, - options: c, + options: l, message: s, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(u, p) { + "~run"(u, m) { let g, S, U; - for (const Q of this.options) { - const T = Q["~run"]({ value: u.value }, p); + for (const M of this.options) { + const T = M["~run"]({ value: u.value }, m); if (T.typed) if (T.issues) S ? S.push(T) : S = [T]; @@ -503,14 +503,14 @@ function z5(c, s) { if (S) { if (S.length === 1) return S[0]; - ho(this, "type", u, p, { - issues: /* @__PURE__ */ D3(S) + po(this, "type", u, m, { + issues: /* @__PURE__ */ L3(S) }), u.typed = !0; } else { if ((U == null ? void 0 : U.length) === 1) return U[0]; - ho(this, "type", u, p, { - issues: /* @__PURE__ */ D3(U) + po(this, "type", u, m, { + issues: /* @__PURE__ */ L3(U) }); } return u; @@ -518,28 +518,28 @@ function z5(c, s) { }; } // @__NO_SIDE_EFFECTS__ -function j5() { +function $5() { return { kind: "schema", type: "unknown", - reference: j5, + reference: $5, expects: "unknown", async: !1, get "~standard"() { return /* @__PURE__ */ $a(this); }, - "~run"(c) { - return c.typed = !0, c; + "~run"(l) { + return l.typed = !0, l; } }; } // @__NO_SIDE_EFFECTS__ -function hT(c, s) { +function TT(l, s) { const u = {}; - for (const p of s) - u[p] = c.entries[p]; + for (const m of s) + u[m] = l.entries[m]; return { - ...c, + ...l, entries: u, get "~standard"() { return /* @__PURE__ */ $a(this); @@ -547,16 +547,16 @@ function hT(c, s) { }; } // @__NO_SIDE_EFFECTS__ -function sv(c, s, u) { - const p = c["~run"]({ value: s }, /* @__PURE__ */ A5(u)); +function lv(l, s, u) { + const m = l["~run"]({ value: s }, /* @__PURE__ */ j5(u)); return { - typed: p.typed, - success: !p.issues, - output: p.value, - issues: p.issues + typed: m.typed, + success: !m.issues, + output: m.value, + issues: m.issues }; } -class mT { +class yT { constructor() { z(this, "actionListenersMap"); z(this, "emittingEvents", !1); @@ -569,8 +569,8 @@ class mT { this.emittingEvents = !1; } publish(s, u = !1) { - const p = s.type.startsWith("internal."); - if (!this.emittingEvents && !u && !p) + const m = s.type.startsWith("internal."); + if (!this.emittingEvents && !u && !m) return; const g = this.actionListenersMap.get(s.type); if (g) @@ -578,37 +578,37 @@ class mT { typeof S == "function" && ("payload" in s ? S(s.payload) : S()); } // Subscribe to actions - subscribe(s, u, p) { + subscribe(s, u, m) { var S, U; - if ((S = p == null ? void 0 : p.signal) != null && S.aborted) + if ((S = m == null ? void 0 : m.signal) != null && S.aborted) return () => { }; this.actionListenersMap.get(s) || this.actionListenersMap.set(s, []), (U = this.actionListenersMap.get(s)) == null || U.push(u); const g = () => { - const Q = this.actionListenersMap.get(s); - Q && this.actionListenersMap.set( + const M = this.actionListenersMap.get(s); + M && this.actionListenersMap.set( s, - Q.filter((T) => T !== u) + M.filter((T) => T !== u) ); }; - return p != null && p.signal && p.signal.addEventListener("abort", g, { once: !0 }), g; + return m != null && m.signal && m.signal.addEventListener("abort", g, { once: !0 }), g; } } -const ze = new mT(), x3 = (c) => { +const We = new yT(), I3 = (l) => { let s; - const u = /* @__PURE__ */ new Set(), p = (F, b) => { - const M = typeof F == "function" ? F(s) : F; - if (!Object.is(M, s)) { + const u = /* @__PURE__ */ new Set(), m = (F, b) => { + const k = typeof F == "function" ? F(s) : F; + if (!Object.is(k, s)) { const V = s; - s = b ?? (typeof M != "object" || M === null) ? M : Object.assign({}, s, M), u.forEach((A) => A(s, V)); + s = b ?? (typeof k != "object" || k === null) ? k : Object.assign({}, s, k), u.forEach((A) => A(s, V)); } - }, g = () => s, Q = { setState: p, getState: g, getInitialState: () => T, subscribe: (F) => (u.add(F), () => u.delete(F)) }, T = s = c(p, g, Q); - return Q; -}, pT = (c) => c ? x3(c) : x3; -function fT(c) { - return c && c.__esModule && Object.prototype.hasOwnProperty.call(c, "default") ? c.default : c; + }, g = () => s, M = { setState: m, getState: g, getInitialState: () => T, subscribe: (F) => (u.add(F), () => u.delete(F)) }, T = s = l(m, g, M); + return M; +}, NT = (l) => l ? I3(l) : I3; +function bT(l) { + return l && l.__esModule && Object.prototype.hasOwnProperty.call(l, "default") ? l.default : l; } -var wg = { exports: {} }, kt = {}; +var Jg = { exports: {} }, kt = {}; /** * @license React * react.production.js @@ -618,13 +618,13 @@ var wg = { exports: {} }, kt = {}; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var Z3; -function gT() { - if (Z3) return kt; - Z3 = 1; - var c = Symbol.for("react.transitional.element"), s = Symbol.for("react.portal"), u = Symbol.for("react.fragment"), p = Symbol.for("react.strict_mode"), g = Symbol.for("react.profiler"), S = Symbol.for("react.consumer"), U = Symbol.for("react.context"), Q = Symbol.for("react.forward_ref"), T = Symbol.for("react.suspense"), F = Symbol.for("react.memo"), b = Symbol.for("react.lazy"), M = Symbol.iterator; +var W3; +function VT() { + if (W3) return kt; + W3 = 1; + var l = Symbol.for("react.transitional.element"), s = Symbol.for("react.portal"), u = Symbol.for("react.fragment"), m = Symbol.for("react.strict_mode"), g = Symbol.for("react.profiler"), S = Symbol.for("react.consumer"), U = Symbol.for("react.context"), M = Symbol.for("react.forward_ref"), T = Symbol.for("react.suspense"), F = Symbol.for("react.memo"), b = Symbol.for("react.lazy"), k = Symbol.iterator; function V(y) { - return y === null || typeof y != "object" ? null : (y = M && y[M] || y["@@iterator"], typeof y == "function" ? y : null); + return y === null || typeof y != "object" ? null : (y = k && y[k] || y["@@iterator"], typeof y == "function" ? y : null); } var A = { isMounted: function() { @@ -636,38 +636,38 @@ function gT() { }, enqueueSetState: function() { } - }, ge = Object.assign, de = {}; - function Me(y, L, j) { - this.props = y, this.context = L, this.refs = de, this.updater = j || A; + }, ve = Object.assign, me = {}; + function Qe(y, L, j) { + this.props = y, this.context = L, this.refs = me, this.updater = j || A; } - Me.prototype.isReactComponent = {}, Me.prototype.setState = function(y, L) { + Qe.prototype.isReactComponent = {}, Qe.prototype.setState = function(y, L) { if (typeof y != "object" && typeof y != "function" && y != null) throw Error( "takes an object of state variables to update or a function which returns an object of state variables." ); this.updater.enqueueSetState(this, y, L, "setState"); - }, Me.prototype.forceUpdate = function(y) { + }, Qe.prototype.forceUpdate = function(y) { this.updater.enqueueForceUpdate(this, y, "forceUpdate"); }; - function ee() { - } - ee.prototype = Me.prototype; - function ae(y, L, j) { - this.props = y, this.context = L, this.refs = de, this.updater = j || A; - } - var Re = ae.prototype = new ee(); - Re.constructor = ae, ge(Re, Me.prototype), Re.isPureReactComponent = !0; - var Le = Array.isArray, G = { H: null, A: null, T: null, S: null, V: null }, Qe = Object.prototype.hasOwnProperty; - function Te(y, L, j, pe, Fe, Ae) { - return j = Ae.ref, { - $$typeof: c, + function ne() { + } + ne.prototype = Qe.prototype; + function ee(y, L, j) { + this.props = y, this.context = L, this.refs = me, this.updater = j || A; + } + var ge = ee.prototype = new ne(); + ge.constructor = ee, ve(ge, Qe.prototype), ge.isPureReactComponent = !0; + var we = Array.isArray, G = { H: null, A: null, T: null, S: null, V: null }, De = Object.prototype.hasOwnProperty; + function Te(y, L, j, pe, Fe, Le) { + return j = Le.ref, { + $$typeof: l, type: y, key: L, ref: j !== void 0 ? j : null, - props: Ae + props: Le }; } - function Ee(y, L) { + function ke(y, L) { return Te( y.type, L, @@ -677,29 +677,29 @@ function gT() { y.props ); } - function ye(y) { - return typeof y == "object" && y !== null && y.$$typeof === c; + function be(y) { + return typeof y == "object" && y !== null && y.$$typeof === l; } - function Ue(y) { + function ye(y) { var L = { "=": "=0", ":": "=2" }; return "$" + y.replace(/[=:]/g, function(j) { return L[j]; }); } - var be = /\/+/g; - function xe(y, L) { - return typeof y == "object" && y !== null && y.key != null ? Ue("" + y.key) : L.toString(36); + var Ve = /\/+/g; + function Ee(y, L) { + return typeof y == "object" && y !== null && y.key != null ? ye("" + y.key) : L.toString(36); } - function Ce() { + function Ne() { } - function Ze(y) { + function xe(y) { switch (y.status) { case "fulfilled": return y.value; case "rejected": throw y.reason; default: - switch (typeof y.status == "string" ? y.then(Ce, Ce) : (y.status = "pending", y.then( + switch (typeof y.status == "string" ? y.then(Ne, Ne) : (y.status = "pending", y.then( function(L) { y.status === "pending" && (y.status = "fulfilled", y.value = L); }, @@ -715,13 +715,13 @@ function gT() { } throw y; } - function Ne(y, L, j, pe, Fe) { - var Ae = typeof y; - (Ae === "undefined" || Ae === "boolean") && (y = null); + function Ue(y, L, j, pe, Fe) { + var Le = typeof y; + (Le === "undefined" || Le === "boolean") && (y = null); var Oe = !1; if (y === null) Oe = !0; else - switch (Ae) { + switch (Le) { case "bigint": case "string": case "number": @@ -729,12 +729,12 @@ function gT() { break; case "object": switch (y.$$typeof) { - case c: + case l: case s: Oe = !0; break; case b: - return Oe = y._init, Ne( + return Oe = y._init, Ue( Oe(y._payload), L, j, @@ -744,39 +744,39 @@ function gT() { } } if (Oe) - return Fe = Fe(y), Oe = pe === "" ? "." + xe(y, 0) : pe, Le(Fe) ? (j = "", Oe != null && (j = Oe.replace(be, "$&/") + "/"), Ne(Fe, L, j, "", function(pt) { - return pt; - })) : Fe != null && (ye(Fe) && (Fe = Ee( + return Fe = Fe(y), Oe = pe === "" ? "." + Ee(y, 0) : pe, we(Fe) ? (j = "", Oe != null && (j = Oe.replace(Ve, "$&/") + "/"), Ue(Fe, L, j, "", function(ft) { + return ft; + })) : Fe != null && (be(Fe) && (Fe = ke( Fe, j + (Fe.key == null || y && y.key === Fe.key ? "" : ("" + Fe.key).replace( - be, + Ve, "$&/" ) + "/") + Oe )), L.push(Fe)), 1; Oe = 0; var tn = pe === "" ? "." : pe + ":"; - if (Le(y)) - for (var Ge = 0; Ge < y.length; Ge++) - pe = y[Ge], Ae = tn + xe(pe, Ge), Oe += Ne( + if (we(y)) + for (var Ye = 0; Ye < y.length; Ye++) + pe = y[Ye], Le = tn + Ee(pe, Ye), Oe += Ue( pe, L, j, - Ae, + Le, Fe ); - else if (Ge = V(y), typeof Ge == "function") - for (y = Ge.call(y), Ge = 0; !(pe = y.next()).done; ) - pe = pe.value, Ae = tn + xe(pe, Ge++), Oe += Ne( + else if (Ye = V(y), typeof Ye == "function") + for (y = Ye.call(y), Ye = 0; !(pe = y.next()).done; ) + pe = pe.value, Le = tn + Ee(pe, Ye++), Oe += Ue( pe, L, j, - Ae, + Le, Fe ); - else if (Ae === "object") { + else if (Le === "object") { if (typeof y.then == "function") - return Ne( - Ze(y), + return Ue( + xe(y), L, j, pe, @@ -791,11 +791,11 @@ function gT() { function Z(y, L, j) { if (y == null) return y; var pe = [], Fe = 0; - return Ne(y, pe, "", "", function(Ae) { - return L.call(j, Ae, Fe++); + return Ue(y, pe, "", "", function(Le) { + return L.call(j, Le, Fe++); }), pe; } - function X(y) { + function Y(y) { if (y._status === -1) { var L = y._result; L = L(), L.then( @@ -810,7 +810,7 @@ function gT() { if (y._status === 1) return y._result.default; throw y._result; } - var le = typeof reportError == "function" ? reportError : function(y) { + var oe = typeof reportError == "function" ? reportError : function(y) { if (typeof window == "object" && typeof window.ErrorEvent == "function") { var L = new window.ErrorEvent("error", { bubbles: !0, @@ -825,7 +825,7 @@ function gT() { } console.error(y); }; - function De() { + function Ze() { } return kt.Children = { map: Z, @@ -850,13 +850,13 @@ function gT() { }) || []; }, only: function(y) { - if (!ye(y)) + if (!be(y)) throw Error( "React.Children.only expected to receive a single React element child." ); return y; } - }, kt.Component = Me, kt.Fragment = u, kt.Profiler = g, kt.PureComponent = ae, kt.StrictMode = p, kt.Suspense = T, kt.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = G, kt.__COMPILER_RUNTIME = { + }, kt.Component = Qe, kt.Fragment = u, kt.Profiler = g, kt.PureComponent = ee, kt.StrictMode = m, kt.Suspense = T, kt.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = G, kt.__COMPILER_RUNTIME = { __proto__: null, c: function(y) { return G.H.useMemoCache(y); @@ -870,18 +870,18 @@ function gT() { throw Error( "The argument must be a React element, but you passed " + y + "." ); - var pe = ge({}, y.props), Fe = y.key, Ae = void 0; + var pe = ve({}, y.props), Fe = y.key, Le = void 0; if (L != null) - for (Oe in L.ref !== void 0 && (Ae = void 0), L.key !== void 0 && (Fe = "" + L.key), L) - !Qe.call(L, Oe) || Oe === "key" || Oe === "__self" || Oe === "__source" || Oe === "ref" && L.ref === void 0 || (pe[Oe] = L[Oe]); + for (Oe in L.ref !== void 0 && (Le = void 0), L.key !== void 0 && (Fe = "" + L.key), L) + !De.call(L, Oe) || Oe === "key" || Oe === "__self" || Oe === "__source" || Oe === "ref" && L.ref === void 0 || (pe[Oe] = L[Oe]); var Oe = arguments.length - 2; if (Oe === 1) pe.children = j; else if (1 < Oe) { - for (var tn = Array(Oe), Ge = 0; Ge < Oe; Ge++) - tn[Ge] = arguments[Ge + 2]; + for (var tn = Array(Oe), Ye = 0; Ye < Oe; Ye++) + tn[Ye] = arguments[Ye + 2]; pe.children = tn; } - return Te(y.type, Fe, void 0, void 0, Ae, pe); + return Te(y.type, Fe, void 0, void 0, Le, pe); }, kt.createContext = function(y) { return y = { $$typeof: U, @@ -895,30 +895,30 @@ function gT() { _context: y }, y; }, kt.createElement = function(y, L, j) { - var pe, Fe = {}, Ae = null; + var pe, Fe = {}, Le = null; if (L != null) - for (pe in L.key !== void 0 && (Ae = "" + L.key), L) - Qe.call(L, pe) && pe !== "key" && pe !== "__self" && pe !== "__source" && (Fe[pe] = L[pe]); + for (pe in L.key !== void 0 && (Le = "" + L.key), L) + De.call(L, pe) && pe !== "key" && pe !== "__self" && pe !== "__source" && (Fe[pe] = L[pe]); var Oe = arguments.length - 2; if (Oe === 1) Fe.children = j; else if (1 < Oe) { - for (var tn = Array(Oe), Ge = 0; Ge < Oe; Ge++) - tn[Ge] = arguments[Ge + 2]; + for (var tn = Array(Oe), Ye = 0; Ye < Oe; Ye++) + tn[Ye] = arguments[Ye + 2]; Fe.children = tn; } if (y && y.defaultProps) for (pe in Oe = y.defaultProps, Oe) Fe[pe] === void 0 && (Fe[pe] = Oe[pe]); - return Te(y, Ae, void 0, void 0, null, Fe); + return Te(y, Le, void 0, void 0, null, Fe); }, kt.createRef = function() { return { current: null }; }, kt.forwardRef = function(y) { - return { $$typeof: Q, render: y }; - }, kt.isValidElement = ye, kt.lazy = function(y) { + return { $$typeof: M, render: y }; + }, kt.isValidElement = be, kt.lazy = function(y) { return { $$typeof: b, _payload: { _status: -1, _result: y }, - _init: X + _init: Y }; }, kt.memo = function(y, L) { return { @@ -931,9 +931,9 @@ function gT() { G.T = j; try { var pe = y(), Fe = G.S; - Fe !== null && Fe(j, pe), typeof pe == "object" && pe !== null && typeof pe.then == "function" && pe.then(De, le); - } catch (Ae) { - le(Ae); + Fe !== null && Fe(j, pe), typeof pe == "object" && pe !== null && typeof pe.then == "function" && pe.then(Ze, oe); + } catch (Le) { + oe(Le); } finally { G.T = L; } @@ -985,7 +985,7 @@ function gT() { return G.H.useTransition(); }, kt.version = "19.1.0", kt; } -var Af = { exports: {} }; +var Lf = { exports: {} }; /** * @license React * react.development.js @@ -995,10 +995,10 @@ var Af = { exports: {} }; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -Af.exports; -var O3; -function vT() { - return O3 || (O3 = 1, function(c, s) { +Lf.exports; +var H3; +function CT() { + return H3 || (H3 = 1, function(l, s) { process.env.NODE_ENV !== "production" && function() { function u(C, H) { Object.defineProperty(S.prototype, C, { @@ -1007,25 +1007,25 @@ function vT() { } }); } - function p(C) { + function m(C) { return C === null || typeof C != "object" ? null : (C = Hn && C[Hn] || C["@@iterator"], typeof C == "function" ? C : null); } function g(C, H) { C = (C = C.constructor) && (C.displayName || C.name) || "ReactClass"; - var ke = C + "." + H; - qt[ke] || (console.error( + var Me = C + "." + H; + qt[Me] || (console.error( "Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", H, C - ), qt[ke] = !0); + ), qt[Me] = !0); } - function S(C, H, ke) { - this.props = C, this.context = H, this.refs = er, this.updater = ke || ti; + function S(C, H, Me) { + this.props = C, this.context = H, this.refs = tr, this.updater = Me || ti; } function U() { } - function Q(C, H, ke) { - this.props = C, this.context = H, this.refs = er, this.updater = ke || ti; + function M(C, H, Me) { + this.props = C, this.context = H, this.refs = tr, this.updater = Me || ti; } function T(C) { return "" + C; @@ -1039,8 +1039,8 @@ function vT() { } if (H) { H = console; - var ke = H.error, Be = typeof Symbol == "function" && Symbol.toStringTag && C[Symbol.toStringTag] || C.constructor.name || "Object"; - return ke.call( + var Me = H.error, Be = typeof Symbol == "function" && Symbol.toStringTag && C[Symbol.toStringTag] || C.constructor.name || "Object"; + return Me.call( H, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", Be @@ -1050,7 +1050,7 @@ function vT() { function b(C) { if (C == null) return null; if (typeof C == "function") - return C.$$typeof === Rr ? null : C.displayName || C.name || null; + return C.$$typeof === Ur ? null : C.displayName || C.name || null; if (typeof C == "string") return C; switch (C) { case y: @@ -1070,18 +1070,18 @@ function vT() { switch (typeof C.tag == "number" && console.error( "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." ), C.$$typeof) { - case De: + case Ze: return "Portal"; case Fe: return (C.displayName || "Context") + ".Provider"; case pe: return (C._context.displayName || "Context") + ".Consumer"; - case Ae: + case Le: var H = C.render; return C = C.displayName, C || (C = H.displayName || H.name || "", C = C !== "" ? "ForwardRef(" + C + ")" : "ForwardRef"), C; - case Ge: + case Ye: return H = C.displayName || null, H !== null ? H : b(C.type) || "Memo"; - case pt: + case ft: H = C._payload, C = C._init; try { return b(C(H)); @@ -1090,9 +1090,9 @@ function vT() { } return null; } - function M(C) { + function k(C) { if (C === y) return "<>"; - if (typeof C == "object" && C !== null && C.$$typeof === pt) + if (typeof C == "object" && C !== null && C.$$typeof === ft) return "<...>"; try { var H = b(C); @@ -1108,41 +1108,41 @@ function vT() { function A() { return Error("react-stack-top-frame"); } - function ge(C) { + function ve(C) { if (Pi.call(C, "key")) { var H = Object.getOwnPropertyDescriptor(C, "key").get; if (H && H.isReactWarning) return !1; } return C.key !== void 0; } - function de(C, H) { - function ke() { + function me(C, H) { + function Me() { fa || (fa = !0, console.error( "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", H )); } - ke.isReactWarning = !0, Object.defineProperty(C, "key", { - get: ke, + Me.isReactWarning = !0, Object.defineProperty(C, "key", { + get: Me, configurable: !0 }); } - function Me() { + function Qe() { var C = b(this.type); - return po[C] || (po[C] = !0, console.error( + return go[C] || (go[C] = !0, console.error( "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." )), C = this.props.ref, C !== void 0 ? C : null; } - function ee(C, H, ke, Be, je, lt, ft, Vt) { - return ke = lt.ref, C = { - $$typeof: le, + function ne(C, H, Me, Be, Pe, ct, gt, Vt) { + return Me = ct.ref, C = { + $$typeof: oe, type: C, key: H, - props: lt, - _owner: je - }, (ke !== void 0 ? ke : null) !== null ? Object.defineProperty(C, "ref", { + props: ct, + _owner: Pe + }, (Me !== void 0 ? Me : null) !== null ? Object.defineProperty(C, "ref", { enumerable: !1, - get: Me + get: Qe }) : Object.defineProperty(C, "ref", { enumerable: !1, value: null }), C._store = {}, Object.defineProperty(C._store, "validated", { configurable: !1, enumerable: !1, @@ -1157,7 +1157,7 @@ function vT() { configurable: !1, enumerable: !1, writable: !0, - value: ft + value: gt }), Object.defineProperty(C, "_debugTask", { configurable: !1, enumerable: !1, @@ -1165,8 +1165,8 @@ function vT() { value: Vt }), Object.freeze && (Object.freeze(C.props), Object.freeze(C)), C; } - function ae(C, H) { - return H = ee( + function ee(C, H) { + return H = ne( C.type, H, void 0, @@ -1177,19 +1177,19 @@ function vT() { C._debugTask ), C._store && (H._store.validated = C._store.validated), H; } - function Re(C) { - return typeof C == "object" && C !== null && C.$$typeof === le; + function ge(C) { + return typeof C == "object" && C !== null && C.$$typeof === oe; } - function Le(C) { + function we(C) { var H = { "=": "=0", ":": "=2" }; - return "$" + C.replace(/[=:]/g, function(ke) { - return H[ke]; + return "$" + C.replace(/[=:]/g, function(Me) { + return H[Me]; }); } function G(C, H) { - return typeof C == "object" && C !== null && C.key != null ? (F(C.key), Le("" + C.key)) : H.toString(36); + return typeof C == "object" && C !== null && C.key != null ? (F(C.key), we("" + C.key)) : H.toString(36); } - function Qe() { + function De() { } function Te(C) { switch (C.status) { @@ -1198,7 +1198,7 @@ function vT() { case "rejected": throw C.reason; default: - switch (typeof C.status == "string" ? C.then(Qe, Qe) : (C.status = "pending", C.then( + switch (typeof C.status == "string" ? C.then(De, De) : (C.status = "pending", C.then( function(H) { C.status === "pending" && (C.status = "fulfilled", C.value = H); }, @@ -1214,96 +1214,96 @@ function vT() { } throw C; } - function Ee(C, H, ke, Be, je) { - var lt = typeof C; - (lt === "undefined" || lt === "boolean") && (C = null); - var ft = !1; - if (C === null) ft = !0; + function ke(C, H, Me, Be, Pe) { + var ct = typeof C; + (ct === "undefined" || ct === "boolean") && (C = null); + var gt = !1; + if (C === null) gt = !0; else - switch (lt) { + switch (ct) { case "bigint": case "string": case "number": - ft = !0; + gt = !0; break; case "object": switch (C.$$typeof) { - case le: - case De: - ft = !0; + case oe: + case Ze: + gt = !0; break; - case pt: - return ft = C._init, Ee( - ft(C._payload), + case ft: + return gt = C._init, ke( + gt(C._payload), H, - ke, + Me, Be, - je + Pe ); } } - if (ft) { - ft = C, je = je(ft); - var Vt = Be === "" ? "." + G(ft, 0) : Be; - return Ot(je) ? (ke = "", Vt != null && (ke = Vt.replace(Jn, "$&/") + "/"), Ee(je, H, ke, "", function(Sn) { - return Sn; - })) : je != null && (Re(je) && (je.key != null && (ft && ft.key === je.key || F(je.key)), ke = ae( - je, - ke + (je.key == null || ft && ft.key === je.key ? "" : ("" + je.key).replace( + if (gt) { + gt = C, Pe = Pe(gt); + var Vt = Be === "" ? "." + G(gt, 0) : Be; + return Ot(Pe) ? (Me = "", Vt != null && (Me = Vt.replace(Jn, "$&/") + "/"), ke(Pe, H, Me, "", function(Rn) { + return Rn; + })) : Pe != null && (ge(Pe) && (Pe.key != null && (gt && gt.key === Pe.key || F(Pe.key)), Me = ee( + Pe, + Me + (Pe.key == null || gt && gt.key === Pe.key ? "" : ("" + Pe.key).replace( Jn, "$&/" ) + "/") + Vt - ), Be !== "" && ft != null && Re(ft) && ft.key == null && ft._store && !ft._store.validated && (ke._store.validated = 2), je = ke), H.push(je)), 1; + ), Be !== "" && gt != null && ge(gt) && gt.key == null && gt._store && !gt._store.validated && (Me._store.validated = 2), Pe = Me), H.push(Pe)), 1; } - if (ft = 0, Vt = Be === "" ? "." : Be + ":", Ot(C)) - for (var dt = 0; dt < C.length; dt++) - Be = C[dt], lt = Vt + G(Be, dt), ft += Ee( + if (gt = 0, Vt = Be === "" ? "." : Be + ":", Ot(C)) + for (var ut = 0; ut < C.length; ut++) + Be = C[ut], ct = Vt + G(Be, ut), gt += ke( Be, H, - ke, - lt, - je + Me, + ct, + Pe ); - else if (dt = p(C), typeof dt == "function") - for (dt === C.entries && (bi = !0), C = dt.call(C), dt = 0; !(Be = C.next()).done; ) - Be = Be.value, lt = Vt + G(Be, dt++), ft += Ee( + else if (ut = m(C), typeof ut == "function") + for (ut === C.entries && (bi = !0), C = ut.call(C), ut = 0; !(Be = C.next()).done; ) + Be = Be.value, ct = Vt + G(Be, ut++), gt += ke( Be, H, - ke, - lt, - je + Me, + ct, + Pe ); - else if (lt === "object") { + else if (ct === "object") { if (typeof C.then == "function") - return Ee( + return ke( Te(C), H, - ke, + Me, Be, - je + Pe ); throw H = String(C), Error( "Objects are not valid as a React child (found: " + (H === "[object Object]" ? "object with keys {" + Object.keys(C).join(", ") + "}" : H) + "). If you meant to render a collection of children, use an array instead." ); } - return ft; + return gt; } - function ye(C, H, ke) { + function be(C, H, Me) { if (C == null) return C; - var Be = [], je = 0; - return Ee(C, Be, "", "", function(lt) { - return H.call(ke, lt, je++); + var Be = [], Pe = 0; + return ke(C, Be, "", "", function(ct) { + return H.call(Me, ct, Pe++); }), Be; } - function Ue(C) { + function ye(C) { if (C._status === -1) { var H = C._result; H = H(), H.then( - function(ke) { - (C._status === 0 || C._status === -1) && (C._status = 1, C._result = ke); + function(Me) { + (C._status === 0 || C._status === -1) && (C._status = 1, C._result = Me); }, - function(ke) { - (C._status === 0 || C._status === -1) && (C._status = 2, C._result = ke); + function(Me) { + (C._status === 0 || C._status === -1) && (C._status = 2, C._result = Me); } ), C._status === -1 && (C._status = 0, C._result = H); } @@ -1325,7 +1325,7 @@ Your code should look like: ), H.default; throw C._result; } - function be() { + function Ve() { var C = vt.H; return C === null && console.error( `Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: @@ -1335,79 +1335,79 @@ Your code should look like: See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.` ), C; } - function xe() { + function Ee() { } - function Ce(C) { - if (Ur === null) + function Ne(C) { + if (yr === null) try { var H = ("require" + Math.random()).slice(0, 7); - Ur = (c && c[H]).call( - c, + yr = (l && l[H]).call( + l, "timers" ).setImmediate; } catch { - Ur = function(Be) { - fo === !1 && (fo = !0, typeof MessageChannel > "u" && console.error( + yr = function(Be) { + vo === !1 && (vo = !0, typeof MessageChannel > "u" && console.error( "This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning." )); - var je = new MessageChannel(); - je.port1.onmessage = Be, je.port2.postMessage(void 0); + var Pe = new MessageChannel(); + Pe.port1.onmessage = Be, Pe.port2.postMessage(void 0); }; } - return Ur(C); + return yr(C); } - function Ze(C) { + function xe(C) { return 1 < C.length && typeof AggregateError == "function" ? new AggregateError(C) : C[0]; } - function Ne(C, H) { + function Ue(C, H) { H !== Zi - 1 && console.error( "You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. " ), Zi = H; } - function Z(C, H, ke) { + function Z(C, H, Me) { var Be = vt.actQueue; if (Be !== null) if (Be.length !== 0) try { - X(Be), Ce(function() { - return Z(C, H, ke); + Y(Be), Ne(function() { + return Z(C, H, Me); }); return; - } catch (je) { - vt.thrownErrors.push(je); + } catch (Pe) { + vt.thrownErrors.push(Pe); } else vt.actQueue = null; - 0 < vt.thrownErrors.length ? (Be = Ze(vt.thrownErrors), vt.thrownErrors.length = 0, ke(Be)) : H(C); + 0 < vt.thrownErrors.length ? (Be = xe(vt.thrownErrors), vt.thrownErrors.length = 0, Me(Be)) : H(C); } - function X(C) { - if (!yn) { - yn = !0; + function Y(C) { + if (!Nn) { + Nn = !0; var H = 0; try { for (; H < C.length; H++) { - var ke = C[H]; + var Me = C[H]; do { vt.didUsePromise = !1; - var Be = ke(!1); + var Be = Me(!1); if (Be !== null) { if (vt.didUsePromise) { - C[H] = ke, C.splice(0, H); + C[H] = Me, C.splice(0, H); return; } - ke = Be; + Me = Be; } else break; } while (!0); } C.length = 0; - } catch (je) { - C.splice(0, H + 1), vt.thrownErrors.push(je); + } catch (Pe) { + C.splice(0, H + 1), vt.thrownErrors.push(Pe); } finally { - yn = !1; + Nn = !1; } } } typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); - var le = Symbol.for("react.transitional.element"), De = Symbol.for("react.portal"), y = Symbol.for("react.fragment"), L = Symbol.for("react.strict_mode"), j = Symbol.for("react.profiler"), pe = Symbol.for("react.consumer"), Fe = Symbol.for("react.context"), Ae = Symbol.for("react.forward_ref"), Oe = Symbol.for("react.suspense"), tn = Symbol.for("react.suspense_list"), Ge = Symbol.for("react.memo"), pt = Symbol.for("react.lazy"), wn = Symbol.for("react.activity"), Hn = Symbol.iterator, qt = {}, ti = { + var oe = Symbol.for("react.transitional.element"), Ze = Symbol.for("react.portal"), y = Symbol.for("react.fragment"), L = Symbol.for("react.strict_mode"), j = Symbol.for("react.profiler"), pe = Symbol.for("react.consumer"), Fe = Symbol.for("react.context"), Le = Symbol.for("react.forward_ref"), Oe = Symbol.for("react.suspense"), tn = Symbol.for("react.suspense_list"), Ye = Symbol.for("react.memo"), ft = Symbol.for("react.lazy"), wn = Symbol.for("react.activity"), Hn = Symbol.iterator, qt = {}, ti = { isMounted: function() { return !1; }, @@ -1420,8 +1420,8 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix enqueueSetState: function(C) { g(C, "setState"); } - }, Da = Object.assign, er = {}; - Object.freeze(er), S.prototype.isReactComponent = {}, S.prototype.setState = function(C, H) { + }, Da = Object.assign, tr = {}; + Object.freeze(tr), S.prototype.isReactComponent = {}, S.prototype.setState = function(C, H) { if (typeof C != "object" && typeof C != "function" && C != null) throw Error( "takes an object of state variables to update or a function which returns an object of state variables." @@ -1430,7 +1430,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix }, S.prototype.forceUpdate = function(C) { this.updater.enqueueForceUpdate(this, C, "forceUpdate"); }; - var gn = { + var vn = { isMounted: [ "isMounted", "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks." @@ -1439,11 +1439,11 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix "replaceState", "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)." ] - }, vn; - for (vn in gn) - gn.hasOwnProperty(vn) && u(vn, gn[vn]); - U.prototype = S.prototype, gn = Q.prototype = new U(), gn.constructor = Q, Da(gn, S.prototype), gn.isPureReactComponent = !0; - var Ot = Array.isArray, Rr = Symbol.for("react.client.reference"), vt = { + }, Sn; + for (Sn in vn) + vn.hasOwnProperty(Sn) && u(Sn, vn[Sn]); + U.prototype = S.prototype, vn = M.prototype = new U(), vn.constructor = M, Da(vn, S.prototype), vn.isPureReactComponent = !0; + var Ot = Array.isArray, Ur = Symbol.for("react.client.reference"), vt = { H: null, A: null, T: null, @@ -1459,12 +1459,12 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix }, Pi = Object.prototype.hasOwnProperty, yi = console.createTask ? console.createTask : function() { return null; }; - gn = { + vn = { "react-stack-bottom-frame": function(C) { return C(); } }; - var fa, Ni, po = {}, Gi = gn["react-stack-bottom-frame"].bind(gn, A)(), An = yi(M(A)), bi = !1, Jn = /\/+/g, Er = typeof reportError == "function" ? reportError : function(C) { + var fa, Ni, go = {}, Gi = vn["react-stack-bottom-frame"].bind(vn, A)(), An = yi(k(A)), bi = !1, Jn = /\/+/g, Tr = typeof reportError == "function" ? reportError : function(C) { if (typeof window == "object" && typeof window.ErrorEvent == "function") { var H = new window.ErrorEvent("error", { bubbles: !0, @@ -1478,111 +1478,111 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix return; } console.error(C); - }, fo = !1, Ur = null, Zi = 0, ni = !1, yn = !1, Oi = typeof queueMicrotask == "function" ? function(C) { + }, vo = !1, yr = null, Zi = 0, ni = !1, Nn = !1, Oi = typeof queueMicrotask == "function" ? function(C) { queueMicrotask(function() { return queueMicrotask(C); }); - } : Ce; - gn = Object.freeze({ + } : Ne; + vn = Object.freeze({ __proto__: null, c: function(C) { - return be().useMemoCache(C); + return Ve().useMemoCache(C); } }), s.Children = { - map: ye, - forEach: function(C, H, ke) { - ye( + map: be, + forEach: function(C, H, Me) { + be( C, function() { H.apply(this, arguments); }, - ke + Me ); }, count: function(C) { var H = 0; - return ye(C, function() { + return be(C, function() { H++; }), H; }, toArray: function(C) { - return ye(C, function(H) { + return be(C, function(H) { return H; }) || []; }, only: function(C) { - if (!Re(C)) + if (!ge(C)) throw Error( "React.Children.only expected to receive a single React element child." ); return C; } - }, s.Component = S, s.Fragment = y, s.Profiler = j, s.PureComponent = Q, s.StrictMode = L, s.Suspense = Oe, s.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = vt, s.__COMPILER_RUNTIME = gn, s.act = function(C) { - var H = vt.actQueue, ke = Zi; + }, s.Component = S, s.Fragment = y, s.Profiler = j, s.PureComponent = M, s.StrictMode = L, s.Suspense = Oe, s.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = vt, s.__COMPILER_RUNTIME = vn, s.act = function(C) { + var H = vt.actQueue, Me = Zi; Zi++; - var Be = vt.actQueue = H !== null ? H : [], je = !1; + var Be = vt.actQueue = H !== null ? H : [], Pe = !1; try { - var lt = C(); - } catch (dt) { - vt.thrownErrors.push(dt); + var ct = C(); + } catch (ut) { + vt.thrownErrors.push(ut); } if (0 < vt.thrownErrors.length) - throw Ne(H, ke), C = Ze(vt.thrownErrors), vt.thrownErrors.length = 0, C; - if (lt !== null && typeof lt == "object" && typeof lt.then == "function") { - var ft = lt; + throw Ue(H, Me), C = xe(vt.thrownErrors), vt.thrownErrors.length = 0, C; + if (ct !== null && typeof ct == "object" && typeof ct.then == "function") { + var gt = ct; return Oi(function() { - je || ni || (ni = !0, console.error( + Pe || ni || (ni = !0, console.error( "You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);" )); }), { - then: function(dt, Sn) { - je = !0, ft.then( + then: function(ut, Rn) { + Pe = !0, gt.then( function(Bi) { - if (Ne(H, ke), ke === 0) { + if (Ue(H, Me), Me === 0) { try { - X(Be), Ce(function() { + Y(Be), Ne(function() { return Z( Bi, - dt, - Sn + ut, + Rn ); }); - } catch (go) { - vt.thrownErrors.push(go); + } catch (So) { + vt.thrownErrors.push(So); } if (0 < vt.thrownErrors.length) { - var qo = Ze( + var qo = xe( vt.thrownErrors ); - vt.thrownErrors.length = 0, Sn(qo); + vt.thrownErrors.length = 0, Rn(qo); } - } else dt(Bi); + } else ut(Bi); }, function(Bi) { - Ne(H, ke), 0 < vt.thrownErrors.length && (Bi = Ze( + Ue(H, Me), 0 < vt.thrownErrors.length && (Bi = xe( vt.thrownErrors - ), vt.thrownErrors.length = 0), Sn(Bi); + ), vt.thrownErrors.length = 0), Rn(Bi); } ); } }; } - var Vt = lt; - if (Ne(H, ke), ke === 0 && (X(Be), Be.length !== 0 && Oi(function() { - je || ni || (ni = !0, console.error( + var Vt = ct; + if (Ue(H, Me), Me === 0 && (Y(Be), Be.length !== 0 && Oi(function() { + Pe || ni || (ni = !0, console.error( "A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)" )); }), vt.actQueue = null), 0 < vt.thrownErrors.length) - throw C = Ze(vt.thrownErrors), vt.thrownErrors.length = 0, C; + throw C = xe(vt.thrownErrors), vt.thrownErrors.length = 0, C; return { - then: function(dt, Sn) { - je = !0, ke === 0 ? (vt.actQueue = Be, Ce(function() { + then: function(ut, Rn) { + Pe = !0, Me === 0 ? (vt.actQueue = Be, Ne(function() { return Z( Vt, - dt, - Sn + ut, + Rn ); - })) : dt(Vt); + })) : ut(Vt); } }; }, s.cache = function(C) { @@ -1592,47 +1592,47 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix }, s.captureOwnerStack = function() { var C = vt.getCurrentStack; return C === null ? null : C(); - }, s.cloneElement = function(C, H, ke) { + }, s.cloneElement = function(C, H, Me) { if (C == null) throw Error( "The argument must be a React element, but you passed " + C + "." ); - var Be = Da({}, C.props), je = C.key, lt = C._owner; + var Be = Da({}, C.props), Pe = C.key, ct = C._owner; if (H != null) { - var ft; + var gt; e: { - if (Pi.call(H, "ref") && (ft = Object.getOwnPropertyDescriptor( + if (Pi.call(H, "ref") && (gt = Object.getOwnPropertyDescriptor( H, "ref" - ).get) && ft.isReactWarning) { - ft = !1; + ).get) && gt.isReactWarning) { + gt = !1; break e; } - ft = H.ref !== void 0; + gt = H.ref !== void 0; } - ft && (lt = V()), ge(H) && (F(H.key), je = "" + H.key); + gt && (ct = V()), ve(H) && (F(H.key), Pe = "" + H.key); for (Vt in H) !Pi.call(H, Vt) || Vt === "key" || Vt === "__self" || Vt === "__source" || Vt === "ref" && H.ref === void 0 || (Be[Vt] = H[Vt]); } var Vt = arguments.length - 2; - if (Vt === 1) Be.children = ke; + if (Vt === 1) Be.children = Me; else if (1 < Vt) { - ft = Array(Vt); - for (var dt = 0; dt < Vt; dt++) - ft[dt] = arguments[dt + 2]; - Be.children = ft; + gt = Array(Vt); + for (var ut = 0; ut < Vt; ut++) + gt[ut] = arguments[ut + 2]; + Be.children = gt; } - for (Be = ee( + for (Be = ne( C.type, - je, + Pe, void 0, void 0, - lt, + ct, Be, C._debugStack, C._debugTask - ), je = 2; je < arguments.length; je++) - lt = arguments[je], Re(lt) && lt._store && (lt._store.validated = 1); + ), Pe = 2; Pe < arguments.length; Pe++) + ct = arguments[Pe], ge(ct) && ct._store && (ct._store.validated = 1); return Be; }, s.createContext = function(C) { return C = { @@ -1646,44 +1646,44 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix $$typeof: pe, _context: C }, C._currentRenderer = null, C._currentRenderer2 = null, C; - }, s.createElement = function(C, H, ke) { + }, s.createElement = function(C, H, Me) { for (var Be = 2; Be < arguments.length; Be++) { - var je = arguments[Be]; - Re(je) && je._store && (je._store.validated = 1); - } - if (Be = {}, je = null, H != null) - for (dt in Ni || !("__self" in H) || "key" in H || (Ni = !0), ge(H) && (F(H.key), je = "" + H.key), H) - Pi.call(H, dt) && dt !== "key" && dt !== "__self" && dt !== "__source" && (Be[dt] = H[dt]); - var lt = arguments.length - 2; - if (lt === 1) Be.children = ke; - else if (1 < lt) { - for (var ft = Array(lt), Vt = 0; Vt < lt; Vt++) - ft[Vt] = arguments[Vt + 2]; - Object.freeze && Object.freeze(ft), Be.children = ft; + var Pe = arguments[Be]; + ge(Pe) && Pe._store && (Pe._store.validated = 1); + } + if (Be = {}, Pe = null, H != null) + for (ut in Ni || !("__self" in H) || "key" in H || (Ni = !0), ve(H) && (F(H.key), Pe = "" + H.key), H) + Pi.call(H, ut) && ut !== "key" && ut !== "__self" && ut !== "__source" && (Be[ut] = H[ut]); + var ct = arguments.length - 2; + if (ct === 1) Be.children = Me; + else if (1 < ct) { + for (var gt = Array(ct), Vt = 0; Vt < ct; Vt++) + gt[Vt] = arguments[Vt + 2]; + Object.freeze && Object.freeze(gt), Be.children = gt; } if (C && C.defaultProps) - for (dt in lt = C.defaultProps, lt) - Be[dt] === void 0 && (Be[dt] = lt[dt]); - je && de( + for (ut in ct = C.defaultProps, ct) + Be[ut] === void 0 && (Be[ut] = ct[ut]); + Pe && me( Be, typeof C == "function" ? C.displayName || C.name || "Unknown" : C ); - var dt = 1e4 > vt.recentlyCreatedOwnerStacks++; - return ee( + var ut = 1e4 > vt.recentlyCreatedOwnerStacks++; + return ne( C, - je, + Pe, void 0, void 0, V(), Be, - dt ? Error("react-stack-top-frame") : Gi, - dt ? yi(M(C)) : An + ut ? Error("react-stack-top-frame") : Gi, + ut ? yi(k(C)) : An ); }, s.createRef = function() { var C = { current: null }; return Object.seal(C), C; }, s.forwardRef = function(C) { - C != null && C.$$typeof === Ge ? console.error( + C != null && C.$$typeof === Ye ? console.error( "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))." ) : typeof C != "function" ? console.error( "forwardRef requires a render function but was given %s.", @@ -1694,288 +1694,288 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix ), C != null && C.defaultProps != null && console.error( "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?" ); - var H = { $$typeof: Ae, render: C }, ke; + var H = { $$typeof: Le, render: C }, Me; return Object.defineProperty(H, "displayName", { enumerable: !1, configurable: !0, get: function() { - return ke; + return Me; }, set: function(Be) { - ke = Be, C.name || C.displayName || (Object.defineProperty(C, "name", { value: Be }), C.displayName = Be); + Me = Be, C.name || C.displayName || (Object.defineProperty(C, "name", { value: Be }), C.displayName = Be); } }), H; - }, s.isValidElement = Re, s.lazy = function(C) { + }, s.isValidElement = ge, s.lazy = function(C) { return { - $$typeof: pt, + $$typeof: ft, _payload: { _status: -1, _result: C }, - _init: Ue + _init: ye }; }, s.memo = function(C, H) { C == null && console.error( "memo: The first argument must be a component. Instead received: %s", C === null ? "null" : typeof C ), H = { - $$typeof: Ge, + $$typeof: Ye, type: C, compare: H === void 0 ? null : H }; - var ke; + var Me; return Object.defineProperty(H, "displayName", { enumerable: !1, configurable: !0, get: function() { - return ke; + return Me; }, set: function(Be) { - ke = Be, C.name || C.displayName || (Object.defineProperty(C, "name", { value: Be }), C.displayName = Be); + Me = Be, C.name || C.displayName || (Object.defineProperty(C, "name", { value: Be }), C.displayName = Be); } }), H; }, s.startTransition = function(C) { - var H = vt.T, ke = {}; - vt.T = ke, ke._updatedFibers = /* @__PURE__ */ new Set(); + var H = vt.T, Me = {}; + vt.T = Me, Me._updatedFibers = /* @__PURE__ */ new Set(); try { - var Be = C(), je = vt.S; - je !== null && je(ke, Be), typeof Be == "object" && Be !== null && typeof Be.then == "function" && Be.then(xe, Er); - } catch (lt) { - Er(lt); + var Be = C(), Pe = vt.S; + Pe !== null && Pe(Me, Be), typeof Be == "object" && Be !== null && typeof Be.then == "function" && Be.then(Ee, Tr); + } catch (ct) { + Tr(ct); } finally { - H === null && ke._updatedFibers && (C = ke._updatedFibers.size, ke._updatedFibers.clear(), 10 < C), vt.T = H; + H === null && Me._updatedFibers && (C = Me._updatedFibers.size, Me._updatedFibers.clear(), 10 < C), vt.T = H; } }, s.unstable_useCacheRefresh = function() { - return be().useCacheRefresh(); + return Ve().useCacheRefresh(); }, s.use = function(C) { - return be().use(C); - }, s.useActionState = function(C, H, ke) { - return be().useActionState( + return Ve().use(C); + }, s.useActionState = function(C, H, Me) { + return Ve().useActionState( C, H, - ke + Me ); }, s.useCallback = function(C, H) { - return be().useCallback(C, H); + return Ve().useCallback(C, H); }, s.useContext = function(C) { - var H = be(); + var H = Ve(); return C.$$typeof === pe && console.error( "Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?" ), H.useContext(C); }, s.useDebugValue = function(C, H) { - return be().useDebugValue(C, H); + return Ve().useDebugValue(C, H); }, s.useDeferredValue = function(C, H) { - return be().useDeferredValue(C, H); - }, s.useEffect = function(C, H, ke) { + return Ve().useDeferredValue(C, H); + }, s.useEffect = function(C, H, Me) { C == null; - var Be = be(); - if (typeof ke == "function") + var Be = Ve(); + if (typeof Me == "function") throw Error( "useEffect CRUD overload is not enabled in this build of React." ); return Be.useEffect(C, H); }, s.useId = function() { - return be().useId(); - }, s.useImperativeHandle = function(C, H, ke) { - return be().useImperativeHandle(C, H, ke); + return Ve().useId(); + }, s.useImperativeHandle = function(C, H, Me) { + return Ve().useImperativeHandle(C, H, Me); }, s.useInsertionEffect = function(C, H) { - return C == null, be().useInsertionEffect(C, H); + return C == null, Ve().useInsertionEffect(C, H); }, s.useLayoutEffect = function(C, H) { - return C == null, be().useLayoutEffect(C, H); + return C == null, Ve().useLayoutEffect(C, H); }, s.useMemo = function(C, H) { - return be().useMemo(C, H); + return Ve().useMemo(C, H); }, s.useOptimistic = function(C, H) { - return be().useOptimistic(C, H); - }, s.useReducer = function(C, H, ke) { - return be().useReducer(C, H, ke); + return Ve().useOptimistic(C, H); + }, s.useReducer = function(C, H, Me) { + return Ve().useReducer(C, H, Me); }, s.useRef = function(C) { - return be().useRef(C); + return Ve().useRef(C); }, s.useState = function(C) { - return be().useState(C); - }, s.useSyncExternalStore = function(C, H, ke) { - return be().useSyncExternalStore( + return Ve().useState(C); + }, s.useSyncExternalStore = function(C, H, Me) { + return Ve().useSyncExternalStore( C, H, - ke + Me ); }, s.useTransition = function() { - return be().useTransition(); + return Ve().useTransition(); }, s.version = "19.1.0", typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); }(); - }(Af, Af.exports)), Af.exports; + }(Lf, Lf.exports)), Lf.exports; } -var B3; +var z3; function Lh() { - return B3 || (B3 = 1, process.env.NODE_ENV === "production" ? wg.exports = gT() : wg.exports = vT()), wg.exports; + return z3 || (z3 = 1, process.env.NODE_ENV === "production" ? Jg.exports = VT() : Jg.exports = CT()), Jg.exports; } var re = Lh(); -const Kl = /* @__PURE__ */ fT(re), ST = (c) => c; -function RT(c, s = ST) { - const u = Kl.useSyncExternalStore( - c.subscribe, - () => s(c.getState()), - () => s(c.getInitialState()) +const ql = /* @__PURE__ */ bT(re), FT = (l) => l; +function _T(l, s = FT) { + const u = ql.useSyncExternalStore( + l.subscribe, + () => s(l.getState()), + () => s(l.getInitialState()) ); - return Kl.useDebugValue(u), u; + return ql.useDebugValue(u), u; } -const w3 = (c) => { - const s = pT(c), u = (p) => RT(s, p); +const j3 = (l) => { + const s = NT(l), u = (m) => _T(s, m); return Object.assign(u, s), u; -}, fd = (c) => c ? w3(c) : w3, ET = (c) => (s, u, p) => { - const g = p.subscribe; - return p.subscribe = (U, Q, T) => { +}, vd = (l) => l ? j3(l) : j3, MT = (l) => (s, u, m) => { + const g = m.subscribe; + return m.subscribe = (U, M, T) => { let F = U; - if (Q) { + if (M) { const b = (T == null ? void 0 : T.equalityFn) || Object.is; - let M = U(p.getState()); + let k = U(m.getState()); F = (V) => { const A = U(V); - if (!b(M, A)) { - const ge = M; - Q(M = A, ge); + if (!b(k, A)) { + const ve = k; + M(k = A, ve); } - }, T != null && T.fireImmediately && Q(M, M); + }, T != null && T.fireImmediately && M(k, k); } return g(F); - }, c(s, u, p); -}, su = ET; -function lu(c, s) { - return (...u) => Object.assign({}, c, s(...u)); + }, l(s, u, m); +}, cu = MT; +function du(l, s) { + return (...u) => Object.assign({}, l, s(...u)); } -function UT(c, s) { +function kT(l, s) { let u; try { - u = c(); + u = l(); } catch { return; } return { getItem: (g) => { var S; - const U = (T) => T === null ? null : JSON.parse(T, void 0), Q = (S = u.getItem(g)) != null ? S : null; - return Q instanceof Promise ? Q.then(U) : U(Q); + const U = (T) => T === null ? null : JSON.parse(T, void 0), M = (S = u.getItem(g)) != null ? S : null; + return M instanceof Promise ? M.then(U) : U(M); }, setItem: (g, S) => u.setItem(g, JSON.stringify(S, void 0)), removeItem: (g) => u.removeItem(g) }; } -const $S = (c) => (s) => { +const n6 = (l) => (s) => { try { - const u = c(s); + const u = l(s); return u instanceof Promise ? u : { - then(p) { - return $S(p)(u); + then(m) { + return n6(m)(u); }, - catch(p) { + catch(m) { return this; } }; } catch (u) { return { - then(p) { + then(m) { return this; }, - catch(p) { - return $S(p)(u); + catch(m) { + return n6(m)(u); } }; } -}, TT = (c, s) => (u, p, g) => { +}, QT = (l, s) => (u, m, g) => { let S = { - storage: UT(() => localStorage), - partialize: (de) => de, + storage: kT(() => localStorage), + partialize: (me) => me, version: 0, - merge: (de, Me) => ({ - ...Me, - ...de + merge: (me, Qe) => ({ + ...Qe, + ...me }), ...s }, U = !1; - const Q = /* @__PURE__ */ new Set(), T = /* @__PURE__ */ new Set(); + const M = /* @__PURE__ */ new Set(), T = /* @__PURE__ */ new Set(); let F = S.storage; if (!F) - return c( - (...de) => { - `${S.name}`, u(...de); + return l( + (...me) => { + `${S.name}`, u(...me); }, - p, + m, g ); const b = () => { - const de = S.partialize({ ...p() }); + const me = S.partialize({ ...m() }); return F.setItem(S.name, { - state: de, + state: me, version: S.version }); - }, M = g.setState; - g.setState = (de, Me) => { - M(de, Me), b(); + }, k = g.setState; + g.setState = (me, Qe) => { + k(me, Qe), b(); }; - const V = c( - (...de) => { - u(...de), b(); + const V = l( + (...me) => { + u(...me), b(); }, - p, + m, g ); g.getInitialState = () => V; let A; - const ge = () => { - var de, Me; + const ve = () => { + var me, Qe; if (!F) return; - U = !1, Q.forEach((ae) => { - var Re; - return ae((Re = p()) != null ? Re : V); + U = !1, M.forEach((ee) => { + var ge; + return ee((ge = m()) != null ? ge : V); }); - const ee = ((Me = S.onRehydrateStorage) == null ? void 0 : Me.call(S, (de = p()) != null ? de : V)) || void 0; - return $S(F.getItem.bind(F))(S.name).then((ae) => { - if (ae) - if (typeof ae.version == "number" && ae.version !== S.version) { + const ne = ((Qe = S.onRehydrateStorage) == null ? void 0 : Qe.call(S, (me = m()) != null ? me : V)) || void 0; + return n6(F.getItem.bind(F))(S.name).then((ee) => { + if (ee) + if (typeof ee.version == "number" && ee.version !== S.version) { if (S.migrate) { - const Re = S.migrate( - ae.state, - ae.version + const ge = S.migrate( + ee.state, + ee.version ); - return Re instanceof Promise ? Re.then((Le) => [!0, Le]) : [!0, Re]; + return ge instanceof Promise ? ge.then((we) => [!0, we]) : [!0, ge]; } console.error( "State loaded from storage couldn't be migrated since no migrate function was provided" ); } else - return [!1, ae.state]; + return [!1, ee.state]; return [!1, void 0]; - }).then((ae) => { - var Re; - const [Le, G] = ae; + }).then((ee) => { + var ge; + const [we, G] = ee; if (A = S.merge( G, - (Re = p()) != null ? Re : V - ), u(A, !0), Le) + (ge = m()) != null ? ge : V + ), u(A, !0), we) return b(); }).then(() => { - ee == null || ee(A, void 0), A = p(), U = !0, T.forEach((ae) => ae(A)); - }).catch((ae) => { - ee == null || ee(void 0, ae); + ne == null || ne(A, void 0), A = m(), U = !0, T.forEach((ee) => ee(A)); + }).catch((ee) => { + ne == null || ne(void 0, ee); }); }; return g.persist = { - setOptions: (de) => { + setOptions: (me) => { S = { ...S, - ...de - }, de.storage && (F = de.storage); + ...me + }, me.storage && (F = me.storage); }, clearStorage: () => { F == null || F.removeItem(S.name); }, getOptions: () => S, - rehydrate: () => ge(), + rehydrate: () => ve(), hasHydrated: () => U, - onHydrate: (de) => (Q.add(de), () => { - Q.delete(de); + onHydrate: (me) => (M.add(me), () => { + M.delete(me); }), - onFinishHydration: (de) => (T.add(de), () => { - T.delete(de); + onFinishHydration: (me) => (T.add(me), () => { + T.delete(me); }) - }, S.skipHydration || ge(), A || V; -}, yT = TT, Ag = 3 / 4, Df = 16 / 9, Xl = 8, BS = 240, Yg = { + }, S.skipHydration || ve(), A || V; +}, DT = QT, Lg = 3 / 4, xf = 16 / 9, Kl = 8, AS = 240, Kg = { MODERATOR: "moderator", NONE: "none" }, He = { @@ -1986,28 +1986,28 @@ const $S = (c) => (s) => { TILE: "TILE", SIDEBAR: "SIDEBAR", SPOTLIGHT: "SPOTLIGHT" -}, Bh = { +}, wh = { VOICE: "VOICE", VIDEO: "VIDEO" -}, iv = { +}, av = { FRONT: "FRONT", REAR: "REAR" -}, pd = { +}, gd = { USER: "user", ENVIRONMENT: "environment" -}, mR = { +}, E6 = { USER: 1 -}, pR = { +}, U6 = { userInfo: "user-info", initialConfig: "initial_config" -}, Qh = { +}, xh = { HIGH: 720, STANDARD: 360, LOW: 180, NONE: 0 -}, NT = { +}, xT = { WEB: "web" -}, gt = { +}, lt = { SessionStatusListener: { onSessionJoined: "onSessionJoined", onSessionLeft: "onSessionLeft", @@ -2025,6 +2025,8 @@ const $S = (c) => (s) => { onVideoResumed: "onVideoResumed", onRecordingStarted: "onRecordingStarted", onRecordingStopped: "onRecordingStopped", + onStreamingStarted: "onStreamingStarted", + onStreamingStopped: "onStreamingStopped", onScreenShareStarted: "onScreenShareStarted", onScreenShareStopped: "onScreenShareStopped" }, @@ -2041,6 +2043,8 @@ const $S = (c) => (s) => { onParticipantStoppedScreenShare: "onParticipantStoppedScreenShare", onParticipantStartedRecording: "onParticipantStartedRecording", onParticipantStoppedRecording: "onParticipantStoppedRecording", + onParticipantStartedStreaming: "onParticipantStartedStreaming", + onParticipantStoppedStreaming: "onParticipantStoppedStreaming", onDominantSpeakerChanged: "onDominantSpeakerChanged", onParticipantListChanged: "onParticipantListChanged" }, @@ -2063,7 +2067,7 @@ const $S = (c) => (s) => { } }, Ih = { MediaEventsListener: { - ...gt.MediaEventsListener, + ...lt.MediaEventsListener, onAudioInputDeviceChanged: "onAudioInputDeviceChanged", onVideoInputDeviceChanged: "onVideoInputDeviceChanged", onAudioOutputDeviceChanged: "onAudioOutputDeviceChanged", @@ -2071,22 +2075,22 @@ const $S = (c) => (s) => { onVideoInputDevicesChanged: "onVideoInputDevicesChanged", onAudioOutputDevicesChanged: "onAudioOutputDevicesChanged" } -}, q0 = { +}, eu = { MediaEventsListener: { - ...gt.MediaEventsListener, + ...lt.MediaEventsListener, onAudioModeChanged: "onAudioModeChanged", onAudioModesChanged: "onAudioModesChanged", onCameraFacingChanged: "onCameraFacingChanged" }, ButtonClickListener: { - ...gt.ButtonClickListener + ...lt.ButtonClickListener }, CallLayoutListener: { - ...gt.CallLayoutListener, + ...lt.CallLayoutListener, onPictureInPictureLayoutEnabled: "onPictureInPictureLayoutEnabled", onPictureInPictureLayoutDisabled: "onPictureInPictureLayoutDisabled" } -}, Fn = { +}, fn = { connectionWillClose: "internal.sessionWillClose", onConnectionEstablished: "internal.onConnectionEstablished", onSessionJoined: "internal.onSessionJoined", @@ -2098,277 +2102,303 @@ const $S = (c) => (s) => { SDKInitialized: "internal.SDKInitialized" } }; -function bT(c, s, u) { - if (c <= 0 || s <= 0 || u <= 0) +function ZT(l, s, u) { + if (l <= 0 || s <= 0 || u <= 0) throw new Error( "Container dimensions and number of tiles must be positive" ); - const g = c * s / u, S = BS * BS * Ag; + const g = l * s / u, S = AS * AS * Lg; if (g < S) { - const Re = Math.max( + const ge = Math.max( 2, - Math.floor(c / BS) - ), Le = Math.ceil(u / Re), G = Re * Xl, Qe = (c - G) / Re, Te = Qe * Ag; + Math.floor(l / AS) + ), we = Math.ceil(u / ge), G = ge * Kl, De = (l - G) / ge, Te = De * Lg; return { - rows: Le, - columns: Re, - tileWidth: Qe, + rows: we, + columns: ge, + tileWidth: De, tileHeight: Te, paddingVertical: 0, - allocatedWidth: c, + allocatedWidth: l, allocatedHeight: s }; } const U = Math.sqrt(u); - let Q = Math.floor(U), T = Math.ceil(u / Q), F = wS( - c, + let M = Math.floor(U), T = Math.ceil(u / M), F = JS( + l, s, T, - Q + M ); - if (F < Ag) - for (; F < Ag && T > 1; ) - T--, Q = Math.ceil(u / T), F = wS( - c, + if (F < Lg) + for (; F < Lg && T > 1; ) + T--, M = Math.ceil(u / T), F = JS( + l, s, T, - Q + M ); else - for (; F > Df && T < u; ) - T++, Q = Math.ceil(u / T), F = wS( - c, + for (; F > xf && T < u; ) + T++, M = Math.ceil(u / T), F = JS( + l, s, T, - Q + M ); - Math.ceil(u / (T - 1)) === Q && T--; - const M = T * Xl, V = Q * Xl; - let A = (c - M) / T, ge = (s - V) / Q, de = 0; - const Me = A / ge; - Me < 9 / 16 ? (de = (ge - A * Df) * Q / 2, ge = A * Df) : Me > Df && (A = ge * Df); - const ee = A * T + M, ae = ge * Q + V; + Math.ceil(u / (T - 1)) === M && T--; + const k = T * Kl, V = M * Kl; + let A = (l - k) / T, ve = (s - V) / M, me = 0; + const Qe = A / ve; + Qe < 9 / 16 ? (me = (ve - A * xf) * M / 2, ve = A * xf) : Qe > xf && (A = ve * xf); + const ne = A * T + k, ee = ve * M + V; return { - rows: Q, + rows: M, columns: T, tileWidth: A, - tileHeight: ge, - paddingVertical: de, - allocatedWidth: ee, - allocatedHeight: ae + tileHeight: ve, + paddingVertical: me, + allocatedWidth: ne, + allocatedHeight: ee }; } -function wS(c, s, u, p) { - const g = u * Xl, S = p * Xl, U = (c - g) / u, Q = (s - S) / p; - return U / Q; +function JS(l, s, u, m) { + const g = u * Kl, S = m * Kl, U = (l - g) / u, M = (s - S) / m; + return U / M; } -const A3 = (c) => Symbol.iterator in c, J3 = (c) => ( +const P3 = (l) => Symbol.iterator in l, G3 = (l) => ( // HACK: avoid checking entries type - "entries" in c -), L3 = (c, s) => { - const u = c instanceof Map ? c : new Map(c.entries()), p = s instanceof Map ? s : new Map(s.entries()); - if (u.size !== p.size) + "entries" in l +), Y3 = (l, s) => { + const u = l instanceof Map ? l : new Map(l.entries()), m = s instanceof Map ? s : new Map(s.entries()); + if (u.size !== m.size) return !1; for (const [g, S] of u) - if (!Object.is(S, p.get(g))) + if (!Object.is(S, m.get(g))) return !1; return !0; -}, VT = (c, s) => { - const u = c[Symbol.iterator](), p = s[Symbol.iterator](); - let g = u.next(), S = p.next(); +}, OT = (l, s) => { + const u = l[Symbol.iterator](), m = s[Symbol.iterator](); + let g = u.next(), S = m.next(); for (; !g.done && !S.done; ) { if (!Object.is(g.value, S.value)) return !1; - g = u.next(), S = p.next(); + g = u.next(), S = m.next(); } return !!g.done && !!S.done; }; -function CT(c, s) { - return Object.is(c, s) ? !0 : typeof c != "object" || c === null || typeof s != "object" || s === null || Object.getPrototypeOf(c) !== Object.getPrototypeOf(s) ? !1 : A3(c) && A3(s) ? J3(c) && J3(s) ? L3(c, s) : VT(c, s) : L3( - { entries: () => Object.entries(c) }, +function BT(l, s) { + return Object.is(l, s) ? !0 : typeof l != "object" || l === null || typeof s != "object" || s === null || Object.getPrototypeOf(l) !== Object.getPrototypeOf(s) ? !1 : P3(l) && P3(s) ? G3(l) && G3(s) ? Y3(l, s) : OT(l, s) : Y3( + { entries: () => Object.entries(l) }, { entries: () => Object.entries(s) } ); } -const FT = (c) => c.split(" ").map((s) => s[0]).join("").toUpperCase().slice(0, 2), P5 = (c) => { - const s = Math.floor(c / 1e3), u = Math.floor(s / 3600), p = Math.floor(s % 3600 / 60), g = s % 60, S = p.toString().padStart(2, "0"), U = g.toString().padStart(2, "0"); +const wT = (l) => l.split(" ").map((s) => s[0]).join("").toUpperCase().slice(0, 2), eE = (l) => { + const s = Math.floor(l / 1e3), u = Math.floor(s / 3600), m = Math.floor(s % 3600 / 60), g = s % 60, S = m.toString().padStart(2, "0"), U = g.toString().padStart(2, "0"); return u > 0 ? `${u.toString().padStart(2, "0")}:${S}:${U}` : `${S}:${U}`; }; -function G5(c) { +function tE(l) { try { - return JSON.parse(c); + return JSON.parse(l); } catch (s) { return console.error("Failed to parse JSON:", s), null; } } -const xh = (c) => c.getType() === "audio" ? He.AUDIO : c.getVideoType() === "desktop" ? He.SCREENSHARE : He.VIDEO; -function eR(c, s, u) { - const p = new Set(s.map(u)); - return c.filter((g) => !p.has(u(g))); +const Oh = (l) => l.getType() === "audio" ? He.AUDIO : l.getVideoType() === "desktop" ? He.SCREENSHARE : He.VIDEO; +function i6(l, s, u) { + const m = new Set(s.map(u)); + return l.filter((g) => !m.has(u(g))); } -function fR(c, s) { - if (c.length !== s.length) +function T6(l, s) { + if (l.length !== s.length) return !1; - for (let u = 0; u < c.length; u++) - if (!CT(c[u], s[u])) + for (let u = 0; u < l.length; u++) + if (!BT(l[u], s[u])) return !1; return !0; } -function Y5(c, s) { - return (c == null ? void 0 : c.deviceId) === (s == null ? void 0 : s.deviceId) && (c == null ? void 0 : c.label) === (s == null ? void 0 : s.label); +function nE(l, s) { + return (l == null ? void 0 : l.deviceId) === (s == null ? void 0 : s.deviceId) && (l == null ? void 0 : l.label) === (s == null ? void 0 : s.label); } -function _h(c) { - return c.find((s) => s.deviceId === "default") || c[0]; +function kh(l) { + return l.find((s) => s.deviceId === "default") || l[0]; } -function _T(c, s, u = 5e3) { - return new Promise((p, g) => { - if (s(c.getState())) { - p(); +function AT(l, s, u = 5e3) { + return new Promise((m, g) => { + if (s(l.getState())) { + m(); return; } const S = setTimeout(() => { U(), g(new Error("waitForStoreState timed out")); - }, u), U = c.subscribe((Q) => { - s(Q) && (clearTimeout(S), U(), p()); + }, u), U = l.subscribe((M) => { + s(M) && (clearTimeout(S), U(), m()); }); }); } -const MT = [ +const JT = [ "connection.droppedError", "connection.otherError", "connection.serverError" ]; -function I3(c) { - return MT.includes(c.name); +function X3(l) { + return JT.includes(l.name); } -async function Xo(c, s) { +async function fo(l, s) { try { return { data: s != null ? await Promise.race([ - c, + l, new Promise( - (p, g) => setTimeout(() => g(new Error("timeout")), s) + (m, g) => setTimeout(() => g(new Error("timeout")), s) ) - ]) : await c, error: null }; + ]) : await l, error: null }; } catch (u) { return { data: null, error: u }; } } -function X5(c) { +function iE(l) { try { - return { data: c(), error: null }; + return { data: l(), error: null }; } catch (s) { return { data: null, error: s }; } } -function K5(c, s) { +function aE(l, s) { let u = null; - return (...p) => { + return (...m) => { u && clearTimeout(u), u = setTimeout(() => { - X5(() => c(...p)); + iE(() => l(...m)); }, s); }; } -class kT { +class LT { /** - * Mutes the local user's audio during the call. + * Mutes or unmutes the local user's audio during the call. + * + * The boolean parameter exists for backward compatibility with the v4 SDK, + * where `muteAudio(false)` was the way to unmute. New code should prefer + * {@link SessionMethodsCore.unmuteAudio} for clarity. + * + * @param muteAudio - `true` (default) mutes the local audio track, `false` unmutes it. */ - static muteAudio() { - cv(); + static muteAudio(s = !0) { + s ? uv() : o6(); } /** * Unmutes the local user's audio during the call. */ static unmuteAudio() { - lE(); + o6(); } /** * Toggles the local user's audio mute state. * If audio is muted, it will be unmuted, and vice versa. */ static toggleAudio() { - cE(); + EE(); } /** - * Pauses the local user's video stream. + * Pauses or resumes the local user's video stream. + * + * The boolean parameter exists for backward compatibility with the v4 SDK, + * where `pauseVideo(false)` was the way to resume. New code should prefer + * {@link SessionMethodsCore.resumeVideo} for clarity. + * + * @param pauseVideo - `true` (default) pauses the local video track, `false` resumes it. */ - static pauseVideo() { - dv(); + static pauseVideo(s = !0) { + s ? hv() : s6(); } /** * Resumes the local user's video stream. */ static resumeVideo() { - dE(); + s6(); } /** * Toggles the local user's video stream. * If video is paused, it will be resumed, and vice versa. */ static toggleVideo() { - uE(); + UE(); } /** * Local user leaves the current session. */ static leaveSession() { - ql(); + ec(); } /** * Ends the current session for all participants. * This will terminate the conference and disconnect everyone. */ static endSessionForAll() { - ql({ shouldEndSession: !0 }); + ec({ shouldEndSession: !0 }); } /** * Raises the user's virtual hand in the call. */ static raiseHand() { - iE(); + hE(); } /** * Lowers the user's virtual hand in the call. */ static lowerHand() { - rv(); + ov(); } /** * Toggles the user's virtual hand state. * If the hand is raised, it will be lowered, and vice versa. */ static toggleHand() { - RR(); + V6(); } /** * Switches between the front and rear camera. */ static switchCamera() { - EE(); + _E(); } /** * Sets the layout type for the call. * @param layout - The type of layout to set (tile, sidebar or spotlight). */ static setLayout(s) { - ru(s); + su(s); + } + /** + * Starts streaming the call to the given RTMP destination. + * @param streamUrl - The RTMP ingest URL (e.g., "rtmp://a.rtmp.youtube.com/live2"). + * @param streamKey - The stream key for the destination (e.g., "xxxx-xxxx-xxxx-xxxx-xxxx"). + */ + static startStreaming(s, u) { + r6(s, u); + } + /** + * Stops the ongoing call streaming. + */ + static stopStreaming() { + SE(); } /** * Starts recording the call. */ static startRecording() { - lv(); + dv(); } /** * Stops the ongoing call recording. */ static stopRecording() { - rE(); + gE(); } /** * Toggles the call recording state. * If recording is active, it will be stopped, and vice versa. */ static toggleRecording() { - oE(); + vE(); } /** * Pins a participant's video to focus on them. @@ -2376,52 +2406,52 @@ class kT { * @param type - The type of the participant. */ static pinParticipant(s, u) { - tE(s, u); + dE(s, u); } /** * Unpins a participant's video. */ static unpinParticipant() { - nE(); + uE(); } /** * Mutes the audio of a specific participant. * @param participantId - The ID of the participant to mute. */ static muteParticipant(s) { - VE(s); + OE(s); } /** * Pauses the video stream of a specific participant. * @param participantId - The ID of the participant whose video to pause. */ static pauseParticipantVideo(s) { - By(s); + o4(s); } /** * Sets the unread message count displayed on the chat button. * @param count - The number of unread messages. */ static setChatButtonUnreadCount(s) { - ay(s); + Vy(s); } /** * Toggles the visibility of the participant list panel. */ static toggleParticipantList() { - ey(); + Ty(); } /** * Shows the participant list panel. */ static showParticipantList() { - $T(); + Uy(); } /** * Hides the participant list panel. */ static hideParticipantList() { - mE(); + yE(); } // Legacy Methods // /** @@ -2457,251 +2487,298 @@ class kT { throw new Error("This method is deprecated and not supported."); } } -const QT = '/*! For license information please see lib-jitsi-meet.min.js.LICENSE.txt */\n!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.JitsiMeetJS=t():e.JitsiMeetJS=t()}(self,(()=>(()=>{var __webpack_modules__={449:(e,t,n)=>{const i=n(526).Z;e.exports=function(e){return"object"==typeof window.JitsiMeetJS?Object.assign({},window.JitsiMeetJS,e):e}(i)},444:e=>{e.exports=class{constructor(e,t,n){this._userId=e,this.setDisplayName(t),this._isLocalStats=n||!1,this.setDominantSpeaker(!1),this.totalDominantSpeakerTime=0,this._dominantSpeakerStart=0,this._isDominantSpeaker=!1,this._isSilent=!1,this._hasLeft=!1,this._faceLandmarks=[]}getUserId(){return this._userId}getDisplayName(){return this.displayName}setDisplayName(e){this.displayName=e}isLocalStats(){return this._isLocalStats}isDominantSpeaker(){return this._isDominantSpeaker}setDominantSpeaker(e,t){if(this.isDominantSpeaker()||!e||t){if(this.isDominantSpeaker())if(e){if(this._isSilent&&!t)this._dominantSpeakerStart=Date.now();else if(!this._isSilent&&t){const e=Date.now()-this._dominantSpeakerStart;this.totalDominantSpeakerTime+=e,this._dominantSpeakerStart=0}}else if(!this._isSilent){const e=Date.now()-this._dominantSpeakerStart;this.totalDominantSpeakerTime+=e,this._dominantSpeakerStart=0}}else this._dominantSpeakerStart=Date.now();this._isDominantSpeaker=e,this._isSilent=t}getTotalDominantSpeakerTime(){let e=this.totalDominantSpeakerTime;return this.isDominantSpeaker()&&!this._isSilent&&(e+=Date.now()-this._dominantSpeakerStart),e}hasLeft(){return this._hasLeft}markAsHasLeft(){this._hasLeft=!0,this.setDominantSpeaker(!1)}getFaceLandmarks(){return this._faceLandmarks}setFaceLandmarks(e){this._faceLandmarks=e}addFaceLandmarks(e){this._faceLandmarks.push(e)}}},832:e=>{function t(e,t){if(!e||!t||"function"!=typeof e.addListener||"function"!=typeof t.emit)throw new Error("Invalid arguments passed to EventEmitterForwarder");this.src=e,this.dest=t,this.listeners=new Map}t.prototype.forward=function(){for(var e=arguments.length,t=new Array(e),n=0;n{const t=this.listeners.get(e);t&&(this.src.removeListener(e,t),this.listeners.delete(e))}))},e.exports=t},399:e=>{function t(e,t){return Math.floor(Math.random()*(t-e+1))+e}function n(e){return e[t(0,e.length-1)]}const i={randomHexDigit:()=>n("0123456789abcdef"),randomHexString(e){let t="";for(;e--;)t+=this.randomHexDigit();return t},randomElement:n,randomAlphanumStr:function(e){let t="";for(let i=0;i{const i=n(799),r={loadScript(e,t,n,r,o,s){const a=document,d="script",c=a.createElement(d),l=a.getElementsByTagName(d)[0];if(c.async=t,r){const t=i();if(t){const n=t.src,i=n.substring(0,n.lastIndexOf("/")+1);n&&i&&(e=i+e)}}o&&(c.onload=o),s&&(c.onerror=s),c.src=e,n?l.parentNode.insertBefore(c,l):l.parentNode.appendChild(c)}};e.exports=r},667:(e,t,n)=>{const i=n(399),r=["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D\'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zula"];e.exports={generateUsername:function(){return`${i.randomElement(r)}-${i.randomAlphanumStr(3)}`}}},32:(e,t)=>{"use strict";const n=/"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])"\\s*\\:/;t.parse=function(e){const i="object"==typeof(arguments.length<=1?void 0:arguments[1])&&(arguments.length<=1?void 0:arguments[1]),r=(arguments.length<=1?0:arguments.length-1)>1||!i?arguments.length<=1?void 0:arguments[1]:void 0,o=(arguments.length<=1?0:arguments.length-1)>1&&(arguments.length<=2?void 0:arguments[2])||i||{},s=JSON.parse(e,r);return"ignore"===o.protoAction?s:s&&"object"==typeof s&&e.match(n)?(t.scan(s,o),s):s},t.scan=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[e];for(;n.length;){const e=n;n=[];for(const i of e){if(Object.prototype.hasOwnProperty.call(i,"__proto__")){if("remove"!==t.protoAction)throw new SyntaxError("Object contains forbidden prototype property");delete i.__proto__}for(const e in i){const t=i[e];t&&"object"==typeof t&&n.push(i[e])}}}},t.safeParse=function(e,n){try{return t.parse(e,n)}catch(e){return null}}},122:function(e,t,n){var i;!function(r,o){"use strict";var s="function",a="undefined",d="object",c="string",l="major",h="model",u="name",p="type",m="vendor",g="version",f="architecture",v="console",_="mobile",y="tablet",E="smarttv",S="wearable",b="embedded",T="Amazon",C="Apple",x="ASUS",R="BlackBerry",A="Browser",w="Chrome",I="Firefox",P="Google",D="Huawei",O="LG",k="Microsoft",N="Motorola",M="Opera",L="Samsung",F="Sharp",j="Sony",V="Xiaomi",U="Zebra",H="Facebook",$="Chromium OS",J="Mac OS",B=function(e){for(var t={},n=0;n0?2===a.length?typeof a[1]==s?this[a[0]]=a[1].call(this,l):this[a[0]]=a[1]:3===a.length?typeof a[1]!==s||a[1].exec&&a[1].test?this[a[0]]=l?l.replace(a[1],a[2]):o:this[a[0]]=l?a[1].call(this,l,a[2]):o:4===a.length&&(this[a[0]]=l?a[3].call(this,l.replace(a[1],a[2])):o):this[a]=l||o;h+=2}},W=function(e,t){for(var n in t)if(typeof t[n]===d&&t[n].length>0){for(var i=0;i2&&(e[h]="iPad",e[p]=y),e},this.getEngine=function(){var e={};return e[u]=o,e[g]=o,K.call(e,i,E.engine),e},this.getOS=function(){var e={};return e[u]=o,e[g]=o,K.call(e,i,E.os),S&&!e[u]&&v&&"Unknown"!=v.platform&&(e[u]=v.platform.replace(/chrome os/i,$).replace(/macos/i,J)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return i},this.setUA=function(e){return i=typeof e===c&&e.length>350?z(e,350):e,this},this.setUA(i),this};Q.VERSION="1.0.35",Q.BROWSER=B([u,g,l]),Q.CPU=B([f]),Q.DEVICE=B([h,m,p,v,_,E,y,S,b]),Q.ENGINE=Q.OS=B([u,g]),typeof t!==a?(e.exports&&(t=e.exports=Q),t.UAParser=Q):n.amdO?(i=function(){return Q}.call(t,n,t,e))===o||(e.exports=i):typeof r!==a&&(r.UAParser=Q);var Z=typeof r!==a&&(r.jQuery||r.Zepto);if(Z&&!Z.ua){var ee=new Q;Z.ua=ee.getResult(),Z.ua.get=function(){return ee.getUA()},Z.ua.set=function(e){ee.setUA(e);var t=ee.getResult();for(var n in t)Z.ua[n]=t[n]}}}("object"==typeof window?window:this)},505:(e,t,n)=>{var i=n(350);function r(e,t){this.logStorage=e,this.stringifyObjects=!(!t||!t.stringifyObjects)&&t.stringifyObjects,this.storeInterval=t&&t.storeInterval?t.storeInterval:3e4,this.maxEntryLength=t&&t.maxEntryLength?t.maxEntryLength:1e4,Object.values(i.levels).forEach(function(e){this[e]=function(){this._log.apply(this,arguments)}.bind(this,e)}.bind(this)),this.storeLogsIntervalID=null,this.queue=[],this.totalLen=0,this.outputCache=[]}r.prototype.stringify=function(e){try{return JSON.stringify(e)}catch(e){return"[object with circular refs?]"}},r.prototype.formatLogMessage=function(e){for(var t="",n=1,i=arguments.length;n=this.maxEntryLength&&this._flush(!0,!0)},r.prototype.start=function(){this._reschedulePublishInterval()},r.prototype._reschedulePublishInterval=function(){this.storeLogsIntervalID&&(window.clearTimeout(this.storeLogsIntervalID),this.storeLogsIntervalID=null),this.storeLogsIntervalID=window.setTimeout(this._flush.bind(this,!1,!0),this.storeInterval)},r.prototype.flush=function(){this._flush(!1,!0)},r.prototype._storeLogs=function(e){try{this.logStorage.storeLogs(e)}catch(e){console.error("LogCollector error when calling logStorage.storeLogs(): ",e)}},r.prototype._flush=function(e,t){var n=!1;try{n=this.logStorage.isReady()}catch(e){console.error("LogCollector error when calling logStorage.isReady(): ",e)}this.totalLen>0&&(n||e)&&(n?(this.outputCache.length&&(this.outputCache.forEach(function(e){this._storeLogs(e)}.bind(this)),this.outputCache=[]),this._storeLogs(this.queue)):this.outputCache.push(this.queue),this.queue=[],this.totalLen=0),t&&this._reschedulePublishInterval()},r.prototype.stop=function(){this._flush(!1,!1)},e.exports=r},350:e=>{var t={trace:0,debug:1,info:2,log:3,warn:4,error:5};o.consoleTransport=console;var n=[o.consoleTransport];o.addGlobalTransport=function(e){-1===n.indexOf(e)&&n.push(e)},o.removeGlobalTransport=function(e){var t=n.indexOf(e);-1!==t&&n.splice(t,1)};var i={};function r(){var e=arguments[0],r=arguments[1],o=Array.prototype.slice.call(arguments,2);if(!(t[r]1&&h.push("<"+s.methodName+">: ");var u=h.concat(o);try{l.bind(c).apply(c,u)}catch(e){console.error("An error occured when trying to log with one of the available transports",e)}}}}function o(e,n,i,o){this.id=n,this.options=o||{},this.transports=i,this.transports||(this.transports=[]),this.level=t[e];for(var s=Object.keys(t),a=0;a{var i=n(350),r=n(505),o={},s=[],a=i.levels.TRACE;e.exports={addGlobalTransport:function(e){i.addGlobalTransport(e)},removeGlobalTransport:function(e){i.removeGlobalTransport(e)},setGlobalOptions:function(e){i.setGlobalOptions(e)},getLogger:function(e,t,n){var r=new i(a,e,t,n);return e?(o[e]=o[e]||[],o[e].push(r)):s.push(r),r},getUntrackedLogger:function(e,t,n){return new i(a,e,t,n)},setLogLevelById:function(e,t){for(var n=t?o[t]||[]:s,i=0;i{var t=e.exports={v:[{name:"version",reg:/^(\\d*)$/}],o:[{name:"origin",reg:/^(\\S*) (\\d*) (\\d*) (\\S*) IP(\\d) (\\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\\d*) (\\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\\d) (\\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\\w*) (\\d*) ([\\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\\d*) ([\\w\\-.]*)(?:\\s*\\/(\\d*)(?:\\s*\\/(\\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\\d*) ([\\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\\d*)(?: (\\S*) IP(\\d) (\\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\\*|\\d*) trr-int (\\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\\*|\\d*) ([\\w-_]*)(?: ([\\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\\d+)(?:\\/(\\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\\S*)(?: (\\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\\d*) ([\\w_]*) (\\S*)(?: (\\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\\d*(?:\\.\\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\\d*(?:\\.\\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\\S*) (\\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\\S*) (\\d*) (\\S*) (\\d*) (\\S*) (\\d*) typ (\\S*)(?: raddr (\\S*) rport (\\d*))?(?: tcptype (\\S*))?(?: generation (\\d*))?(?: network-id (\\d*))?(?: network-cost (\\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),(t+=null!=e["network-id"]?" network-id %d":"%v")+(null!=e["network-cost"]?" network-cost %d":"%v")}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\\d*) ([\\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\\x21\\x23\\x24\\x25\\x26\\x27\\x2A\\x2B\\x2D\\x2E\\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\\s?(\\w*) (\\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\\w_/]*) (\\S*)(?: (\\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\\d\\w]+) (\\w+)(?: ([\\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\\\d+|\\\\*)[\\\\s\\\\t]+(send|recv)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*)(?:[\\\\s\\\\t]+(recv|send)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\\\-_~;,]+)(?:\\\\s?(send|recv) ([a-zA-Z0-9\\\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\\s\\t]+([\\S+\\s\\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\\d+(?:$|\\.\\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\\S*) (IP4|IP6|\\*) (\\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\\s=]*)(?:=(\\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\\S*))? *([^\\s=]*)(?:=(\\S*))?(?: *rate=(\\d+)\\/(\\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",(t+=null!=e.rateNumerator?" rate=%s":"")+(null!=e.rateDenominator?"/%s":"")}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(t).forEach((function(e){t[e].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))}))},561:(e,t,n)=>{var i=n(92),r=n(508);t.write=r,t.parse=i.parse,t.parseParams=i.parseParams,t.parseFmtpConfig=i.parseFmtpConfig,t.parsePayloads=i.parsePayloads,t.parseRemoteCandidates=i.parseRemoteCandidates,t.parseImageAttributes=i.parseImageAttributes,t.parseSimulcastStreamList=i.parseSimulcastStreamList},92:(e,t,n)=>{var i=function(e){return String(Number(e))===e?Number(e):e},r=function(e,t,n){var r=e.name&&e.names;e.push&&!t[e.push]?t[e.push]=[]:r&&!t[e.name]&&(t[e.name]={});var o=e.push?{}:r?t[e.name]:t;!function(e,t,n,r){if(r&&!n)t[r]=i(e[1]);else for(var o=0;o1&&(e[n[0]]=void 0),e};t.parseParams=function(e){return e.split(/;\\s?/).reduce(a,{})},t.parseFmtpConfig=t.parseParams,t.parsePayloads=function(e){return e.toString().split(" ").map(Number)},t.parseRemoteCandidates=function(e){for(var t=[],n=e.split(" ").map(i),r=0;r{var i=n(22),r=/%[sdv%]/g,o=function(e){var t=1,n=arguments,i=n.length;return e.replace(r,(function(e){if(t>=i)return e;var r=n[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(r);case"%d":return Number(r);case"%v":return""}}))},s=function(e,t,n){var i=[e+"="+(t.format instanceof Function?t.format(t.push?n:n[t.name]):t.format)];if(t.names)for(var r=0;r{var e={607:(e,t,n)=>{"use strict";t.ap=t.Tk=t.Vk=t.b1=t.zP=t.$j=t.dL=t.aM=t.vP=t.xt=t.Zt=t.UN=t.IO=t.zl=t.v6=t.S1=void 0,n(699);var i=n(231);t.S1=function(e,t){(0,i.initSDK)(e||{},[""],t)},t.v6=function(e){(0,i.setConfig)(e)},t.zl=function(e){},t.IO=function(e,t){(0,i.setUserRating)(e,t)},t.UN=function(e){(0,i.addKeys)(e)},t.Zt=function(){(0,i.disableDataCollection)()},t.xt=function(){(0,i.enableDataCollection)()},t.vP=function(e){(0,i.addEvent)(e)},t.aM=function(e,t){(0,i.mapStream)(e,t)},t.dL=function(e,t){(0,i.mapTrack)(e,t)},t.$j=function(){(0,i.connect)()},t.zP=function(){(0,i.disconnect)()},t.b1=function(e){(0,i.registerOnStatsListener)(e)},t.Vk=function(e){(0,i.persistentEnd)(e)},t.Tk=function(e,t){(0,i.persistentStart)(e,t)},t.ap=function(e){(0,i.registerStateListener)(e)},t.default={init:t.S1,addTags:t.zl,setUserRating:t.IO,addKeys:t.UN,setConfig:t.v6,disableDataCollection:t.Zt,enableDataCollection:t.xt,addEvent:t.vP,mapStream:t.aM,mapTrack:t.dL,connect:t.$j,disconnect:t.zP,addStatsListener:t.b1,persistentEnd:t.Vk,persistentStart:t.Tk,addStateListener:t.ap,qualityrtc:{run:i.qrtcRun,stop:i.qrtcStop}}},231:function(e,t,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var t,n=1,i=arguments.length;n0&&r[r.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!r||a[1]>r[0]&&a[1]0&&"function"==typeof r[0]))return t;r[0].apply(null,[t])}),(function(t){if(a({data:[e+"OnFailure",i,t.toString()]}),!(r.length>1&&"function"==typeof r[1]))throw t;r[1].apply(null,[t])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){var n=this.__rtcStatsId,i=arguments,r=this,o="setLocalDescription"===e&&(!i[0]||i[0]&&!i[0].sdp);return a({data:[e,this.__rtcStatsId,o?{parameterless:!0}:i[0]]}),t.apply(this,[i[0]]).then((function(){a({data:[e+"OnSuccess",n,o?null==r?void 0:r.localDescription:void 0]}),i.length>=2&&"function"==typeof i[1]&&i[1].apply(null,[])}),(function(t){if(a({data:[e+"OnFailure",n,t.toString()]}),!(i.length>=3&&"function"==typeof i[2]))throw t;i[2].apply(null,[t])}))})})),n.generateCertificate&&Object.defineProperty(r,"generateCertificate",{get:function(){return arguments.length?n.generateCertificate.apply(null,arguments):n.generateCertificate}}),v[e+"RTCPeerConnection"]=r,v[e+"RTCPeerConnection"].prototype=n.prototype,(0,t.sdkLog)("debug","RTCPeerConnection prefixes override complete")}else(0,t.sdkLog)("debug","RTCPeerConnection prefixes override failed")})),f){if(n.forEach((function(e){var t=e+(e.length?"GetUserMedia":"getUserMedia");if(navigator[t]){var n=navigator[t].bind(navigator);navigator[t]=function(){a({data:["getUserMedia",null,arguments[0]]});var e=arguments[1],t=arguments[2];n(arguments[0],(function(t){a({data:["getUserMediaOnSuccess",null,(0,m.dumpStream)(t)]}),e&&e(t)}),(function(e){var n=["getUserMediaOnFailure",null,e.name];a({data:n}),H(n),t&&t(e)}))}.bind(navigator)}})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var h=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(){return a({data:["navigator.mediaDevices.getUserMedia",null,arguments[0]]}),h.apply(navigator.mediaDevices,arguments).then((function(e){return a({data:["navigator.mediaDevices.getUserMediaOnSuccess",null,(0,m.dumpStream)(e)]}),e}),(function(e){var t=["navigator.mediaDevices.getUserMediaOnFailure",null,e.name];return a({data:t}),H(t),Promise.reject(e)}))}.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var g=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getDisplayMedia=function(){return a({data:["navigator.mediaDevices.getDisplayMedia",null,arguments[0]]}),g.apply(navigator.mediaDevices,arguments).then((function(e){return a({data:["navigator.mediaDevices.getDisplayMediaOnSuccess",null,(0,m.dumpStream)(e)]}),e}),(function(e){var t=["navigator.mediaDevices.getDisplayMediaOnFailure",null,e.name];return a({data:t}),H(t),Promise.reject(e)}))}.bind(navigator.mediaDevices)}}(null===(s=e.console)||void 0===s?void 0:s.level)&&(0,m.setConsoleLevel)(e.console.level,a)}else(0,t.sdkLogWithoutTrace)("info","init. RTCPeerConnection does not exist in global globalContext")},t.setConfig=function(e){var n;v.watchRTCInitialized?(!(!1===(null==T?void 0:T.allowBrowserLogCollection))&&!0===(null===(n=null==e?void 0:e.console)||void 0===n?void 0:n.override)&&e.console.level&&(0,m.setConsoleLevel)(e.console.level,a),"collectionInterval"in e&&delete e.collectionInterval,T=i(i({},T),e),b.rtcRoomId=T.rtcRoomId,b.rtcPeerId=T.rtcPeerId,(0,t.sdkLog)("debug","setConfig",{newWatchrtcConfig:JSON.stringify(e),watchrtcConfig:JSON.stringify(T)}),F({})):(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first.")},t.setUserRating=function(e,n){var i;if(!v.watchRTCInitialized)return(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first."),Promise.resolve({error:"SDK is not initialized. Use \'init\' function first."});if(!(0,m.validateRating)(e))return Promise.resolve({error:"Rating is invalid"});var r=(null===(i=null==x?void 0:x.connection)||void 0===i?void 0:i.readyState)===v.WebSocket.OPEN,o=["userRating",null,{rating:e,ratingComment:n}];return new Promise((function(e,t){r?a({data:o,options:{promiseFuncs:{resolve:e,reject:t}}}):U.apply(void 0,o).then((function(){return e({})})).catch((function(t){return e({error:t})}))}))},t.addKeys=function(e){var n;if(v.watchRTCInitialized){Object.keys(e||{}).forEach((function(t){"string"==typeof e[t]&&(e[t]=[e[t]])}));var i=["keys",null,e],r=(null===(n=null==x?void 0:x.connection)||void 0===n?void 0:n.readyState)===v.WebSocket.OPEN,o=null==x?void 0:x.wasConnected;return new Promise((function(e,t){var n={promiseFuncs:{resolve:e,reject:t}};r?a({data:i,options:n}):o?U.apply(void 0,i).then((function(){return e({})})).catch((function(t){return e({error:t})})):a({data:i,options:n})}))}(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first.")},t.disableDataCollection=function(){v.watchRTCInitialized?(a({data:["disableDataCollection",null,null]}),null==x||x.disableDataCollection()):(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first.")},t.enableDataCollection=function(){v.watchRTCInitialized?(a({data:["enableDataCollection",null,null]}),null==x||x.enableDataCollection()):(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first.")},t.addEvent=function(e){if(v.watchRTCInitialized){if((0,m.validateEvent)(e,y)){var n=i({},e),r=null;n.pc&&(r=n.pc.__rtcStatsId||null,delete n.pc);var o=["event",r,n];return new Promise((function(e,t){a({data:o,options:{promiseFuncs:{resolve:e,reject:t}}})}))}}else(0,t.sdkLog)("error","addEvent error. SDK is not initialized. Use \'init\' function first.")},t.mapStream=function(e,n){if(v.watchRTCInitialized){if(e&&n){var i=["mapStream",null,{id:e,name:n}];(0,t.sdkLog)("info","mapStream method is deprecated. Please use mapTrack instead."),a({data:i})}}else(0,t.sdkLog)("error","mapStream error. SDK is not initialized. Use \'init\' function first.")},t.mapTrack=function(e,n){v.watchRTCInitialized?!e||!n||(L[e]=n,a({data:["mapTrack",null,{id:e,name:n}]})):(0,t.sdkLog)("error","mapTrack error. SDK is not initialized. Use \'init\' function first.")},t.connect=function(){v.watchRTCInitialized?(N=!0,P=!0,(0,t.sdkLog)("debug","manual connect"),F({})):(0,t.sdkLog)("error","connect error. SDK is not initialized. Use \'init\' function first.")},t.disconnect=function(){v.watchRTCInitialized?(P=!1,D=!0,null==x||x.close(),(0,t.sdkLog)("debug","manual disconnect")):(0,t.sdkLog)("error","disconnect error. SDK is not initialized. Use \'init\' function first.")},t.registerOnStatsListener=function(e){O=e},t.registerStateListener=function(e){k=e};var U=function(){for(var e,n=[],i=0;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getStreamsFromStats=t.getTransportFromStats=void 0,t.getTransportFromStats=function(e,t){if(!t)return null;var n=Object.keys(t),i=n.filter((function(e){return"candidate-pair"===t[e].type&&t[e].nominated}));if(i.length>0){var r=t[i[0]],o=r.localCandidateId,s=r.remoteCandidateId,a=n.find((function(e){return"local-candidate"===t[e].type&&t[e].id===o})),d=n.find((function(e){return"remote-candidate"===t[e].type&&t[e].id===s}));if(a&&d){var c=t[a],l=t[d],h={};return h[e]={connection:"relay"===c.candidateType?"relay":"direct",transport:"relay"===c.candidateType?c.relayProtocol:"udp",address:"".concat(l.address,":").concat(l.port)},h}}return null},t.getStreamsFromStats=function(e,t,n,i){var r={},o=Object.keys(n);return o.filter((function(e){return"inbound-rtp"===n[e].type||"outbound-rtp"===n[e].type})).forEach((function(s){var a=n[s],d=t&&s in t?t[s]:null,c="inbound-rtp"===a.type?"inbound":"outbound",l=a.kind,h=a.remoteId in n?n[a.remoteId]:null,u=d&&d.remoteId in t?t[d.remoteId]:null,p=d?(a.timestamp-d.timestamp)/1e3:null,m={direction:c,kind:l,peerId:e};if("video"===l&&(m.frameWidth=a.frameWidth,m.frameHeight=a.frameHeight,m.framerate=a.framesPerSecond),"inbound-rtp"===a.type)m.jitter=a.jitter,m.mappedName=a.trackIdentifier in i?i[a.trackIdentifier]:null,m.bytesReceived=d?a.bytesReceived-d.bytesReceived:null,m.packetsReceived=d?a.packetsReceived-d.packetsReceived:null,m.packetsLost=d?a.packetsLost-d.packetsLost:null,m.packetsLoss=m.packetsLost+m.packetsReceived>0?100*m.packetsLost/(m.packetsLost+m.packetsReceived):null,m.bitrate=p?8*m.bytesReceived/p:null,m.roundTripTime=h&&"roundTripTime"in h?h.roundTripTime:null;else{m.bytesSent=d?a.bytesSent-d.bytesSent:null,m.packetsSent=d?a.packetsSent-d.packetsSent:null,m.bitrate=p?8*m.bytesSent/p:null,m.roundTripTime=h&&"roundTripTime"in h?h.roundTripTime:null,m.jitter=h&&"jitter"in h?h.jitter:null,m.packetsLost=h&&u?h.packetsLost-u.packetsLost:null,m.packetsLoss=h&&"fractionLost"in h?h.fractionLost:null;var g=o.find((function(e){return n[e].id===a.mediaSourceId}));if(g){var f=n[g].trackIdentifier;m.mappedName=f in i?i[f]:null}}var v=o.find((function(e){return n[e].id===a.codecId}));if(v){var _=n[v].mimeType||"";m.codec=_.includes("/")?_.split("/")[1]:_}r[n[s].id]=m})),r}},699:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},593:function(e,t,n){"use strict";var i,r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,i=arguments.length;n0&&r[r.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!r||a[1]>r[0]&&a[1]n&&(n=i.timestamp)})),Object.keys(t).forEach((function(e){var i=t[e];i.timestamp===n&&(i.timestamp=0)})),t.timestamp=n,t},t.mangleChromeStats=function(e,t){var n={};return t.result().forEach((function(e){var t={id:e.id,timestamp:e.timestamp.getTime(),type:e.type};e.names().forEach((function(n){t[n]=e.stat(n)})),n[t.id]=t})),n},t.map2obj=function(e){if(!e.entries)return e;var t={};return e.forEach((function(e,n){t[n]=e})),t},t.dumpStream=function(e){return{id:e.id,tracks:e.getTracks().map((function(e){return{id:e.id,kind:e.kind,label:e.label,enabled:e.enabled,muted:e.muted,readyState:e.readyState}}))}},t.getConnectionData=function(e,t,n){var i="".concat("ws"==e?"ws":"http","://localhost:9101"),r="".concat("ws"==e?"wss":"https","://watchrtc-staging1.testrtc.com"),o="".concat("ws"==e?"wss":"https","://watchrtc-staging2.testrtc.com"),s="".concat("ws"==e?"wss":"https","://watchrtc.testrtc.com"),a="".concat("ws"==e?"wss":"https","://watchrtc-app1.testrtc.com");n&&"http"===e&&(n=n.includes("wss://")?n.replace("wss://","https://"):n.replace("ws://","http://"));var d=t.split(":");return-1!==t.indexOf("local")?{url:n||i,key:d[1]}:-1!==t.indexOf("staging1")?{url:n||r,key:d[1]}:-1!==t.indexOf("staging")?{url:n||o,key:d[1]}:-1!==t.indexOf("production1")?{url:n||a,key:d[1]}:-1!==t.indexOf("production")?{url:n||s,key:d[1]}:{url:n||s,key:d[0]}},t.validateConfig=function(e){return(null==e?void 0:e.rtcApiKey)?!(!(null==e?void 0:e.rtcRoomId)||!(null==e?void 0:e.rtcPeerId))||((0,l.sdkLog)("debug","config.rtcRoomId or config.rtcPeerId is empty."),!1):((0,l.sdkLog)("debug","config.rtcApiKey or config.rtcToken need to be provided."),!1)},t.countOfValidConnections=function(e){return Object.keys(e).filter((function(t){return e[t].validConnection})).length},t.isRoomIdOrPeerIdChanged=function(e,t){var n=!1;return t.rtcRoomId&&e.rtcRoomId&&e.rtcRoomId!==t.rtcRoomId&&(n=!0),t.rtcPeerId&&e.rtcPeerId&&e.rtcPeerId!==t.rtcPeerId&&(n=!0),n&&(0,l.sdkLog)("debug","maybeOpenWebsocketConnection. rtcRoomId or rtcPeerId has been changed",{old:{rtcRoomId:e.rtcRoomId,rtcPeerId:e.rtcPeerId},new:{rtcRoomId:t.rtcRoomId,rtcPeerId:t.rtcPeerId}}),n},t.validateRating=function(e){return e?!("number"!=typeof e||e<1||e>5)||((0,l.sdkLog)("error","rating parameter should be number from 1 to 5"),!1):((0,l.sdkLog)("error","rating parameter is required"),!1)},t.validateEvent=function(e,t){return e?["global","local","log"].includes(e.type)?e.parameters&&"object"!=typeof e.parameters?((0,l.sdkLog)("error",\'event.parameters should be JSON object"\'),!1):!e.pc||e.pc.__rtcStatsId in t||((0,l.sdkLog)("error",\'event.pc should be a RTCPeerConnection used in the call"\'),!1):((0,l.sdkLog)("error",\'event.type should be either "global" or "local" or "log"\'),!1):((0,l.sdkLog)("error","event parameter is required"),!1)},t.getHardwareInfo=function(){return o(void 0,void 0,void 0,(function(){function e(e){return(Math.round(100*e)/100).toFixed(2)}var t,i,a,c;return s(this,(function(h){switch(h.label){case 0:return"undefined"==typeof window?[2]:(t=function(e){return o(void 0,void 0,void 0,(function(){return s(this,(function(t){switch(t.label){case 0:return[4,new Promise((function(t){try{var i=n(804)("./".concat(e));return i.shift(),t(i)}catch(n){(0,l.sdkLog)("error","Error. getHardwareInfo. loadBenchmarks",{err:n.stack,fileName:e}),t([])}}))];case 1:return[2,t.sent()]}}))}))},[4,d.getGPUTier({override:{loadBenchmarks:t}})]);case 1:return i=h.sent(),a=r(r({},i),{cores_count:window.navigator.hardwareConcurrency}),(c=window.performance.memory)&&(a.jsHeapSizeLimit=e(c.jsHeapSizeLimit/1048576),a.totalJSHeapSize=e(c.totalJSHeapSize/1048576),a.usedJSHeapSize=e(c.usedJSHeapSize/1048576)),[2,a]}}))}))};var m={originalMethodPrefix:"_original_",methodsToPatch:["log","debug","info","warn","error"],level:""},g=function(e,t){var n=console[e];n&&(console[m.originalMethodPrefix+e]=n,console[e]=function(){for(var i=[],r=0;r=0&&o>=s){var a=f(i);t({data:["log",null,{type:e,text:a}]})}}n.apply(console,i)})};t.setConsoleLevel=function(e,t){if(e&&m.methodsToPatch.includes(e)&&e!==m.level){var n=m.methodsToPatch.indexOf(e),i=m.methodsToPatch.indexOf(m.level);if(i<0)for(var r=0,o=m.methodsToPatch.slice(n);r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default="1.38.2"},911:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(231),r=function(){function e(){e._instance?(0,i.sdkLog)("info","WatchRTCSocket instance already created"):e._instance=this}return e.prototype.trace=function(e,t,n,r){for(var o=[],s=4;s{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(231),r=n(354),o="undefined"!=typeof window?window:n.g,s=function(){function e(){var t=this;this.connection=null,this.wasConnected=!1,this.buffer=[],this.sendInterval=1,this.onClose=function(){},this.dataCollection=!0,this.sendPromises=[],this.prevMessageTs=Date.now(),this.trace=function(n){var s=n.data,a=n.options,d=Array.prototype.slice.call(s),c=t.prevMessageTs,l=Date.now(),h=l-c;if(Math.abs(h)>=432e5&&t.trace({data:["timeChange",null,{now:l,prevMessageTs:c,timeSinceLastMessage:h}]}),d.push(l),d[1]instanceof RTCPeerConnection&&(d[1]=d[1].__rtcStatsId),e._instance.dataCollection)if(e._instance.connection&&e._instance.connection.readyState===o.WebSocket.OPEN||!(e._instance.buffer.length>1e3)){if(e._instance.buffer.push(d),(null==a?void 0:a.promiseFuncs)&&e._instance.sendPromises.push(a.promiseFuncs),e._instance.connection&&e._instance.connection.readyState===o.WebSocket.OPEN&&e._instance.buffer.length>=e._instance.sendInterval){var u=JSON.stringify(e._instance.buffer),p=r.compressToEncodedURIComponent(u);(0,i.sdkLogWithoutTrace)("debug","lines: ".concat(u.length)),(0,i.sdkLogWithoutTrace)("debug","compressedMessage: ".concat(p.length)),e._instance.buffer=[],e._instance.connection.send(p),e._instance.sendPromises.forEach((function(e){return(0,e.resolve)({})})),e._instance.sendPromises=[]}}else(null==a?void 0:a.promiseFuncs)&&a.promiseFuncs.resolve({error:"Message buffer size exceeded"});else(null==a?void 0:a.promiseFuncs)&&a.promiseFuncs.resolve({error:"Data collection disabled"})},e._instance?(0,i.sdkLog)("info","WatchRTCSocket instance already created"):e._instance=this}return e.prototype.connect=function(t){var n=t.url,r=t.onData,s=t.onError,a=t.onOpen,d=t.onClose,c=t.options,l=(void 0===c?{}:c).cleanOldTraces;e._instance.connection&&(e._instance.connection.close(),e._instance.connection=null);var h=e._instance;if(l){var u=Date.now()-6e5,p=h.buffer.filter((function(e){return e[3]>u})),m=h.buffer.length-p.length;h.buffer=p;var g=["oldTracesCleanup",null,{filteredCount:m},Date.now()];(0,i.sdkLog)("info","watchRTC SDK flushed ".concat(m," messages")),h.buffer.push(g)}e._instance.connection=new o.WebSocket(n,"2.0"),e._instance.connection.onopen=a||null,e._instance.connection.onclose=d||null,e._instance.connection.onmessage=function(t){var n;try{var o=JSON.parse(t.data);o.error?(null===(n=null==h?void 0:h.connection)||void 0===n||n.close(),h.connection=null,(0,i.sdkLog)("error","\\n"+o.error),s(o.error,"auth")):(o.sendInterval&&(e._instance.sendInterval=o.sendInterval),r(o),e._instance.wasConnected=!0)}catch(e){(0,i.sdkLog)("error","\\n",{err:e.stack}),s(e.message)}},e._instance.connection.onerror=function(e){(0,i.sdkLog)("error","\\n",e),s(e,"connection")}},e.prototype.close=function(t){var n,i;if(t&&(null===(i=null===(n=e._instance)||void 0===n?void 0:n.connection)||void 0===i?void 0:i.readyState)===o.WebSocket.OPEN){var s=JSON.stringify(["nailUpCallEnd",null,null,Date.now()]),a=r.compressToEncodedURIComponent(s);e._instance.connection.send(a)}e._instance.buffer=[],e._instance.sendPromises.forEach((function(e){return(0,e.resolve)({error:"Connection was close"})})),e._instance.sendPromises=[],e._instance.connection&&(e._instance.connection.close(),e._instance.onClose(),e._instance.connection=null)},e.prototype.disableDataCollection=function(){(0,i.sdkLog)("debug","Data collection disabled."),e._instance.dataCollection=!1},e.prototype.enableDataCollection=function(){(0,i.sdkLog)("debug","Data collection enabled."),e._instance.dataCollection=!0},e.prototype.isDisabledDataCollection=function(){return!e._instance.dataCollection},e}();t.default=s},240:function(e,t){!function(e){"use strict";var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,n)};function n(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}d((i=i.apply(e,t||[])).next())}))}function i(e,t){var n,i,r,o,s={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,i&&(r=2&o[0]?i.return:o[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;switch(i=0,r&&(o=[2&o[0],r.value]),o[0]){case 0:case 1:r=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((r=(r=s.trys).length>0&&r[r.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]0&&!window.MSStream;return{isIpad:o,isMobile:/android/i.test(t)||r||o,isSafari12:/Version\\/12.+Safari/.test(t)}}}();var d=[],c=[];function l(e,t){if(e===t)return 0;var n=e;e.length>t.length&&(e=t,t=n);for(var i=e.length,r=t.length;i>0&&e.charCodeAt(~-i)===t.charCodeAt(~-r);)i--,r--;for(var o,s=0;sh?l>h?h+1:l:l>a?a+1:l;return h}function h(e){return null!=e}var u=function(e){function n(t){var n=this.constructor,i=e.call(this,t)||this;return Object.setPrototypeOf(i,n.prototype),i}return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}(n,e),n}(Error);e.getGPUTier=function(e){var t=void 0===e?{}:e,d=t.mobileTiers,c=void 0===d?[0,15,30,60]:d,p=t.desktopTiers,m=void 0===p?[0,15,30,60]:p,g=t.override,f=void 0===g?{}:g,v=t.glContext,_=t.failIfMajorPerformanceCaveat,y=void 0!==_&&_,E=t.benchmarksURL,S=void 0===E?"https://unpkg.com/detect-gpu@".concat("4.0.8","/dist/benchmarks"):E;return n(void 0,void 0,void 0,(function(){var e,t,d,p,g,_,E,b,T,C,x,R,A,w,I,P,D,O,k,N,M,L,F,j,V,U;return i(this,(function(H){switch(H.label){case 0:if(e={},s)return[2,{tier:0,type:"SSR"}];if(t=f.isIpad,d=void 0===t?!!(null==a?void 0:a.isIpad):t,p=f.isMobile,g=void 0===p?!!(null==a?void 0:a.isMobile):p,_=f.screenSize,E=void 0===_?window.screen:_,b=f.loadBenchmarks,T=void 0===b?function(e){return n(void 0,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return[4,fetch("".concat(S,"/").concat(e)).then((function(e){return e.json()}))];case 1:if(t=n.sent(),parseInt(t.shift().split(".")[0],10)<4)throw new u("Detect GPU benchmark data is out of date. Please update to version 4x");return[2,t]}}))}))}:b,C=f.renderer,x=function(e){for(var t=0,n=g?["adreno","apple","mali-t","mali","nvidia","powervr"]:["intel","apple","amd","radeon","nvidia","geforce"];t1?h.map((function(e){return[e,l(t,e[0])]})).sort((function(e,t){return e[1]-t[1]}))[0][0]:h[0],f=m[0],v=m[3],_=Number.MAX_VALUE,S=window.devicePixelRatio,b=E.width*S*E.height*S,C=0,R=v;C=14})):(i=c.filter((function(e){return e[1]===r}))).length||(i=c),i.map((function(e){var t=e[0];return"apple ".concat(t," gpu")}))}(e,t,n):[t]}(P,C,g)}return[4,Promise.all(w.map(R))];case 1:if(!(O=H.sent().filter(h).sort((function(e,t){var n=e[0],i=void 0===n?Number.MAX_VALUE:n,r=e[1],o=t[0],s=void 0===o?Number.MAX_VALUE:o,a=t[1];return i===s?r-a:i-s}))).length)return[2,(k=r.find((function(e){return C.includes(e)})))?A(0,"BLOCKLISTED",k):A(1,"FALLBACK","".concat(C," (").concat(I,")"))];if(N=O[0],M=N[1],L=N[2],F=N[3],-1===M)return[2,A(0,"BLOCKLISTED",L,M,F)];for(j=g?c:m,V=0,U=0;U=j[U]&&(V=U);return[2,A(V,"BENCHMARK",L,M,F)]}}))}))},Object.defineProperty(e,"__esModule",{value:!0})}(t)},622:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["qualcomm adreno 540","540",0,[[1919,1279,19]]],["qualcomm adreno 540 gpu","540",0,[[1919,1279,24]]],["qualcomm adreno 618 gpu","618",0,[[1920,1080,20]]],["qualcomm adreno 630 gpu","630",0,[[1920,1080,21]]],["qualcomm adreno 680 gpu","680",0,[[2880,1920,25]]],["qualcomm adreno 685 gpu","685",0,[[1920,1080,28]]],["qualcomm adreno 690 gpu","690",0,[[1920,1280,28]]],["qualcomm adreno 8cx gen 3","8",0,[[1920,1080,22]]]]\')},183:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["amd ???","",0,[[1920,1080,144]]],["amd [amd/ati] fiji [radeon r9 fury / nano series]","9",0,[[1920,1200,162]]],["amd 15dd","15",0,[[3840,2160,14]]],["amd 66af:f1","66",0,[[3840,2160,181]]],["amd 67df:c4","67",0,[[2560,1600,59]]],["amd 67e8:00","67",0,[[1920,1080,59]]],["amd 67ef:c5","67",0,[[1920,1080,52]]],["amd 67ef:cf","67",0,[[1920,1080,74]]],["amd 67ef:e7","67",0,[[1920,1080,60]]],["amd 67ff:08","67",0,[[1920,1200,31]]],["amd 694c:c0","694",0,[[1919,1080,28],[3840,2160,12]]],["amd 694e:c0","694",0,[[3840,2160,27]]],["amd 6980:00","6980",0,[[1920,1200,59]]],["amd 699f:c1","699",0,[[1920,1080,48]]],["amd 7310:00","7310",0,[[3840,2160,55]]],["amd 731f:c1","731",0,[[1920,1080,60]]],["amd 7340:c5","7340",0,[[2560,1600,44]]],["amd advanced micro devices [amd] nee ati device","nee",0,[[1920,1200,157]]],["amd asus amd radeon r9-990x","9",0,[[1920,1080,60]]],["amd asus eah5450","5450",0,[[1600,900,12],[1680,1050,11],[1920,1200,12]]],["amd asus eah5670","5670",0,[[1920,1080,28]]],["amd asus eah6450","6450",0,[[1920,1080,12]]],["amd asus hd7750","7750",0,[[1920,1080,105]]],["amd asus hd7770","7770",0,[[1680,1050,60]]],["amd asus hd7850","7850",0,[[1920,1080,60]]],["amd asus hd7970","7970",0,[[3840,2160,50]]],["amd asus hd8760","8760",0,[[1680,1050,59]]],["amd asus r5 230","5",0,[[1920,1080,12]]],["amd asus r7 240","7",0,[[1600,900,28],[1920,1080,31]]],["amd asus r7 250","7",0,[[1920,1080,59]]],["amd asus r7 250x","7",0,[[1920,1080,60]]],["amd asus r7 265","7",0,[[1920,1080,60]]],["amd asus r7 360","7",0,[[1920,1080,78]]],["amd asus r7 370","7",0,[[1600,900,60],[1920,1080,143]]],["amd asus r9 270","9",0,[[1600,900,60]]],["amd asus r9 280x","9",0,[[1920,1080,146]]],["amd asus r9 295x2","9",0,[[2560,1440,93]]],["amd asus r9 380","9",0,[[1920,1080,60]]],["amd asus r9 390","9",0,[[1920,1080,235]]],["amd asus radeon r7 250","7",0,[[800,638,60]]],["amd asus radeon r7 260x","7",0,[[2560,1080,65]]],["amd asus radeon r9 270x","9",0,[[1024,768,85],[1920,1080,60]]],["amd asus radeon r9 280","9",0,[[1920,1080,60]]],["amd asus radeon rx 460","460",0,[[1360,768,104]]],["amd asus radeon rx 470","470",0,[[1920,1080,60]]],["amd asus radeon rx 480","480",0,[[1920,1080,124]]],["amd asus radeon rx 550","550",0,[[1440,900,60],[1920,1080,49]]],["amd asus radeon rx 5500 xt","5500",0,[[1920,1080,325]]],["amd asus radeon rx 560","560",0,[[1360,768,60],[1920,1080,85]]],["amd asus radeon rx 570","570",0,[[1600,900,202],[1920,1080,60]]],["amd asus radeon rx 5700","5700",0,[[1920,1080,327]]],["amd asus radeon rx 5700 xt","5700",0,[[1920,1080,224],[2560,1440,60]]],["amd asus radeon rx 580","580",0,[[1920,1080,177],[2560,1080,60]]],["amd asus radeon rx vega","rx",0,[[2560,1440,117]]],["amd asus rx 6600xt macos","6600",0,[[3840,2160,60]]],["amd ati mobility radeon hd 5870","5870",0,[[1920,1200,19]]],["amd baffin amd radeon rx 560","560",0,[[1920,1080,60]]],["amd barco mxrt 5600","5600",0,[[2800,2100,30]]],["amd carrizo 9874","9874",0,[[1920,1200,11]]],["amd cezanne","",0,[[1920,1080,162]]],["amd device","",0,[[1920,1080,188]]],["amd ellesmere radeon rx 570","570",0,[[1920,1080,60]]],["amd embedded radeon e9171","9171",0,[[3840,2160,26]]],["amd embedded radeon e9173","9173",0,[[3840,2160,16]]],["amd firepro 2270","2270",0,[[1245,768,19],[1920,1200,9]]],["amd firepro 3800 graphics adapter","3800",0,[[1920,1080,18]]],["amd firepro d300","300",0,[[1920,1080,60],[2560,1440,60],[3440,1440,60],[3840,2160,30]]],["amd firepro d500","500",0,[[1600,900,60],[2560,1440,59],[2560,1600,87],[3840,2160,57]]],["amd firepro d700","700",0,[[2048,1152,59],[2560,1440,59]]],["amd firepro m2000","2000",0,[[1600,900,28],[1920,1080,24]]],["amd firepro m4000","4000",0,[[1920,1080,57]]],["amd firepro m4000 mobility pro","4000",0,[[1920,1080,57]]],["amd firepro m4100","4100",0,[[1920,1080,58]]],["amd firepro m4100 firegl v","4100",0,[[1920,1080,24]]],["amd firepro m4150","4150",0,[[1600,900,51]]],["amd firepro m4170","4170",0,[[1920,1080,43]]],["amd firepro m5100","5100",0,[[1920,1080,60]]],["amd firepro m5100 firegl v","5100",0,[[1920,1080,29]]],["amd firepro m5950","5950",0,[[1920,1080,42]]],["amd firepro m6000 mobility pro","6000",0,[[1600,900,33],[1920,1080,60]]],["amd firepro m6100","6100",0,[[1920,1080,60]]],["amd firepro m6100 firegl v","6100",0,[[1920,1080,60]]],["amd firepro m7820","7820",0,[[1680,1050,44]]],["amd firepro r5000","5000",0,[[1920,1080,60]]],["amd firepro s10000","10000",0,[[2560,1440,58]]],["amd firepro s7150","7150",0,[[1440,900,70]]],["amd firepro s9000","9000",0,[[1920,1080,60]]],["amd firepro s9050","9050",0,[[1920,1080,101]]],["amd firepro v graphics adapter","v",0,[[1680,1050,53],[1920,1080,54]]],["amd firepro v3800","3800",0,[[1280,992,28],[1680,1050,25]]],["amd firepro v3900","3900",0,[[1920,1080,28],[2560,1440,26]]],["amd firepro v4800","4800",0,[[1440,900,37],[1920,1080,50]]],["amd firepro v4800 graphics adapter","4800",0,[[1920,1080,46]]],["amd firepro v4900","4900",0,[[1600,900,76],[1920,1080,53]]],["amd firepro v4900 graphics adapter","4900",0,[[1920,1200,40]]],["amd firepro v5800","5800",0,[[1366,768,60],[1920,1200,62]]],["amd firepro v5800 graphics adapter","5800",0,[[1360,768,83],[1280,1024,58]]],["amd firepro v5900","5900",0,[[1920,1080,53],[1920,1200,58],[3440,1440,34]]],["amd firepro v5900 graphics adapter","5900",0,[[1600,1200,54],[1920,1080,65]]],["amd firepro v7800 graphics adapter","7800",0,[[1680,1050,60],[1920,1080,60]]],["amd firepro v7900","7900",0,[[1920,1080,135],[1920,1200,60],[2560,1080,124]]],["amd firepro v7900 graphics adapter","7900",0,[[1920,1080,58]]],["amd firepro v8800","8800",0,[[2560,1440,58]]],["amd firepro w2100","2100",0,[[1920,1080,33]]],["amd firepro w4100","4100",0,[[1920,1080,55]]],["amd firepro w4100 graphics adapter","4100",0,[[1600,1200,70],[1920,1080,56]]],["amd firepro w4150m firegl v","4150",0,[[1920,1080,45]]],["amd firepro w4170m","4170",0,[[1366,768,11]]],["amd firepro w4190m","4190",0,[[1920,1080,42]]],["amd firepro w4300","4300",0,[[1280,1024,116]]],["amd firepro w5000","5000",0,[[1920,1080,60],[2560,1600,75]]],["amd firepro w5000 graphics adapter","5000",0,[[1280,1024,60],[1920,1080,117]]],["amd firepro w5100","5100",0,[[1920,1080,60],[1920,1200,59]]],["amd firepro w5100 graphics adapter","5100",0,[[1920,1080,89],[3840,2160,29]]],["amd firepro w5130m","5130",0,[[1920,1080,60]]],["amd firepro w5170m","5170",0,[[1920,1080,84],[2560,1440,51]]],["amd firepro w600","600",0,[[3840,2160,25]]],["amd firepro w6150m","6150",0,[[1920,1080,45]]],["amd firepro w7000","7000",0,[[1920,1080,60],[1920,1200,136]]],["amd firepro w7000 graphics adapter","7000",0,[[1920,1080,60]]],["amd firepro w7100","7100",0,[[1920,1080,60],[1920,1200,141]]],["amd firepro w7100 graphics adapter","7100",0,[[1200,900,60]]],["amd firepro w7170m","7170",0,[[1920,1080,60]]],["amd firepro w8000","8000",0,[[1920,1200,110],[2560,1440,60]]],["amd firepro w8100","8100",0,[[1920,1080,60],[1920,1200,60]]],["amd firepro w8100 graphic adapter","8100",0,[[1280,1024,113]]],["amd firepro w9100","9100",0,[[1920,1080,60],[1920,1200,188],[2560,1600,59]]],["amd gigabyte radeon rx 580","580",0,[[1920,1080,60]]],["amd gigabyte vega 64 macos","64",0,[[1920,1080,60]]],["amd hd7950 martin rev.","7950",0,[[2560,1440,101]]],["amd hd7950 martin ver.","7950",0,[[2560,1440,104]]],["amd kamen rider black rx","rx",0,[[1920,1080,60]]],["amd kaveri","",0,[[1920,1080,9]]],["amd madison [mobility radeon hd 5650 / 6530m/6550m]","5650",0,[[1366,768,43]]],["amd matrox c680 pcie x16","680",0,[[2560,1440,49]]],["amd matrox c900 pcie x16","900",0,[[5760,3240,9]]],["amd metal","",0,[[1920,1080,120]]],["amd mobility radeon hd 4250","4250",0,[[963,722,26]]],["amd mobility radeon hd 5000","5000",0,[[1366,768,47]]],["amd mobility radeon hd 5400","5400",0,[[1366,768,24]]],["amd mobility radeon hd 5430","5430",0,[[1600,900,15],[1920,1080,60]]],["amd mobility radeon hd 5470","5470",0,[[1366,768,24]]],["amd mobility radeon hd 5570","5570",0,[[1920,1080,27]]],["amd mobility radeon hd 5730 / 6570m","5730",0,[[1366,768,58]]],["amd mobility radeon hd 5850","5850",0,[[1600,900,55]]],["amd mobility radeon hd 5870","5870",0,[[1600,900,64],[1920,1200,53]]],["amd msi / amd rx 560","560",0,[[1920,1080,60]]],["amd msi / amd rx 560 4g","560",0,[[1920,1080,60]]],["amd msi baffin rx650","650",0,[[1920,1080,399]]],["amd msi rx560","560",0,[[1920,1080,343]]],["amd msi rx650","650",0,[[1920,1080,60]]],["amd mxgpu","",0,[[1920,1012,67],[1920,1080,106]]],["amd navi 10 5700 xt","10",0,[[3840,2160,60]]],["amd opal xt/gl","xt",0,[[1366,768,60]]],["amd park [mobility radeon hd 5430","5430",0,[[1280,720,11]]],["amd picasso","",0,[[1920,1080,48]]],["amd pitcairn pro radeon hd 7850","7850",0,[[1920,1080,60]]],["amd powercolor radeon r9 280","9",0,[[1920,1080,60]]],["amd r9 270x devil","9",0,[[1920,1080,60]]],["amd r9 280x dual-x","9",0,[[1920,1080,60]]],["amd r9 380","9",0,[[2560,1440,119]]],["amd r9 xxx","9",0,[[1920,1080,60]]],["amd radeon","",0,[[1920,1080,299],[3440,1440,60]]],["amd radeon 500","500",0,[[1920,1080,73]]],["amd radeon 520","520",0,[[1920,1080,35],[2560,1440,29]]],["amd radeon 530","530",0,[[1366,768,60],[1920,1080,30]]],["amd radeon 535","535",0,[[1920,1080,35]]],["amd radeon 535dx","535",0,[[1366,768,31],[1920,1080,37]]],["amd radeon 540","540",0,[[1920,1080,38]]],["amd radeon 540 / rx 540x/550/550x","540",0,[[2560,1440,88]]],["amd radeon 540x","540",0,[[1920,1080,59]]],["amd radeon 550","550",0,[[1920,1080,115]]],["amd radeon 550x","550",0,[[1920,1080,28]]],["amd radeon 610","610",0,[[1920,1080,29]]],["amd radeon 620","620",0,[[1920,1080,18]]],["amd radeon 625","625",0,[[1366,768,55],[1920,1080,47]]],["amd radeon 630","630",0,[[1920,1080,29]]],["amd radeon 6600m and 6700m","6600",0,[[1366,768,36],[1440,900,60]]],["amd radeon 6800","6800",0,[[3440,1440,100]]],["amd radeon 7500m/7600m","7500",0,[[1366,768,37]]],["amd radeon 7950 x2","7950",0,[[2560,1440,174]]],["amd radeon d700","700",0,[[2560,1440,120]]],["amd radeon e6460","6460",0,[[1600,1200,13]]],["amd radeon e6760","6760",0,[[1200,900,54],[1920,1080,42]]],["amd radeon e8860","8860",0,[[1920,1200,27],[2560,1374,88]]],["amd radeon e8870","8870",0,[[1920,1080,81]]],["amd radeon e8870mxm","8870",0,[[1920,1080,60]]],["amd radeon e9260","9260",0,[[1680,1050,60],[3840,2160,38]]],["amd radeon e9550","9550",0,[[1680,1050,60],[3840,2160,58]]],["amd radeon embedded e9560","9560",0,[[1920,1200,60]]],["amd radeon fury","",0,[[1920,1080,60]]],["amd radeon fury x","x",0,[[1920,1080,60],[2560,1440,144]]],["amd radeon hd - firepro d300","300",0,[[1920,1080,60]]],["amd radeon hd - firepro d300 opengl engine","300",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd - firepro d500 opengl engine","500",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd - firepro d700 opengl engine","700",0,[[3840,2160,52]]],["amd radeon hd 2600 xt","2600",1,[[2560,1600,-1]]],["amd radeon hd 5000","5000",0,[[1920,1080,8]]],["amd radeon hd 5400","5400",0,[[1920,1080,12]]],["amd radeon hd 5450","5450",0,[[1920,1080,13]]],["amd radeon hd 5470","5470",0,[[1280,1024,16]]],["amd radeon hd 5500","5500",0,[[1920,1080,27]]],["amd radeon hd 5570","5570",0,[[1920,1080,60],[2048,1152,31]]],["amd radeon hd 5600","5600",0,[[1920,1080,56]]],["amd radeon hd 5650","5650",0,[[1366,768,53]]],["amd radeon hd 5670","5670",1,[[1920,1080,-1],[2560,1440,-1]]],["amd radeon hd 5670 opengl engine","5670",1,[[2560,1440,-1]]],["amd radeon hd 5700","5700",0,[[1920,1080,59]]],["amd radeon hd 5730","5730",0,[[1366,768,46],[1680,1050,40]]],["amd radeon hd 5750","5750",1,[[1920,1080,-1],[1920,1200,-1],[2560,1440,-1]]],["amd radeon hd 5750 opengl engine","5750",1,[[2560,1440,-1]]],["amd radeon hd 5770","5770",0,[[1776,1000,43],[1920,1080,59]]],["amd radeon hd 5800","5800",0,[[1366,768,60],[1920,1200,102]]],["amd radeon hd 5850","5850",0,[[1920,1080,60]]],["amd radeon hd 5870","5870",0,[[1280,960,75],[1920,1080,60],[2048,1280,60]]],["amd radeon hd 5870m","5870",0,[[2560,1080,31]]],["amd radeon hd 5970","5970",0,[[1360,768,60],[1920,1080,60]]],["amd radeon hd 6230","6230",0,[[1366,768,13]]],["amd radeon hd 6250","6250",0,[[1280,800,8],[1366,768,8]]],["amd radeon hd 6290","6290",1,[[1366,768,-1]]],["amd radeon hd 6300m","6300",1,[[1366,768,-1]]],["amd radeon hd 6310","6310",1,[[1366,768,-1]]],["amd radeon hd 6320","6320",1,[[1366,768,-1]]],["amd radeon hd 6350","6350",0,[[1280,1024,18],[1920,1080,14]]],["amd radeon hd 6370d","6370",0,[[1920,1080,14]]],["amd radeon hd 6370m","6370",0,[[1366,768,25]]],["amd radeon hd 6380g","6380",0,[[1366,768,19]]],["amd radeon hd 6400","6400",0,[[1920,1080,13]]],["amd radeon hd 6400m","6400",0,[[1366,768,28]]],["amd radeon hd 6400m/7400m","6400",0,[[1366,768,28]]],["amd radeon hd 6410d","6410",0,[[1920,1080,11]]],["amd radeon hd 6450","6450",0,[[1920,1080,14]]],["amd radeon hd 6450 / r5 230","6450",0,[[1440,900,12]]],["amd radeon hd 6450 230","6450",0,[[1920,1080,15]]],["amd radeon hd 6470m","6470",0,[[1366,768,27],[1600,900,21]]],["amd radeon hd 6470m/7400m","6470",0,[[1366,768,44]]],["amd radeon hd 6480g","6480",0,[[1280,768,19],[1366,768,27],[1600,900,18]]],["amd radeon hd 6490m","6490",1,[[1366,768,-1],[1440,900,-1],[1680,1050,-1]]],["amd radeon hd 6500","6500",0,[[1920,1080,25]]],["amd radeon hd 6500m/5600","6500",0,[[1920,1080,27]]],["amd radeon hd 6510","6510",0,[[1600,900,32]]],["amd radeon hd 6520g","6520",0,[[1366,768,21],[1600,900,20]]],["amd radeon hd 6530d","6530",0,[[1366,768,31],[1440,900,36],[1920,1080,24]]],["amd radeon hd 6540","6540",0,[[1600,1200,13]]],["amd radeon hd 6550d","6550",0,[[1920,1080,28]]],["amd radeon hd 6570","6570",0,[[1920,1080,52],[2560,1440,17]]],["amd radeon hd 6620g","6620",0,[[1360,768,43],[1366,768,28]]],["amd radeon hd 6630m","6630",1,[[1366,768,-1],[1600,900,-1],[1920,1080,-1]]],["amd radeon hd 6630m/6650m/6750m/7670m/7690m","6630",1,[[1366,768,-1],[1920,1080,-1]]],["amd radeon hd 6650m","6650",0,[[1366,768,51],[1600,900,31]]],["amd radeon hd 6670","6670",0,[[1920,1080,55]]],["amd radeon hd 6700","6700",0,[[1920,1080,56]]],["amd radeon hd 6700 green","6700",0,[[1360,768,89]]],["amd radeon hd 6700m/7700m/7900m","6700",0,[[1366,768,59]]],["amd radeon hd 6730m/6770m","6730",0,[[1366,768,58],[1920,1080,46]]],["amd radeon hd 6730m/6770m/7690m xt","6730",0,[[1920,1080,48]]],["amd radeon hd 6750","6750",0,[[1440,900,72],[1920,1080,60]]],["amd radeon hd 6750m","6750",1,[[1440,900,-1],[1920,1080,-1],[1920,1200,-1]]],["amd radeon hd 6770","6770",0,[[1920,1080,60]]],["amd radeon hd 6770m","6770",1,[[1440,900,-1],[2560,1440,-1]]],["amd radeon hd 6770m opengl engine","6770",1,[[2560,1440,-1]]],["amd radeon hd 6790","6790",0,[[1920,1080,59]]],["amd radeon hd 6800","6800",0,[[1280,1024,89],[1920,1080,60]]],["amd radeon hd 6800m","6800",0,[[1600,900,18],[1920,1080,40]]],["amd radeon hd 6850","6850",0,[[1920,1080,59],[2560,1600,54]]],["amd radeon hd 6870","6870",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd 6900","6900",0,[[1920,1080,60]]],["amd radeon hd 6900m","6900",0,[[1920,1080,60]]],["amd radeon hd 6950","6950",0,[[1680,1050,60],[1920,1080,41]]],["amd radeon hd 6970","6970",0,[[1920,1080,60]]],["amd radeon hd 6970m","6970",1,[[2560,1440,-1]]],["amd radeon hd 6970m opengl engine","6970",1,[[2560,1440,-1]]],["amd radeon hd 6990","6990",0,[[1920,1080,60]]],["amd radeon hd 7000","7000",0,[[1920,1080,24]]],["amd radeon hd 7290","7290",0,[[1366,768,9]]],["amd radeon hd 7310","7310",0,[[1366,768,14]]],["amd radeon hd 7340","7340",0,[[1366,768,17],[1920,1080,10]]],["amd radeon hd 7340g","7340",0,[[1366,768,15]]],["amd radeon hd 7340m","7340",0,[[1366,768,15]]],["amd radeon hd 7350","7350",0,[[1920,1080,13]]],["amd radeon hd 7400","7400",0,[[1920,1080,18]]],["amd radeon hd 7400g","7400",0,[[963,768,31]]],["amd radeon hd 7400m","7400",0,[[1366,768,44]]],["amd radeon hd 7420g","7420",0,[[1366,768,28],[1600,900,26]]],["amd radeon hd 7450","7450",0,[[1920,1080,15]]],["amd radeon hd 7450a","7450",0,[[1920,1080,15]]],["amd radeon hd 7450m","7450",0,[[1366,768,30]]],["amd radeon hd 7470","7470",0,[[1680,1050,22],[1920,1080,144]]],["amd radeon hd 7470m","7470",0,[[1366,768,31],[1600,900,23]]],["amd radeon hd 7480d","7480",0,[[1280,1024,25],[1920,1080,24],[1920,1200,18]]],["amd radeon hd 7500","7500",0,[[1366,696,49],[1366,768,49]]],["amd radeon hd 7500g","7500",0,[[1366,768,26]]],["amd radeon hd 7500m/7600m","7500",0,[[1366,768,46]]],["amd radeon hd 7520g","7520",0,[[1366,768,33]]],["amd radeon hd 7520g + hd 7400m dual","7520",0,[[1366,768,34]]],["amd radeon hd 7520g + hd 7600m dual","7520",0,[[1366,768,31],[1600,900,41]]],["amd radeon hd 7540d","7540",0,[[1024,768,55],[1280,1024,44],[1920,1080,22]]],["amd radeon hd 7540d + hd 6670 dual","7540",0,[[1280,1024,36]]],["amd radeon hd 7550m/7650m","7550",0,[[1366,768,57]]],["amd radeon hd 7560d","7560",0,[[1920,1080,34]]],["amd radeon hd 7560d + hd 6570 dual","7560",0,[[1680,1050,44]]],["amd radeon hd 7560d + hd 6670 dual","7560",0,[[800,638,60]]],["amd radeon hd 7570","7570",0,[[1024,768,72],[1920,1080,52]]],["amd radeon hd 7570m","7570",0,[[1366,768,35]]],["amd radeon hd 7570m/hd 7670m","7570",0,[[1366,768,50],[1600,900,29]]],["amd radeon hd 7600","7600",0,[[1920,1080,60]]],["amd radeon hd 7600a","7600",0,[[1920,1080,28]]],["amd radeon hd 7600g","7600",0,[[1366,768,29]]],["amd radeon hd 7600g + 7500m/7600m dual","7600",0,[[1366,768,19]]],["amd radeon hd 7600g + hd 8670m dual","7600",0,[[1366,768,29]]],["amd radeon hd 7600g + hd dual","7600",0,[[1366,768,20]]],["amd radeon hd 7600m","7600",0,[[1366,768,56]]],["amd radeon hd 7600m/7700m","7600",0,[[1366,768,31]]],["amd radeon hd 7610m","7610",0,[[1366,768,43]]],["amd radeon hd 7620g","7620",0,[[1366,768,22],[1920,1080,19]]],["amd radeon hd 7640g","7640",0,[[1366,768,38]]],["amd radeon hd 7640g + 7470m dual","7640",0,[[1366,768,32]]],["amd radeon hd 7640g + 7600m dual","7640",0,[[1366,768,23]]],["amd radeon hd 7640g + 7670m dual","7640",0,[[1600,900,15]]],["amd radeon hd 7640g + 8500m dual","7640",0,[[1366,768,35]]],["amd radeon hd 7640g + hd 7400m dual","7640",0,[[1366,768,37]]],["amd radeon hd 7640g + hd 7500 dual","7640",0,[[1366,768,35]]],["amd radeon hd 7640g + hd 7670m dual","7640",0,[[1366,768,34]]],["amd radeon hd 7640g + hd 8500m dual","7640",0,[[1366,768,40]]],["amd radeon hd 7640g + hd 8570m dual","7640",0,[[1366,768,31]]],["amd radeon hd 7650a","7650",0,[[1680,1050,43],[1920,1080,15]]],["amd radeon hd 7650m","7650",0,[[1366,768,41],[1600,900,45]]],["amd radeon hd 7660d","7660",0,[[1680,1050,40],[1920,1008,60],[1920,1080,38]]],["amd radeon hd 7660d + hd 6570 dual","7660",0,[[1200,900,32]]],["amd radeon hd 7660d + hd 6670 dual","7660",0,[[1360,768,57],[1920,1080,53]]],["amd radeon hd 7660g","7660",0,[[1366,768,44],[1600,900,41],[1920,1080,34],[1920,1200,27]]],["amd radeon hd 7660g + 7600m dual","7660",0,[[1366,768,53],[1600,900,45]]],["amd radeon hd 7660g + 7670m dual","7660",0,[[1366,768,52]]],["amd radeon hd 7660g + 8670m dual","7660",0,[[1600,900,46]]],["amd radeon hd 7660g + hd 7600m dual","7660",0,[[1366,768,50]]],["amd radeon hd 7660g + hd 7670m dual","7660",0,[[1366,768,35]]],["amd radeon hd 7660g + hd 8600m dual","7660",0,[[1600,900,29]]],["amd radeon hd 7670","7670",0,[[1920,1080,39]]],["amd radeon hd 7670m","7670",0,[[1366,768,49],[1920,1080,36]]],["amd radeon hd 7700","7700",0,[[1400,1050,45],[1920,1080,60]]],["amd radeon hd 7700m","7700",0,[[1920,1080,54]]],["amd radeon hd 7730m","7730",0,[[1920,1080,57]]],["amd radeon hd 7750","7750",0,[[1280,1024,60],[1600,900,60],[1400,1050,98],[1920,1080,60],[3840,2160,23]]],["amd radeon hd 7750 / r7 250e","7750",0,[[2560,1080,69]]],["amd radeon hd 7750m","7750",0,[[1680,1050,57]]],["amd radeon hd 7770","7770",0,[[1920,1080,60]]],["amd radeon hd 7770 / r7 250x","7770",0,[[1680,1050,78]]],["amd radeon hd 7770 ghz","7770",0,[[1920,1080,78]]],["amd radeon hd 7790","7790",0,[[1920,1080,16]]],["amd radeon hd 7790 / r7 360 / r9 260/360","7790",0,[[1280,1024,131]]],["amd radeon hd 7800","7800",0,[[1920,1080,60]]],["amd radeon hd 7800m","7800",0,[[1920,1080,57]]],["amd radeon hd 7850","7850",0,[[1920,1080,60]]],["amd radeon hd 7850 / r7 265 / r9 270 1024sp","7850",0,[[1280,1024,87]]],["amd radeon hd 7870","7870",0,[[1920,1080,120],[2560,1440,60],[2560,1600,114],[3840,2160,30]]],["amd radeon hd 7870 ghz","7870",0,[[1920,1080,75]]],["amd radeon hd 7870 xt","7870",0,[[1920,1080,57],[3840,2160,53]]],["amd radeon hd 7870m","7870",0,[[1920,1080,22],[2732,1536,40]]],["amd radeon hd 7900","7900",0,[[2560,1600,59]]],["amd radeon hd 7950","7950",0,[[1920,1080,50]]],["amd radeon hd 7950 / r9 280","7950",0,[[1920,1080,59]]],["amd radeon hd 7950 oem / r9 280","7950",0,[[1920,1080,60]]],["amd radeon hd 7970","7970",0,[[1920,1080,60]]],["amd radeon hd 7970 / r9 280x","7970",0,[[1920,1080,193]]],["amd radeon hd 7970m","7970",0,[[1366,768,60],[1920,1080,60]]],["amd radeon hd 7970x/8970 280x","7970",0,[[1920,1080,60]]],["amd radeon hd 7990","7990",0,[[1920,1080,60],[5120,2880,63]]],["amd radeon hd 7xxx","7",0,[[1920,1080,60]]],["amd radeon hd 8180","8180",0,[[1366,768,10]]],["amd radeon hd 8200 / r3","8200",0,[[1366,768,21],[1600,900,13],[1680,1050,13]]],["amd radeon hd 8210","8210",0,[[1366,768,18]]],["amd radeon hd 8240","8240",0,[[1600,900,17]]],["amd radeon hd 8240 / r3","8240",0,[[1366,768,14]]],["amd radeon hd 8250","8250",0,[[1366,768,14],[1920,1200,10]]],["amd radeon hd 8280","8280",0,[[1600,900,60]]],["amd radeon hd 8280 / r3","8280",0,[[1366,768,22]]],["amd radeon hd 8280e","8280",0,[[2880,1620,6]]],["amd radeon hd 8330","8330",0,[[1366,768,24]]],["amd radeon hd 8350","8350",0,[[1920,1080,57]]],["amd radeon hd 8350g","8350",0,[[1366,768,18]]],["amd radeon hd 8370d","8370",0,[[1366,768,60],[1280,1024,26],[1920,1080,22]]],["amd radeon hd 8400","8400",0,[[1366,768,30],[1920,1080,16]]],["amd radeon hd 8400 / r3","8400",0,[[1360,768,19],[1366,768,22],[1920,1080,12]]],["amd radeon hd 8400e","8400",0,[[1680,1050,17],[1920,1080,16],[1920,1200,14]]],["amd radeon hd 8410g","8410",0,[[1366,768,32]]],["amd radeon hd 8450g","8450",0,[[1366,768,23]]],["amd radeon hd 8450g + hd 8750m dual","8450",0,[[1366,768,21]]],["amd radeon hd 8470","8470",0,[[1920,1080,17]]],["amd radeon hd 8470 + 7660d dual","8470",0,[[1920,1080,60]]],["amd radeon hd 8470d","8470",0,[[1280,1024,44],[1920,1080,21]]],["amd radeon hd 8470d + hd 6450 dual","8470",0,[[1600,900,37]]],["amd radeon hd 8490","8490",0,[[1920,1080,18],[1920,1200,20]]],["amd radeon hd 8500m","8500",0,[[1366,768,41],[1920,1080,19]]],["amd radeon hd 8500m/8700m","8500",0,[[1920,1080,30]]],["amd radeon hd 8510g","8510",0,[[1366,768,29],[1920,1080,17]]],["amd radeon hd 8550","8550",0,[[1920,1080,25]]],["amd radeon hd 8550g","8550",0,[[1366,768,34],[1600,900,41],[1920,1080,34]]],["amd radeon hd 8550g + 8500m dual","8550",0,[[1366,768,42]]],["amd radeon hd 8550g + 8600 dual","8550",0,[[1920,1080,27]]],["amd radeon hd 8550g + hd 8570m dual","8550",0,[[1366,768,32]]],["amd radeon hd 8550g + hd 8600 dual","8550",0,[[1366,768,60]]],["amd radeon hd 8550g + hd 8750m dual","8550",0,[[1366,768,37]]],["amd radeon hd 8550g + r5 m230 dual","8550",0,[[1366,768,29]]],["amd radeon hd 8570","8570",0,[[1280,1024,60],[1680,1050,54],[1920,1080,50]]],["amd radeon hd 8570 / r5 430 / r7 240 / radeon 520","8570",0,[[1920,1080,25]]],["amd radeon hd 8570d","8570",0,[[1920,1080,16]]],["amd radeon hd 8570d + r7 240 dual","8570",0,[[1920,1080,45]]],["amd radeon hd 8570m","8570",0,[[1366,768,40]]],["amd radeon hd 8600","8600",0,[[1366,768,41]]],["amd radeon hd 8600m","8600",0,[[1366,768,42],[1920,1080,14]]],["amd radeon hd 8610g","8610",0,[[1366,768,31],[1920,1080,16]]],["amd radeon hd 8610g + 8600m dual","8610",0,[[1366,768,22]]],["amd radeon hd 8610g + hd 8600m dual","8610",0,[[1366,768,41]]],["amd radeon hd 8610g + hd 8670m dual","8610",0,[[1366,768,33]]],["amd radeon hd 8650g","8650",0,[[1360,768,44],[1366,768,44]]],["amd radeon hd 8650g + 8500m dual","8650",0,[[1366,768,35]]],["amd radeon hd 8650g + 8600 dual","8650",0,[[1920,1080,38]]],["amd radeon hd 8650g + 8600m dual","8650",0,[[1366,768,21]]],["amd radeon hd 8650g + 8670m dual","8650",0,[[1366,768,66]]],["amd radeon hd 8650g + 8750m dual","8650",0,[[1920,1080,28]]],["amd radeon hd 8650g + hd 7600m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + hd 8500m dual","8650",0,[[1366,768,23]]],["amd radeon hd 8650g + hd 8570m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + hd 8600m dual","8650",0,[[1366,768,46],[1600,900,29]]],["amd radeon hd 8650g + hd 8750m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + r5 m200 dual","8650",0,[[1366,768,35]]],["amd radeon hd 8670 / r7 250","8670",0,[[1024,768,1]]],["amd radeon hd 8670a/8670m/8690m","8670",0,[[1366,768,47]]],["amd radeon hd 8670a/8670m/8750m","8670",0,[[1366,768,60]]],["amd radeon hd 8670d","8670",0,[[1024,768,45],[1280,1024,69],[1920,1080,38]]],["amd radeon hd 8670d + 7700 dual","8670",0,[[1680,1050,58]]],["amd radeon hd 8670d + hd 6670 dual","8670",0,[[1680,1050,33]]],["amd radeon hd 8670d + r5 200 dual","8670",0,[[2560,1080,14]]],["amd radeon hd 8670d + r7 200 dual","8670",0,[[1920,1080,37]]],["amd radeon hd 8670m","8670",0,[[1366,768,41]]],["amd radeon hd 8690a","8690",0,[[1920,1080,31]]],["amd radeon hd 8690m","8690",0,[[1600,900,35]]],["amd radeon hd 8700m","8700",0,[[1366,768,60]]],["amd radeon hd 8730m","8730",0,[[1366,768,59]]],["amd radeon hd 8750m","8750",0,[[1366,768,60]]],["amd radeon hd 8770","8770",0,[[1920,1080,111]]],["amd radeon hd 8790m","8790",0,[[1600,900,78],[1920,1080,60]]],["amd radeon hd 8800m","8800",0,[[1920,1080,60],[2880,1800,45]]],["amd radeon hd 8830m","8830",0,[[1920,1080,82]]],["amd radeon hd 8850m","8850",0,[[1366,768,45]]],["amd radeon hd 8870m","8870",0,[[1280,1024,60],[1600,900,60]]],["amd radeon hd 8950","8950",0,[[1920,1080,60],[1920,1200,59]]],["amd radeon hd 8970","8970",0,[[2560,1600,60]]],["amd radeon hd 8970m","8970",0,[[1920,1080,146],[1920,1200,60]]],["amd radeon hd 8xxx","8",0,[[1920,1080,120],[2560,1440,58]]],["amd radeon hd5450","5450",0,[[1280,720,24]]],["amd radeon hd6870","6870",0,[[1920,1080,60]]],["amd radeon hd7970m","7970",0,[[2560,1440,116]]],["amd radeon hd8530m","8530",0,[[1366,768,40]]],["amd radeon hd8730","8730",0,[[1680,1050,42]]],["amd radeon hd8970m","8970",0,[[1920,1080,74]]],["amd radeon hybrid","",0,[[1366,768,27]]],["amd radeon infoshock rx 460","460",0,[[1360,768,102]]],["amd radeon instinct mi25","25",0,[[1920,1200,26]]],["amd radeon instinct mi25 mxgpu","25",0,[[1920,1080,20],[1920,1200,32]]],["amd radeon m535dx","535",0,[[1366,768,58]]],["amd radeon navi14","14",0,[[3840,2160,60]]],["amd radeon polaris","",0,[[3840,2160,60],[5120,2880,44]]],["amd radeon polaris 10","10",0,[[1920,1200,60]]],["amd radeon pro","pro",0,[[1920,1080,114]]],["amd radeon pro 270x","270",0,[[2560,1440,74]]],["amd radeon pro 450","450",0,[[1920,1080,30],[2880,1800,43],[3360,2100,36],[5120,2880,30]]],["amd radeon pro 450 opengl engine","450",0,[[1920,1200,60]]],["amd radeon pro 455","455",0,[[2879,1800,54],[2880,1800,48],[3360,2100,37]]],["amd radeon pro 455 opengl engine","455",0,[[3360,2100,36]]],["amd radeon pro 460","460",0,[[2880,1800,50],[3360,2100,42]]],["amd radeon pro 460 opengl engine","460",0,[[5760,3240,15]]],["amd radeon pro 470","470",0,[[6016,3384,49]]],["amd radeon pro 480","480",0,[[1920,1080,60]]],["amd radeon pro 5300","5300",0,[[5120,2880,60]]],["amd radeon pro 5300m","5300",0,[[1920,1080,214],[3584,2240,130]]],["amd radeon pro 5500 xt","5500",0,[[5120,2880,51]]],["amd radeon pro 5500m","5500",0,[[3072,1920,60],[3584,2240,139]]],["amd radeon pro 555","555",0,[[2879,1800,54],[2880,1800,36],[3360,2100,40]]],["amd radeon pro 555x","555",0,[[2880,1800,42],[3360,2100,39]]],["amd radeon pro 560","560",0,[[2879,1800,56],[2880,1800,56],[3360,2100,42]]],["amd radeon pro 5600m","5600",0,[[3072,1920,60],[3584,2240,60]]],["amd radeon pro 560x","560",0,[[2879,1800,59],[2880,1800,71],[3360,2100,43]]],["amd radeon pro 570","570",0,[[5120,2880,48]]],["amd radeon pro 570 opengl engine","570",0,[[5120,2880,46]]],["amd radeon pro 5700","5700",0,[[5120,2880,60]]],["amd radeon pro 5700 xt","5700",0,[[5120,2880,60]]],["amd radeon pro 570x","570",0,[[5120,2880,50]]],["amd radeon pro 575","575",0,[[4096,2304,60],[5120,2880,50]]],["amd radeon pro 575 opengl engine","575",0,[[5120,2880,48]]],["amd radeon pro 575x","575",0,[[5120,2880,56]]],["amd radeon pro 580","580",0,[[5120,2880,54]]],["amd radeon pro 580 opengl engine","580",0,[[5120,2880,50]]],["amd radeon pro 580x","580",0,[[5120,2880,52]]],["amd radeon pro duo","pro",0,[[1920,1080,234],[1800,1350,59],[3840,2160,82],[4096,2160,60]]],["amd radeon pro rx 560","560",0,[[2560,1080,60]]],["amd radeon pro ssg","pro",0,[[3440,1440,125]]],["amd radeon pro v340","340",0,[[1920,1080,112]]],["amd radeon pro v520 mxgpu","520",0,[[1920,1080,271]]],["amd radeon pro v7350x2","7350",0,[[1920,1080,60]]],["amd radeon pro vega 16","16",0,[[2879,1800,60],[3360,2100,60]]],["amd radeon pro vega 20","20",0,[[2880,1800,120],[3360,2100,121],[3840,2160,30]]],["amd radeon pro vega 48","48",0,[[5120,2880,86]]],["amd radeon pro vega 56","56",0,[[1920,1080,60],[5120,2880,60]]],["amd radeon pro vega 56 opengl engine","56",0,[[5120,2880,60]]],["amd radeon pro vega 64","64",0,[[5120,2880,60]]],["amd radeon pro vega 64 opengl engine","64",0,[[5120,2880,60]]],["amd radeon pro vega 64x","64",0,[[2560,1440,206],[4096,2304,60],[5120,2880,60]]],["amd radeon pro vega ii","proii",0,[[3840,1600,60],[5120,2880,60]]],["amd radeon pro vega ii duo","proii",0,[[2560,1440,239],[5120,2880,60]]],["amd radeon pro w5500","5500",0,[[1920,1080,195],[3840,2160,59],[7680,3240,56]]],["amd radeon pro w5500m","5500",0,[[1920,1080,60]]],["amd radeon pro w5500x","5500",0,[[1920,1200,60]]],["amd radeon pro w5700","5700",0,[[1680,1050,253],[5120,1440,120],[3840,2160,60]]],["amd radeon pro w5700x","5700",0,[[3840,2160,60]]],["amd radeon pro w6600","6600",0,[[1920,1200,60],[3840,2160,166]]],["amd radeon pro w6600m","6600",0,[[1920,1080,60]]],["amd radeon pro w6800","6800",0,[[1920,1080,60],[3840,2160,237]]],["amd radeon pro w6800x","6800",0,[[6016,3384,60]]],["amd radeon pro w6800x duo","6800",0,[[3840,1600,60],[5120,2880,45]]],["amd radeon pro w6900x","6900",0,[[3840,2160,60]]],["amd radeon pro wx","pro",0,[[2560,1080,69]]],["amd radeon pro wx 2100","2100",0,[[1280,1024,145],[1920,1080,60]]],["amd radeon pro wx 3100","3100",0,[[1919,1080,58],[1920,1080,123],[2560,1440,82]]],["amd radeon pro wx 3200","3200",0,[[2560,1440,92]]],["amd radeon pro wx 4100","4100",0,[[1920,1080,60],[1920,1200,60],[3840,2160,30],[5120,2880,18]]],["amd radeon pro wx 4130","4130",0,[[1920,1080,60],[3840,2160,30]]],["amd radeon pro wx 4150","4150",0,[[1920,1080,56],[3840,2160,37],[4096,2160,34]]],["amd radeon pro wx 5100","5100",0,[[1920,1080,60],[2560,1440,91],[3840,2160,55]]],["amd radeon pro wx 5100 opengl engine","5100",0,[[2560,1440,60]]],["amd radeon pro wx 7100","7100",0,[[1920,1080,122],[2560,1080,58],[3840,2160,60],[5120,2880,60]]],["amd radeon pro wx 7100 mobile","7100",0,[[2560,1440,60]]],["amd radeon pro wx 7100 opengl engine","7100",0,[[3840,2160,60]]],["amd radeon pro wx 8200","8200",0,[[3440,1440,124]]],["amd radeon pro wx 9100","9100",0,[[1920,1080,60],[4096,2160,101]]],["amd radeon pro wx 9100 opengl engine","9100",0,[[1920,1080,60]]],["amd radeon pro wx vega m gl","prom",0,[[3840,2160,14]]],["amd radeon pro wx3200","3200",0,[[1920,1080,55]]],["amd radeon pro wx9100","9100",0,[[2560,1440,60]]],["amd radeon r2","2",0,[[1366,768,13],[1600,900,14]]],["amd radeon r2e","2",0,[[1366,768,16],[1920,1080,45],[3840,2160,4]]],["amd radeon r3","3",0,[[1366,768,17],[1920,1080,15]]],["amd radeon r4","4",0,[[1366,768,19],[1920,1080,13]]],["amd radeon r4e","4",0,[[3840,2160,6]]],["amd radeon r5","5",0,[[1024,768,38],[1360,768,25],[1366,768,21],[1280,1024,33],[1920,1080,14],[3200,1800,7]]],["amd radeon r5 220","5",0,[[1366,768,19],[1920,1080,12]]],["amd radeon r5 230","5",0,[[1920,1080,21]]],["amd radeon r5 235","5",0,[[1920,1080,17]]],["amd radeon r5 240","5",0,[[1280,1024,34],[1920,1080,24]]],["amd radeon r5 340","5",0,[[1920,1080,27]]],["amd radeon r5 340x","5",0,[[1920,1080,31]]],["amd radeon r5 430","5",0,[[1280,1024,31],[1680,1050,54],[1920,1080,54]]],["amd radeon r5 435","5",0,[[1920,1080,30]]],["amd radeon r5 m200","5",0,[[1600,900,45],[1920,1080,20]]],["amd radeon r5 m200 / hd 8500m","5",0,[[1366,768,31],[1920,1080,24]]],["amd radeon r5 m230","5",0,[[1366,768,37]]],["amd radeon r5 m240","5",0,[[1366,768,42],[1920,1080,23]]],["amd radeon r5 m255","5",0,[[1366,768,59],[1600,900,33]]],["amd radeon r5 m315","5",0,[[1366,768,45]]],["amd radeon r5 m320","5",0,[[1920,1080,19]]],["amd radeon r5 m330","5",0,[[1366,768,27],[1920,1080,26]]],["amd radeon r5 m335","5",0,[[1366,768,55],[1920,1080,19]]],["amd radeon r5 m420","5",0,[[1366,768,49]]],["amd radeon r5 m430","5",0,[[1366,768,36],[1920,1080,20]]],["amd radeon r5 m435","5",0,[[1920,1080,41],[2560,1440,67]]],["amd radeon r5 m445","5",0,[[1920,1080,32]]],["amd radeon r5e","5",0,[[1600,768,14],[1920,1080,16]]],["amd radeon r6","6",0,[[1366,768,30],[1280,1024,23],[1920,1080,12]]],["amd radeon r6 m255dx","6",0,[[1366,768,25]]],["amd radeon r6 m340dx","6",0,[[1366,768,31],[1920,1080,15]]],["amd radeon r6e","6",0,[[3840,2160,5]]],["amd radeon r7","7",0,[[1366,768,35],[1280,1024,31],[1680,1050,39],[1920,1080,12],[1920,1200,16],[2560,1080,15],[2560,1440,21],[3840,2160,8]]],["amd radeon r7 200","7",0,[[1280,1024,45],[1920,1080,120]]],["amd radeon r7 200 series","7",0,[[1920,1080,43]]],["amd radeon r7 240","7",0,[[1920,1080,29]]],["amd radeon r7 240 + hd 8570d dual","7",0,[[1920,1080,43]]],["amd radeon r7 250","7",0,[[1920,1080,49]]],["amd radeon r7 250e","7",0,[[1920,1080,60]]],["amd radeon r7 250x","7",0,[[1920,1080,60]]],["amd radeon r7 260x","7",0,[[1920,1080,56]]],["amd radeon r7 260x/360","7",0,[[1920,1200,102]]],["amd radeon r7 350","7",0,[[1024,768,60],[1280,1024,79],[1920,1080,59]]],["amd radeon r7 350x","7",0,[[1920,1080,50]]],["amd radeon r7 360","7",0,[[1920,1048,60],[1920,1080,102]]],["amd radeon r7 360 / r9 360","7",0,[[1920,1080,60]]],["amd radeon r7 370","7",0,[[1600,900,60],[1920,1080,75]]],["amd radeon r7 370 / r9 270","7",0,[[1920,1080,74]]],["amd radeon r7 370 / r9 270x/370","7",0,[[1600,900,115],[1920,1080,60]]],["amd radeon r7 370 / r9 270x/370x","7",0,[[1920,1080,115]]],["amd radeon r7 370 series","7",0,[[1920,1080,212],[3840,2160,60]]],["amd radeon r7 430","7",0,[[1920,1080,55],[3840,2160,10]]],["amd radeon r7 450","7",0,[[1920,1080,60]]],["amd radeon r7 a360","7",0,[[1920,1080,28]]],["amd radeon r7 graphics + hd 7700 dual","7",0,[[1600,1200,72]]],["amd radeon r7 graphics + r5 340 dual","7",0,[[1920,1080,47]]],["amd radeon r7 graphics + r7 200 dual","7",0,[[1920,1080,45],[1920,1200,47]]],["amd radeon r7 graphics + r7 350 dual","7",0,[[1919,1080,60]]],["amd radeon r7 m260","7",0,[[1600,900,44],[1920,1080,13]]],["amd radeon r7 m260dx","7",0,[[1366,768,46],[1920,1080,18]]],["amd radeon r7 m260x","7",0,[[1920,1080,29]]],["amd radeon r7 m265","7",0,[[1366,768,48],[1920,1080,27]]],["amd radeon r7 m270","7",0,[[1920,1080,31],[3840,2160,10]]],["amd radeon r7 m340","7",0,[[1366,768,60],[1920,1080,32]]],["amd radeon r7 m350","7",0,[[3840,2160,12]]],["amd radeon r7 m360","7",0,[[1366,768,40],[1920,1080,22]]],["amd radeon r7 m370","7",0,[[1920,1080,24]]],["amd radeon r7 m440","7",0,[[1920,1080,39]]],["amd radeon r7 m445","7",0,[[1920,1080,36]]],["amd radeon r7 m460","7",0,[[1919,1080,24],[1920,1080,29]]],["amd radeon r7 m520","7",0,[[1919,1080,17]]],["amd radeon r7 series / hd 9000","7",0,[[1920,1080,71],[2560,1080,59]]],["amd radeon r7e","7",0,[[1024,768,41]]],["amd radeon r8 m350dx","8",0,[[1366,768,30]]],["amd radeon r8 m365dx","8",0,[[1920,1080,28]]],["amd radeon r8 m435dx","8",0,[[1920,1080,22]]],["amd radeon r8 m445dx","8",0,[[1366,768,38],[1920,1080,27]]],["amd radeon r8 m535dx","8",0,[[1366,768,55]]],["amd radeon r9","9",0,[[1920,1080,60]]],["amd radeon r9 200","9",0,[[1920,1080,60]]],["amd radeon r9 200 / hd 7900","9",0,[[1920,1080,250]]],["amd radeon r9 255","9",0,[[1600,900,52],[1920,1080,51]]],["amd radeon r9 260","9",0,[[1920,1080,16]]],["amd radeon r9 270","9",0,[[1280,1024,60],[1920,1080,60]]],["amd radeon r9 270 1024sp","9",0,[[1920,1080,135]]],["amd radeon r9 270x","9",0,[[1920,1080,30]]],["amd radeon r9 280","9",0,[[1920,1080,75],[1920,1200,428],[2560,1440,60]]],["amd radeon r9 280,","9",0,[[5120,2880,39]]],["amd radeon r9 280x","9",0,[[1920,1080,137]]],["amd radeon r9 285","9",0,[[1920,1080,60],[1920,1200,129]]],["amd radeon r9 290","9",0,[[1920,1080,60]]],["amd radeon r9 290x","9",0,[[1920,1080,60],[2560,1440,60],[3840,2160,118]]],["amd radeon r9 300","9",0,[[1920,1080,59]]],["amd radeon r9 350","9",0,[[1920,1200,63]]],["amd radeon r9 360","9",0,[[1600,900,83],[1920,1080,60],[2560,1440,59]]],["amd radeon r9 370","9",0,[[1680,1050,205],[1920,1080,60],[3840,2160,49]]],["amd radeon r9 370x","9",0,[[1920,1080,60]]],["amd radeon r9 380","9",0,[[1920,1080,41],[2560,1440,75]]],["amd radeon r9 380x","9",0,[[2560,1600,60]]],["amd radeon r9 390","9",0,[[1920,1080,60],[2560,1440,60]]],["amd radeon r9 390x","9",0,[[2560,1440,60],[3840,2160,60]]],["amd radeon r9 a375","9",0,[[1920,1080,28]]],["amd radeon r9 fury","9",0,[[1920,1080,75],[3840,2160,133]]],["amd radeon r9 fury / nano","9",0,[[1920,1200,155]]],["amd radeon r9 m200x","9",0,[[1366,768,104],[1920,1080,60]]],["amd radeon r9 m265x","9",0,[[1920,1080,33]]],["amd radeon r9 m270x","9",0,[[1600,900,60],[1920,1080,68]]],["amd radeon r9 m275","9",0,[[1920,1080,29]]],["amd radeon r9 m275x","9",0,[[1920,1080,20]]],["amd radeon r9 m280x","9",0,[[1920,1080,60],[2560,1440,25]]],["amd radeon r9 m290","9",0,[[5120,2880,33]]],["amd radeon r9 m290x","9",0,[[1920,1080,60],[3840,2160,61],[5120,2880,33]]],["amd radeon r9 m295x","9",0,[[3840,2160,33],[5120,2880,36]]],["amd radeon r9 m295x mac","9",0,[[5120,2880,42]]],["amd radeon r9 m295x mac edition / r9 380x","9",0,[[1920,1080,128]]],["amd radeon r9 m360","9",0,[[1920,1080,60],[3840,2160,26]]],["amd radeon r9 m370x","9",0,[[2560,1440,30],[2880,1800,27]]],["amd radeon r9 m370x opengl engine","9",0,[[5120,2880,14]]],["amd radeon r9 m375","9",0,[[1920,1080,29]]],["amd radeon r9 m375x","9",0,[[1920,1080,60],[3840,2160,22]]],["amd radeon r9 m380","9",0,[[1920,1080,50],[3840,2160,8],[5120,2880,9]]],["amd radeon r9 m380 opengl engine","9",0,[[5120,2880,15]]],["amd radeon r9 m385","9",0,[[1920,1080,58]]],["amd radeon r9 m385x","9",0,[[1920,1080,60]]],["amd radeon r9 m390","9",0,[[5119,2879,29],[5120,2880,21],[5760,3240,32]]],["amd radeon r9 m390 opengl engine","9",0,[[5120,2880,27]]],["amd radeon r9 m390x","9",0,[[1920,1080,140]]],["amd radeon r9 m395","9",0,[[2560,1440,59],[5120,2880,19]]],["amd radeon r9 m395 opengl engine","9",0,[[5120,2880,38]]],["amd radeon r9 m395x","9",0,[[3840,2160,58],[5120,2880,36]]],["amd radeon r9 m395x opengl engine","9",0,[[5120,2880,35]]],["amd radeon r9 m470","9",0,[[3840,2160,29]]],["amd radeon r9 m470x","9",0,[[1920,1080,60]]],["amd radeon r9-290x","9",0,[[1920,1080,60]]],["amd radeon renoir graphics d1","1",0,[[1366,768,60]]],["amd radeon rro 580x","580",0,[[5120,2880,59]]],["amd radeon rx 460","460",0,[[1920,1080,55],[2560,1080,60],[3840,2160,31]]],["amd radeon rx 460 / pro 450/455/460/555/555x/560/560x","460",0,[[3440,1440,93]]],["amd radeon rx 460 / pro 450/455/460/560","460",0,[[1920,1080,72]]],["amd radeon rx 470","470",0,[[1280,1024,73],[1920,1080,58],[1920,1200,147],[3840,2160,51]]],["amd radeon rx 470 opengl engine","470",0,[[2560,1440,60]]],["amd radeon rx 475m","475",0,[[1920,1080,60]]],["amd radeon rx 480","480",0,[[1400,1050,267],[1920,1080,60],[2560,1080,71]]],["amd radeon rx 480 opengl engine","480",0,[[1920,1080,60]]],["amd radeon rx 5300m","5300",0,[[1920,1080,60],[3840,2160,60]]],["amd radeon rx 540","540",0,[[1919,1080,52],[1920,1080,36]]],["amd radeon rx 550","550",0,[[1280,1024,135],[1920,1080,60],[1920,1200,60],[6016,3384,15]]],["amd radeon rx 550 640sp / rx 560","550",0,[[1920,1080,60]]],["amd radeon rx 5500","5500",0,[[1920,1080,139]]],["amd radeon rx 5500 / pro 5500m","5500",0,[[1920,1080,60],[2560,1440,227]]],["amd radeon rx 5500 xt","5500",0,[[1920,1080,239]]],["amd radeon rx 5500m","5500",0,[[1920,1048,144],[1920,1080,144],[3840,2160,60]]],["amd radeon rx 550x","550",0,[[1920,1080,52]]],["amd radeon rx 560","560",0,[[1920,1080,60],[1920,1200,42],[2560,1440,60]]],["amd radeon rx 560 [baffin]","560",0,[[1920,1080,60]]],["amd radeon rx 5600 oem/5600 xt / 5700 xt","5600",0,[[1920,1080,360],[2560,1440,164]]],["amd radeon rx 5600 xt","5600",0,[[1920,1080,75]]],["amd radeon rx 5600m","5600",0,[[1920,1080,144]]],["amd radeon rx 560d","560",0,[[2560,1080,60]]],["amd radeon rx 560x","560",0,[[1920,1080,115],[3840,2160,35]]],["amd radeon rx 570","570",0,[[1920,1080,60],[3072,1728,60]]],["amd radeon rx 570 opengl engine","570",0,[[1920,1080,226]]],["amd radeon rx 5700","5700",0,[[1920,1080,144]]],["amd radeon rx 5700 / 5700 xt","5700",0,[[3840,2160,201]]],["amd radeon rx 5700 xt","5700",0,[[1920,1080,464],[3840,2160,60],[6016,3384,34]]],["amd radeon rx 5700 xt 50th anniversary","5700",0,[[2560,1440,144],[3840,1600,60],[3840,2160,222],[5120,2880,60]]],["amd radeon rx 5700xt","5700",0,[[1920,1080,369]]],["amd radeon rx 580","580",0,[[1920,1080,60],[1920,1200,97],[2560,1440,60],[3840,2160,60]]],["amd radeon rx 580 2048sp","580",0,[[1920,1080,60]]],["amd radeon rx 580 opengl engine","580",0,[[1920,1080,145]]],["amd radeon rx 580 special","580",0,[[2560,1440,60]]],["amd radeon rx 580x","580",0,[[1920,1200,60],[3840,2160,79]]],["amd radeon rx 590","590",0,[[1920,1080,75],[2560,1440,164],[3584,2240,60]]],["amd radeon rx 640","640",0,[[1920,1080,39]]],["amd radeon rx 6500 xt","6500",0,[[1920,1080,60]]],["amd radeon rx 6600","6600",0,[[1920,1080,433],[3840,2160,57]]],["amd radeon rx 6600 xt","6600",0,[[1920,1080,60]]],["amd radeon rx 6600 xt/6600m","6600",0,[[2560,1440,60]]],["amd radeon rx 6600m","6600",0,[[1920,1080,139]]],["amd radeon rx 6700 xt","6700",0,[[1920,1080,451]]],["amd radeon rx 6700 xt / 6800m","6700",0,[[2560,1440,144]]],["amd radeon rx 6700m","6700",0,[[1920,1080,240]]],["amd radeon rx 6800","6800",0,[[2560,1440,564],[3840,2160,60]]],["amd radeon rx 6800 xt","6800",0,[[2560,1440,446],[3440,1440,144],[3840,2160,60]]],["amd radeon rx 6800 xt / 6900 xt","6800",0,[[2560,1440,239]]],["amd radeon rx 6800 xt 16gb","6800",0,[[6400,2666,60]]],["amd radeon rx 6800m","6800",0,[[1920,1080,300]]],["amd radeon rx 6900 xt","6900",0,[[3840,2160,60]]],["amd radeon rx rx 560","560",0,[[1920,1080,60]]],["amd radeon rx vega","rx",0,[[1920,1080,39]]],["amd radeon rx vega 10","10",0,[[1920,1080,38]]],["amd radeon rx vega 11","11",0,[[1920,1080,35]]],["amd radeon rx vega 56","56",0,[[1920,1080,144],[3440,1440,60],[3840,2160,60]]],["amd radeon rx vega 56 8gb","56",0,[[2560,1600,60]]],["amd radeon rx vega 56 opengl engine","56",0,[[2560,1440,60]]],["amd radeon rx vega 64","64",0,[[2560,1440,518]]],["amd radeon rx vega 64 8gb","64",0,[[2560,1440,60]]],["amd radeon rx vega 64 opengl engine","64",0,[[3840,2160,119]]],["amd radeon rx vega 64.1","64",0,[[6016,3384,60]]],["amd radeon rx vega 8","8",0,[[1920,1080,53]]],["amd radeon rx vega m gh","rxm",0,[[1920,1080,60],[2560,1440,60],[3840,2160,51]]],["amd radeon rx vega m gl","rxm",0,[[2560,1440,567],[3840,2160,59]]],["amd radeon rx vega11","11",0,[[2496,1664,30]]],["amd radeon rx460","460",0,[[1920,1080,60]]],["amd radeon rx480","480",0,[[1920,1080,102],[2560,1080,71]]],["amd radeon rx540","540",0,[[2400,1800,37]]],["amd radeon rx550","550",0,[[1920,1080,60]]],["amd radeon rx560","560",0,[[1920,1080,93]]],["amd radeon rx5600","5600",0,[[3840,2160,129]]],["amd radeon rx570","570",0,[[5120,2880,59]]],["amd radeon rx5700","5700",0,[[1920,1080,60]]],["amd radeon rx580","580",0,[[1920,1080,60]]],["amd radeon rx590 gme","590",0,[[1920,1080,112]]],["amd radeon rx6600xt","6600",0,[[3840,2160,60]]],["amd radeon sky 500","500",0,[[4096,2160,34]]],["amd radeon vega","",0,[[5120,2880,32]]],["amd radeon vega 10","10",0,[[1920,1080,44]]],["amd radeon vega 10 mobile","10",0,[[1920,1080,30]]],["amd radeon vega 11","11",0,[[1280,1024,60],[1920,1080,60],[3840,2160,17]]],["amd radeon vega 2","2",0,[[1366,768,30]]],["amd radeon vega 3","3",0,[[1440,900,44],[1920,1080,29],[3840,2160,8]]],["amd radeon vega 3 mobile","3",0,[[1920,1080,30]]],["amd radeon vega 56","56",0,[[2560,1440,144]]],["amd radeon vega 6","6",0,[[1366,768,61],[1920,1080,23]]],["amd radeon vega 64","64",0,[[6016,3384,35]]],["amd radeon vega 64 lc","64",0,[[2560,1080,60]]],["amd radeon vega 8","8",0,[[1920,1080,35],[2560,1440,24],[4096,2160,15]]],["amd radeon vega 8 mobile","8",0,[[1920,1080,36]]],["amd radeon vega 9","9",0,[[2496,1663,32],[2496,1664,39]]],["amd radeon vega fe","fe",0,[[1920,1080,120],[2560,1440,60]]],["amd radeon vega frontier","",0,[[1920,1080,120],[3840,2160,60]]],["amd radeon vega frontier edition opengl engine","",0,[[3440,1440,60]]],["amd radeon vega series / radeon vega mobile","",0,[[1920,1080,67]]],["amd radeon vii","vii",0,[[1920,1080,468],[2560,1440,60],[3840,2160,60]]],["amd radeont 540x","540",0,[[1920,1080,74],[3840,2160,22]]],["amd radeont rx 5300","5300",0,[[1920,1080,60]]],["amd radeont rx 5500m","5500",0,[[1920,1080,303]]],["amd radeont rx 560x","560",0,[[1920,1080,60]]],["amd renoir","",0,[[1920,1080,60]]],["amd rx 480","480",0,[[1680,1050,119]]],["amd rx 560","560",0,[[5120,2880,37]]],["amd rx 5700xt","5700",0,[[3840,2160,60]]],["amd rx 580","580",0,[[1920,1200,60],[5120,2880,60]]],["amd rx 590","590",0,[[5120,2880,60]]],["amd rx vega 64","64",0,[[1920,1080,60]]],["amd rx xxx","xxx",0,[[1920,1080,60],[2560,1440,144]]],["amd saphire radeon rx 580","580",0,[[1920,1080,57]]],["amd sapphire hd 5770","5770",0,[[1440,900,60]]],["amd sapphire nitro+ rx 6800","6800",0,[[1920,1080,75]]],["amd sapphire radeon hd6870","6870",0,[[1680,1050,60]]],["amd sapphire radeon rx 560","560",0,[[1280,1024,60]]],["amd sapphire radeon rx vega 64 8gb","64",0,[[2560,1440,144]]],["amd tonga pro gl [firepro w7100]","7100",0,[[1920,1200,127]]],["amd video controller","",0,[[1919,1079,60],[1920,1080,291]]],["intel radeong 0.4 on amd bonaire","0",0,[[1920,1200,92]]],["intel radeong 0.4 on amd cape verde","0",0,[[1920,1200,73]]],["intel radeong 0.4 on amd polaris10","0",0,[[3840,2160,108]]],["intel radeong 0.4 on amd tonga","0",0,[[1920,1080,124]]],["radeong 0.4 on amd polaris10","0",0,[[3840,2160,109]]],["radeong 0.4 on amd tahiti","0",0,[[1920,1080,223]]]]\')},732:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["apple a14","14",0,[[2704,1756,120]]],["apple m1","1",0,[[2880,1800,60]]],["apple m1 max","1",0,[[3456,2234,120]]],["apple m1 pro","1",0,[[3024,1964,120]]],["apple paravirtual device","",0,[[1024,768,30]]]]\')},405:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["intel geforce gtx 960","960",0,[[1920,1080,26]]],["nvidia asus geforce gt 430","430",0,[[1366,768,35]]],["nvidia asus geforce gt 440","440",0,[[1920,1080,28]]],["nvidia asus geforce gt 520","520",0,[[1680,1050,12]]],["nvidia asus geforce gt 610","610",0,[[1920,1200,15]]],["nvidia asus geforce gt 630","630",0,[[1680,1050,41]]],["nvidia asus geforce gt 640","640",0,[[2560,1440,34]]],["nvidia asus geforce gt 710","710",0,[[1920,1080,31]]],["nvidia asus geforce gt 730","730",0,[[2560,1080,28],[3840,2160,12]]],["nvidia asus geforce gts 450","450",0,[[1920,1080,54]]],["nvidia asus geforce gtx 1060","1060",0,[[3840,2160,38]]],["nvidia asus geforce gtx 1080","1080",0,[[2560,1440,120]]],["nvidia asus geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia asus geforce gtx 480","480",0,[[1920,1080,59]]],["nvidia asus geforce gtx 550 ti","550",0,[[1920,1080,57]]],["nvidia asus geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia asus geforce gtx 560 se","560",0,[[1920,1080,59]]],["nvidia asus geforce gtx 560 ti","560",0,[[1680,1050,58]]],["nvidia asus geforce gtx 570","570",0,[[1280,1024,74]]],["nvidia asus geforce gtx 570 hd","570",0,[[1920,1080,60]]],["nvidia asus geforce gtx 580","580",0,[[1920,1200,59]]],["nvidia asus geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia asus geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia asus geforce gtx 750 ti","750",0,[[1360,768,59],[1920,1080,118]]],["nvidia asus geforce gtx 760","760",0,[[1920,1080,60],[1920,1200,60]]],["nvidia asus geforce gtx 770","770",0,[[1920,1080,60]]],["nvidia asus geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia asus geforce gtx 950","950",0,[[1920,1080,60]]],["nvidia asus geforce gtx 960","960",0,[[1920,1080,60],[2560,1600,117]]],["nvidia asus geforce gtx 970","970",0,[[2560,1600,60]]],["nvidia asus geforce gtx 980 ti","980",0,[[2560,1440,131]]],["nvidia colorful geforce gtx 960","960",0,[[2560,1440,60]]],["nvidia elitegroup geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia evga geforce gt 545","545",0,[[1920,1080,37]]],["nvidia evga geforce gt 640","640",0,[[1366,768,60]]],["nvidia evga geforce gt 710","710",0,[[1680,1050,36],[1920,1080,29]]],["nvidia evga geforce gt 730","730",0,[[1600,900,59]]],["nvidia evga geforce gt 740","740",0,[[1280,1024,45]]],["nvidia evga geforce gtx 1050 ti","1050",0,[[2560,1440,60],[4096,2304,58]]],["nvidia evga geforce gtx 1070","1070",0,[[5120,2880,60]]],["nvidia evga geforce gtx 1080 ti","1080",0,[[1920,1200,60]]],["nvidia evga geforce gtx 560 ti","560",0,[[1680,1050,59]]],["nvidia evga geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia evga geforce gtx 580","580",0,[[2560,1440,60]]],["nvidia evga geforce gtx 650","650",0,[[1920,1200,87],[2560,1600,43]]],["nvidia evga geforce gtx 650 ti","650",0,[[1680,1050,116],[2560,1440,55]]],["nvidia evga geforce gtx 650 ti boost","650",0,[[1920,1080,56]]],["nvidia evga geforce gtx 660 ti","660",0,[[1920,1200,60]]],["nvidia evga geforce gtx 680","680",0,[[1600,1200,60]]],["nvidia evga geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia evga geforce gtx 760","760",0,[[1920,1080,119],[1920,1200,60]]],["nvidia evga geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia evga geforce gtx 960","960",0,[[1920,1080,60],[2560,1440,115]]],["nvidia evga geforce gtx 970","970",0,[[1920,1080,120]]],["nvidia evga geforce gtx 980","980",0,[[3440,1440,60]]],["nvidia evga geforce gtx 980 ti","980",0,[[1920,1080,60]]],["nvidia gainward geforce gt 630","630",0,[[1920,1080,28]]],["nvidia gainward geforce gts 450","450",0,[[1920,1080,55]]],["nvidia gainward geforce gtx 460","460",0,[[1920,1080,58]]],["nvidia gainward geforce gtx 550 ti","550",0,[[1280,1024,67]]],["nvidia gainward geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia gainward geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia gainward geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia geforce 210","210",0,[[1920,1080,8]]],["nvidia geforce 410m","410",0,[[1366,768,25],[1600,900,19]]],["nvidia geforce 510","510",0,[[1280,960,20]]],["nvidia geforce 605","605",0,[[1768,992,17],[1920,1080,15]]],["nvidia geforce 610m","610",0,[[1366,768,26]]],["nvidia geforce 610m/710m/810m/820m / gt 620m/625m/630m/720m","610",0,[[1366,768,51]]],["nvidia geforce 615","615",0,[[1920,1080,21]]],["nvidia geforce 705m","705",0,[[1920,1080,18]]],["nvidia geforce 710a","710",0,[[1920,1080,32]]],["nvidia geforce 710m","710",0,[[1366,768,55]]],["nvidia geforce 730a","730",0,[[1920,1080,37]]],["nvidia geforce 800m","800",0,[[1920,1080,18]]],["nvidia geforce 810m","810",0,[[1366,768,44],[1920,1080,31]]],["nvidia geforce 820a","820",0,[[1920,1080,28]]],["nvidia geforce 820m","820",0,[[1366,768,57],[1920,1080,23]]],["nvidia geforce 830a","830",0,[[1920,1080,53]]],["nvidia geforce 830m","830",0,[[1366,768,60]]],["nvidia geforce 8400 gs","8400",0,[[1680,1050,4]]],["nvidia geforce 8400 gs rev. 3","8400",0,[[1920,1080,4]]],["nvidia geforce 840a","840",0,[[1920,1080,56]]],["nvidia geforce 840m","840",0,[[1920,1080,56]]],["nvidia geforce 845m","845",0,[[1920,1080,59]]],["nvidia geforce 8600 gt","8600",1,[[1920,1200,-1]]],["nvidia geforce 8600 gts","8600",1,[[1920,1080,-1]]],["nvidia geforce 910m","910",0,[[1366,768,58],[1600,900,45]]],["nvidia geforce 920m","920",0,[[1366,768,60]]],["nvidia geforce 920mx","920",0,[[1366,768,60],[1920,1080,60]]],["nvidia geforce 9300 / nforce 730i","9300",0,[[1920,1080,6]]],["nvidia geforce 930a","930",0,[[1920,1080,55]]],["nvidia geforce 930m","930",0,[[1366,768,60]]],["nvidia geforce 930mx","930",0,[[1366,768,89],[1920,1080,59]]],["nvidia geforce 9400 gt","9400",1,[[1366,768,-1]]],["nvidia geforce 940a","940",0,[[1920,1080,58]]],["nvidia geforce 940m","940",0,[[1920,1080,54]]],["nvidia geforce 940mx","940",0,[[1920,1080,60]]],["nvidia geforce 945m","945",0,[[1920,1080,59]]],["nvidia geforce 9600 gt","9600",0,[[1920,1200,2]]],["nvidia geforce 9600m gt","9600",1,[[1440,900,-1]]],["nvidia geforce 9800 gt","9800",0,[[1920,1200,52]]],["nvidia geforce 9800 gtx / 9800 gtx+","9800",0,[[1280,1024,59]]],["nvidia geforce gpu","gpu",0,[[3000,2000,36]]],["nvidia geforce gt 1010","1010",0,[[1920,1080,135]]],["nvidia geforce gt 1030","1030",0,[[1920,1080,60]]],["nvidia geforce gt 1030 opengl engine","1030",0,[[6720,3780,15]]],["nvidia geforce gt 120","120",1,[[1920,1080,-1]]],["nvidia geforce gt 240","240",0,[[1366,768,32]]],["nvidia geforce gt 320m","320",0,[[1366,768,26]]],["nvidia geforce gt 415m","415",0,[[1366,768,19]]],["nvidia geforce gt 420","420",0,[[1024,768,33],[1920,1080,20]]],["nvidia geforce gt 420m","420",0,[[1366,768,28]]],["nvidia geforce gt 425m","425",0,[[1366,768,55],[1600,900,28]]],["nvidia geforce gt 430","430",0,[[1600,1200,16],[1920,1080,28]]],["nvidia geforce gt 435m","435",0,[[1366,768,53],[1920,1080,22]]],["nvidia geforce gt 440","440",0,[[1280,1024,51],[1680,1050,38],[1920,1080,45]]],["nvidia geforce gt 445m","445",0,[[1600,900,53]]],["nvidia geforce gt 520","520",0,[[1440,900,19],[1920,1080,17]]],["nvidia geforce gt 520m","520",0,[[1366,768,29]]],["nvidia geforce gt 520mx","520",0,[[1366,768,35]]],["nvidia geforce gt 525m","525",0,[[1366,768,28],[1600,900,22]]],["nvidia geforce gt 530","530",0,[[1920,1080,26]]],["nvidia geforce gt 540m","540",0,[[1366,768,38]]],["nvidia geforce gt 545","545",0,[[1920,1080,54]]],["nvidia geforce gt 550m","550",0,[[1600,900,44],[1920,1080,29]]],["nvidia geforce gt 555m","555",0,[[1920,1080,42]]],["nvidia geforce gt 555m/635m","555",0,[[1920,1080,36]]],["nvidia geforce gt 610","610",0,[[1280,1024,22],[1920,1080,15]]],["nvidia geforce gt 620","620",0,[[1920,1080,19]]],["nvidia geforce gt 620 oem","620",0,[[1920,1080,20],[1920,1200,20]]],["nvidia geforce gt 620m","620",0,[[1366,768,55],[1920,1080,30]]],["nvidia geforce gt 620m/630m/635m/640m le","620",0,[[1368,768,38]]],["nvidia geforce gt 625","625",0,[[1920,1080,18]]],["nvidia geforce gt 625m","625",0,[[1366,768,38]]],["nvidia geforce gt 630","630",0,[[1680,1050,36],[1920,1080,36],[1920,1200,30]]],["nvidia geforce gt 630 oem","630",0,[[1600,900,33]]],["nvidia geforce gt 630 opengl engine","630",0,[[1920,1080,33]]],["nvidia geforce gt 630 rev. 2","630",0,[[1920,1080,26]]],["nvidia geforce gt 630m","630",0,[[1366,768,57]]],["nvidia geforce gt 635","635",0,[[1920,1080,27]]],["nvidia geforce gt 635m","635",0,[[1366,768,47]]],["nvidia geforce gt 640","640",0,[[1920,1080,47]]],["nvidia geforce gt 640 oem","640",0,[[1920,1080,46],[2560,1440,35]]],["nvidia geforce gt 640 opengl engine","640",0,[[1280,1024,43]]],["nvidia geforce gt 640 rev. 2","640",0,[[1280,1024,60],[1920,1080,55]]],["nvidia geforce gt 640m","640",0,[[1366,768,82],[1600,900,59],[1920,1080,34]]],["nvidia geforce gt 640m le","640",0,[[1920,1080,49]]],["nvidia geforce gt 640m mac","640",0,[[1366,768,56],[1920,1080,20]]],["nvidia geforce gt 640m opengl engine","640",0,[[1920,1080,45]]],["nvidia geforce gt 645m","645",0,[[1366,768,60]]],["nvidia geforce gt 650m","650",0,[[1360,768,59],[1920,1080,58],[2560,1440,59]]],["nvidia geforce gt 650m mac","650",0,[[1440,900,56],[1920,1080,15],[2560,1440,19],[2880,1800,31]]],["nvidia geforce gt 650m opengl engine","650",0,[[1920,1080,56],[3840,2160,27]]],["nvidia geforce gt 705","705",0,[[1920,1080,11]]],["nvidia geforce gt 710","710",0,[[1920,1080,28]]],["nvidia geforce gt 710b","710",0,[[1920,1080,26]]],["nvidia geforce gt 710m","710",0,[[1366,768,46]]],["nvidia geforce gt 720","720",0,[[1920,1080,19],[2560,1440,16],[5120,2880,5]]],["nvidia geforce gt 720 opengl engine","720",0,[[2560,1600,20]]],["nvidia geforce gt 720m","720",0,[[1366,768,42]]],["nvidia geforce gt 730","730",0,[[1920,1080,54]]],["nvidia geforce gt 730a","730",0,[[1920,1080,23]]],["nvidia geforce gt 730m","730",0,[[1920,1080,43]]],["nvidia geforce gt 735m","735",0,[[1920,1080,39]]],["nvidia geforce gt 740","740",0,[[1920,1080,55],[3440,1440,23]]],["nvidia geforce gt 740 opengl engine","740",0,[[1920,1200,51]]],["nvidia geforce gt 740m","740",0,[[1366,768,60]]],["nvidia geforce gt 745m","745",0,[[1920,1080,55]]],["nvidia geforce gt 750m","750",0,[[1920,1080,57]]],["nvidia geforce gt 750m mac","750",0,[[1920,1080,58],[2880,1800,28]]],["nvidia geforce gt 755m","755",0,[[1920,1080,57]]],["nvidia geforce gt 755m mac","755",0,[[2560,1440,41]]],["nvidia geforce gt 755m opengl engine","755",0,[[2560,1440,51]]],["nvidia geforce gt 820m","820",0,[[1600,900,47]]],["nvidia geforce gts 250","250",0,[[1680,1050,53]]],["nvidia geforce gts 450","450",0,[[1360,768,60],[1680,1050,57],[1920,1080,55]]],["nvidia geforce gts 450 rev. 2","450",0,[[1920,1080,56]]],["nvidia geforce gtx 1050","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 3gb","1050",0,[[1280,1024,60]]],["nvidia geforce gtx 1050 mobile","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 opengl engine","1050",0,[[1920,1080,116]]],["nvidia geforce gtx 1050 ti","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 ti mobile","1050",0,[[1920,1080,298]]],["nvidia geforce gtx 1050 ti opengl engine","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 ti with max-q design","1050",0,[[1920,1080,268],[2560,1440,102],[3840,2160,60]]],["nvidia geforce gtx 1050 with max-q design","1050",0,[[1920,1080,60],[3840,2160,24]]],["nvidia geforce gtx 1060","1060",0,[[1920,1080,60],[3840,2160,59]]],["nvidia geforce gtx 1060 3gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 3gb opengl engine","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 5gb","1060",0,[[1920,1080,55]]],["nvidia geforce gtx 1060 6gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 6gb opengl engine","1060",0,[[1920,1080,75]]],["nvidia geforce gtx 1060 mobile","1060",0,[[1920,1080,422]]],["nvidia geforce gtx 1060 mobile 6gb","1060",0,[[1920,1080,120]]],["nvidia geforce gtx 1060 with max-q design","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060se 3gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1070","1070",0,[[1920,1080,134]]],["nvidia geforce gtx 1070 a17","1070",0,[[1920,1080,60]]],["nvidia geforce gtx 1070 mobile","1070",0,[[1920,1080,467]]],["nvidia geforce gtx 1070 opengl engine","1070",0,[[1920,1080,143]]],["nvidia geforce gtx 1070 ti","1070",0,[[1920,1080,60],[6016,3384,59]]],["nvidia geforce gtx 1070 ti opengl engine","1070",0,[[1920,1080,75]]],["nvidia geforce gtx 1070 with max-q design","1070",0,[[1920,1080,448]]],["nvidia geforce gtx 1070 with maxq design","1070",0,[[1920,1080,60],[3840,2160,59]]],["nvidia geforce gtx 1080","1080",0,[[1920,1080,119],[2560,1440,326],[3840,2160,286]]],["nvidia geforce gtx 1080 mobile","1080",0,[[1920,1080,120]]],["nvidia geforce gtx 1080 opengl engine","1080",0,[[1920,1080,79]]],["nvidia geforce gtx 1080 ti","1080",0,[[1920,1080,120]]],["nvidia geforce gtx 1080 ti opengl engine","1080",0,[[1920,1080,127]]],["nvidia geforce gtx 1080 with max-q design","1080",0,[[1920,1080,144]]],["nvidia geforce gtx 1180","1180",0,[[3440,1440,60]]],["nvidia geforce gtx 1650","1650",0,[[1920,1080,380]]],["nvidia geforce gtx 1650 mobile / max-q","1650",0,[[1920,1080,292]]],["nvidia geforce gtx 1650 super","1650",0,[[1920,1080,433]]],["nvidia geforce gtx 1650 ti","1650",0,[[1920,1080,144],[3840,2400,59]]],["nvidia geforce gtx 1650 ti mobile","1650",0,[[1920,1080,144]]],["nvidia geforce gtx 1650 ti with max-q design","1650",0,[[1920,1080,60],[3839,2160,60]]],["nvidia geforce gtx 1650 with max-q design","1650",0,[[1920,1080,142],[3000,2000,60]]],["nvidia geforce gtx 1660","1660",0,[[1920,1080,144]]],["nvidia geforce gtx 1660 super","1660",0,[[1920,1080,60]]],["nvidia geforce gtx 1660 ti","1660",0,[[1920,1080,546],[3840,2160,60]]],["nvidia geforce gtx 1660 ti mobile","1660",0,[[1920,1080,451]]],["nvidia geforce gtx 1660 ti with max-q design","1660",0,[[1920,1080,144]]],["nvidia geforce gtx 280","280",0,[[1680,1050,56]]],["nvidia geforce gtx 295","295",0,[[1920,1080,56]]],["nvidia geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia geforce gtx 460 oem","460",0,[[1360,768,60],[1920,1080,60]]],["nvidia geforce gtx 460 opengl engine","460",0,[[1920,1080,59]]],["nvidia geforce gtx 460 se","460",0,[[1920,1080,56],[1920,1200,57]]],["nvidia geforce gtx 460 v2","460",0,[[1920,1080,60],[1920,1200,60],[2560,1600,55]]],["nvidia geforce gtx 460m","460",0,[[1920,1080,46]]],["nvidia geforce gtx 465","465",0,[[1920,1080,134],[1920,1200,59]]],["nvidia geforce gtx 470","470",0,[[1680,1050,60],[1920,1080,59]]],["nvidia geforce gtx 470m","470",0,[[1920,1200,55]]],["nvidia geforce gtx 480","480",0,[[1440,900,191],[1920,1080,115],[1920,1200,60]]],["nvidia geforce gtx 480 opengl engine","480",0,[[1600,1200,60]]],["nvidia geforce gtx 550 ti","550",0,[[1280,1024,58],[1920,1080,58]]],["nvidia geforce gtx 550 ti opengl engine","550",0,[[1920,1080,55]]],["nvidia geforce gtx 555","555",0,[[1920,1080,54]]],["nvidia geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia geforce gtx 560 se","560",0,[[1680,1050,52],[1920,1080,111]]],["nvidia geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia geforce gtx 560 ti 448 cores","560",0,[[1920,1080,60],[2560,1440,60]]],["nvidia geforce gtx 560 ti oem","560",0,[[1920,1080,176]]],["nvidia geforce gtx 560 ti opengl engine","560",0,[[1920,1080,48]]],["nvidia geforce gtx 560m","560",0,[[1920,1080,55]]],["nvidia geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia geforce gtx 570 opengl engine","570",0,[[1920,1080,60]]],["nvidia geforce gtx 570 rev. 2","570",0,[[1920,1080,60],[1920,1200,60]]],["nvidia geforce gtx 570m","570",0,[[1920,1080,125],[2560,1440,8]]],["nvidia geforce gtx 580","580",0,[[1920,1080,60]]],["nvidia geforce gtx 580 opengl engine","580",0,[[1680,1050,59]]],["nvidia geforce gtx 580m","580",0,[[1920,1080,60]]],["nvidia geforce gtx 590","590",0,[[1920,1080,59]]],["nvidia geforce gtx 645","645",0,[[1920,1080,57],[1920,1200,58]]],["nvidia geforce gtx 645 opengl engine","645",0,[[1920,1200,58]]],["nvidia geforce gtx 650","650",0,[[1920,1080,72]]],["nvidia geforce gtx 650 oem","650",0,[[1366,768,59]]],["nvidia geforce gtx 650 opengl engine","650",0,[[1920,1080,59]]],["nvidia geforce gtx 650 ti","650",0,[[1920,1080,60]]],["nvidia geforce gtx 650 ti boost","650",0,[[1280,1024,60],[1600,1200,187],[1920,1080,60]]],["nvidia geforce gtx 650 ti opengl engine","650",0,[[1920,1080,60]]],["nvidia geforce gtx 660","660",0,[[1920,1080,111]]],["nvidia geforce gtx 660 oem","660",0,[[1920,1080,59]]],["nvidia geforce gtx 660 ti","660",0,[[1920,1080,60]]],["nvidia geforce gtx 660 ti opengl engine","660",0,[[1280,1024,60]]],["nvidia geforce gtx 660m","660",0,[[1680,1050,36],[1920,1080,59]]],["nvidia geforce gtx 660m mac","660",0,[[2560,1440,2]]],["nvidia geforce gtx 660m opengl engine","660",0,[[2560,1440,36]]],["nvidia geforce gtx 670","670",0,[[1920,1080,100]]],["nvidia geforce gtx 670 opengl engine","670",0,[[1920,1080,60]]],["nvidia geforce gtx 670m","670",0,[[1920,1080,66]]],["nvidia geforce gtx 670mx","670",0,[[1920,1080,60]]],["nvidia geforce gtx 675m","675",0,[[1920,1080,60]]],["nvidia geforce gtx 675mx","675",0,[[1680,1050,60],[1920,1080,60],[2560,1440,55]]],["nvidia geforce gtx 675mx mac","675",0,[[2560,1440,36]]],["nvidia geforce gtx 675mx opengl engine","675",0,[[2560,1440,60]]],["nvidia geforce gtx 680","680",0,[[1920,1080,60]]],["nvidia geforce gtx 680 opengl engine","680",0,[[1920,1080,60]]],["nvidia geforce gtx 680m","680",0,[[1920,1080,39],[1920,1200,60]]],["nvidia geforce gtx 680m opengl engine","680",0,[[1920,1080,36]]],["nvidia geforce gtx 680mx","680",0,[[2560,1440,59]]],["nvidia geforce gtx 680mx opengl engine","680",0,[[2560,1440,59]]],["nvidia geforce gtx 690","690",0,[[1920,1080,60],[3840,2160,30]]],["nvidia geforce gtx 745","745",0,[[1920,1080,60],[2560,1600,29]]],["nvidia geforce gtx 750","750",0,[[1920,1080,60]]],["nvidia geforce gtx 750 opengl engine","750",0,[[1920,1200,58]]],["nvidia geforce gtx 750 ti","750",0,[[1920,1080,97]]],["nvidia geforce gtx 760","760",0,[[1920,1080,60],[1920,1200,116]]],["nvidia geforce gtx 760 oem","760",0,[[1920,1080,60]]],["nvidia geforce gtx 760 opengl engine","760",0,[[1920,1080,52]]],["nvidia geforce gtx 760 ti","760",0,[[1920,1080,60],[1920,1200,60]]],["nvidia geforce gtx 760 ti oem","760",0,[[1920,1200,60]]],["nvidia geforce gtx 760 ti opengl engine","760",0,[[1920,1080,60]]],["nvidia geforce gtx 760a","760",0,[[2560,1080,15]]],["nvidia geforce gtx 760m","760",0,[[1920,1080,60]]],["nvidia geforce gtx 765m","765",0,[[1920,1080,53],[2560,1440,57]]],["nvidia geforce gtx 765m by nick[d]vb","765",0,[[2560,1440,58]]],["nvidia geforce gtx 765m opengl engine","765",0,[[2560,1440,57]]],["nvidia geforce gtx 770","770",0,[[1920,1080,143],[2560,1440,203]]],["nvidia geforce gtx 770 opengl engine","770",0,[[1920,1080,60]]],["nvidia geforce gtx 770m","770",0,[[1920,1080,60],[2560,1440,59]]],["nvidia geforce gtx 770m by nick[d]vb","770",0,[[2560,1440,34]]],["nvidia geforce gtx 770m opengl engine","770",0,[[2560,1440,59]]],["nvidia geforce gtx 775m by idopt mac","775",0,[[2560,1440,56]]],["nvidia geforce gtx 775m mac","775",0,[[2560,1440,59]]],["nvidia geforce gtx 775m opengl engine","775",0,[[2560,1440,60]]],["nvidia geforce gtx 780","780",0,[[1920,1080,159]]],["nvidia geforce gtx 780 by st3phl3","780",0,[[3840,2160,30]]],["nvidia geforce gtx 780 mac","780",0,[[1680,1050,60],[1920,1080,60]]],["nvidia geforce gtx 780 rev. 2","780",0,[[1920,1080,144],[2560,1440,119],[3840,2160,58],[5120,2880,58]]],["nvidia geforce gtx 780 ti","780",0,[[1280,1024,120],[1920,1080,119]]],["nvidia geforce gtx 780 ti opengl engine","780",0,[[2560,1440,60]]],["nvidia geforce gtx 780m","780",0,[[1920,1080,60],[2560,1440,59]]],["nvidia geforce gtx 780m by nick[d]vb","780",0,[[1920,1080,59],[2560,1440,60]]],["nvidia geforce gtx 780m mac","780",0,[[2560,1440,60]]],["nvidia geforce gtx 780m opengl engine","780",0,[[2560,1440,60]]],["nvidia geforce gtx 850a","850",0,[[2560,1440,48]]],["nvidia geforce gtx 850m","850",0,[[1920,1080,60]]],["nvidia geforce gtx 860m","860",0,[[1920,1080,59]]],["nvidia geforce gtx 860m opengl engine","860",0,[[2560,1440,58]]],["nvidia geforce gtx 870m","870",0,[[1920,1080,60],[2560,1440,102]]],["nvidia geforce gtx 880m","880",0,[[1920,1080,60],[2560,1440,74]]],["nvidia geforce gtx 880m opengl engine","880",0,[[2560,1440,60]]],["nvidia geforce gtx 950","950",0,[[1920,1080,98]]],["nvidia geforce gtx 950 opengl engine","950",0,[[1920,1200,60]]],["nvidia geforce gtx 950a","950",0,[[1920,1080,60],[3840,2160,38]]],["nvidia geforce gtx 950m","950",0,[[1920,1080,114]]],["nvidia geforce gtx 960","960",0,[[1920,1080,60]]],["nvidia geforce gtx 960a","960",0,[[1920,1440,128]]],["nvidia geforce gtx 960m","960",0,[[1920,1080,119],[3840,2160,37]]],["nvidia geforce gtx 965m","965",0,[[1920,1080,195],[3000,2000,59],[3840,2160,41]]],["nvidia geforce gtx 965m opengl engine","965",0,[[2880,1620,55]]],["nvidia geforce gtx 970","970",0,[[1920,1080,143]]],["nvidia geforce gtx 970 opengl engine","970",0,[[2560,1600,60]]],["nvidia geforce gtx 970m","970",0,[[1920,1080,60]]],["nvidia geforce gtx 980","980",0,[[1920,1080,60],[3440,1440,294]]],["nvidia geforce gtx 980 ti","980",0,[[1920,1080,119],[2560,1440,456]]],["nvidia geforce gtx 980 ti opengl engine","980",0,[[1920,1080,60]]],["nvidia geforce gtx 980m","980",0,[[1920,1080,60],[3840,2160,104]]],["nvidia geforce gtx titan","gtx",0,[[1920,1080,119],[1920,1200,119],[2560,1440,60]]],["nvidia geforce gtx titan black","gtx",0,[[1680,1050,60],[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["nvidia geforce gtx titan black opengl engine","gtx",0,[[3840,2160,60]]],["nvidia geforce gtx titan opengl engine","gtx",0,[[2560,1440,60]]],["nvidia geforce gtx titan x","gtxx",0,[[1920,1080,144],[2560,1440,120],[2560,1600,60]]],["nvidia geforce gtx titan xp","gtxxp",0,[[2560,1440,60],[3440,1440,60]]],["nvidia geforce gtx titan z","gtxz",0,[[1440,900,59],[1920,1080,39],[3840,2160,60]]],["nvidia geforce gtx780m by nikey22","780",0,[[2560,1440,60]]],["nvidia geforce gtx870m by nikey22","870",0,[[2560,1440,60]]],["nvidia geforce gtx880m","880",0,[[1920,1080,60]]],["nvidia geforce gtx880m by nikey22","880",0,[[2560,1440,59]]],["nvidia geforce gtx880m opengl engine","880",0,[[2560,1440,59]]],["nvidia geforce mx110","110",0,[[1366,768,61],[1920,1080,57]]],["nvidia geforce mx130","130",0,[[1920,1080,60]]],["nvidia geforce mx150","150",0,[[1920,1080,113]]],["nvidia geforce mx230","230",0,[[1920,1080,60]]],["nvidia geforce mx250","250",0,[[1920,1080,60]]],["nvidia geforce mx330","330",0,[[1920,1080,60],[3840,2160,51]]],["nvidia geforce mx350","350",0,[[1920,1080,60]]],["nvidia geforce mx450","450",0,[[1920,1080,60]]],["nvidia geforce pre-release graphics device","pre",0,[[2560,1440,60]]],["nvidia geforce pre-release tesla c2075 opengl engine","2075",0,[[1600,900,59]]],["nvidia geforce pre-release titan x opengl engine","prex",0,[[1920,1080,60]]],["nvidia geforce pre-release titan xp collectors edition opengl e","prexpe",0,[[1920,1080,59]]],["nvidia geforce pre-release titan xp opengl engine","prexp",0,[[2560,1440,60]]],["nvidia geforce rtx 2060","2060",0,[[1920,1080,512]]],["nvidia geforce rtx 2060 max-q","2060",0,[[2560,1440,301]]],["nvidia geforce rtx 2060 mobile","2060",0,[[1920,1080,518]]],["nvidia geforce rtx 2060 rev. a","2060",0,[[3840,2160,257]]],["nvidia geforce rtx 2060 super","2060",0,[[1920,1080,645],[2560,1440,143]]],["nvidia geforce rtx 2060 with max-q design","2060",0,[[1920,1080,292],[1920,1200,60]]],["nvidia geforce rtx 2070","2070",0,[[1920,1080,60],[3840,2160,60]]],["nvidia geforce rtx 2070 mobile","2070",0,[[1920,1080,477]]],["nvidia geforce rtx 2070 mobile / max-q","2070",0,[[1920,1080,526]]],["nvidia geforce rtx 2070 mobile / max-q refresh","2070",0,[[1920,1080,143]]],["nvidia geforce rtx 2070 rev. a","2070",0,[[2560,1440,144]]],["nvidia geforce rtx 2070 super","2070",0,[[1920,1080,510]]],["nvidia geforce rtx 2070 super with max-q design","2070",0,[[1920,1080,300]]],["nvidia geforce rtx 2070 with max-q design","2070",0,[[1920,1080,240]]],["nvidia geforce rtx 2080","2080",0,[[1920,1080,632],[2560,1440,165]]],["nvidia geforce rtx 2080 mobile","2080",0,[[1920,1080,144]]],["nvidia geforce rtx 2080 rev. a","2080",0,[[2560,1440,143]]],["nvidia geforce rtx 2080 super","2080",0,[[1920,1080,601]]],["nvidia geforce rtx 2080 super mobile / max-q","2080",0,[[3840,2160,59]]],["nvidia geforce rtx 2080 super with max-q design","2080",0,[[1920,1080,300]]],["nvidia geforce rtx 2080 ti","2080",0,[[1920,1080,83]]],["nvidia geforce rtx 2080 ti rev. a","2080",0,[[1920,1080,403]]],["nvidia geforce rtx 2080 with max-q design","2080",0,[[1920,1080,476]]],["nvidia geforce rtx 3050","3050",0,[[1920,1080,60]]],["nvidia geforce rtx 3050 laptop gpu","3050",0,[[1920,1080,144]]],["nvidia geforce rtx 3050 ti laptop gpu","3050",0,[[1920,1080,144]]],["nvidia geforce rtx 3060","3060",0,[[1920,1080,674]]],["nvidia geforce rtx 3060 laptop gpu","3060",0,[[1920,1080,300]]],["nvidia geforce rtx 3060 lite hash rate","3060",0,[[1920,1080,60]]],["nvidia geforce rtx 3060 mobile / max-q","3060",0,[[1920,1080,435]]],["nvidia geforce rtx 3060 ti","3060",0,[[1920,1080,779]]],["nvidia geforce rtx 3070","3070",0,[[1920,1080,723],[2560,1440,294]]],["nvidia geforce rtx 3070 laptop gpu","3070",0,[[1920,1080,357]]],["nvidia geforce rtx 3070 mobile / max-q","3070",0,[[2560,1440,386]]],["nvidia geforce rtx 3070 ti","3070",0,[[1920,1080,60]]],["nvidia geforce rtx 3080","3080",0,[[1920,1080,726],[2560,1440,60],[3840,2160,60]]],["nvidia geforce rtx 3080 laptop gpu","3080",0,[[1920,1080,294],[2560,1440,244]]],["nvidia geforce rtx 3080 mobile / max-q 8gb/16gb","3080",0,[[1920,1080,293]]],["nvidia geforce rtx 3080 ti","3080",0,[[1920,1080,239],[2560,1440,60]]],["nvidia geforce rtx 3090","3090",0,[[2560,1440,60],[3840,2160,474]]],["nvidia geforce rtx t10-16","10",0,[[2560,1600,3]]],["nvidia geforce rtx t10-8","10",0,[[2560,1600,3]]],["nvidia gigabyte geforce gt 440","440",0,[[1280,1024,34]]],["nvidia gigabyte geforce gt 610","610",0,[[1920,1080,17]]],["nvidia gigabyte geforce gt 630","630",0,[[1920,1080,34]]],["nvidia gigabyte geforce gt 730","730",0,[[1280,1024,38]]],["nvidia gigabyte geforce gts 450","450",0,[[1280,1024,37]]],["nvidia gigabyte geforce gtx 1050 ti","1050",0,[[1920,1080,30]]],["nvidia gigabyte geforce gtx 460","460",0,[[1680,1050,60]]],["nvidia gigabyte geforce gtx 550 ti","550",0,[[1920,1080,57]]],["nvidia gigabyte geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 570 hd","570",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 580","580",0,[[1920,1200,60]]],["nvidia gigabyte geforce gtx 650","650",0,[[1680,1050,55]]],["nvidia gigabyte geforce gtx 650 ti","650",0,[[2560,1440,40]]],["nvidia gigabyte geforce gtx 660","660",0,[[1920,1080,31]]],["nvidia gigabyte geforce gtx 660 ti","660",0,[[5120,2880,29]]],["nvidia gigabyte geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 750","750",0,[[1920,1080,59]]],["nvidia gigabyte geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 760","760",0,[[3440,1440,17]]],["nvidia gigabyte geforce gtx 770","770",0,[[2560,1440,59]]],["nvidia gigabyte geforce gtx 780 ti","780",0,[[1920,1080,240]]],["nvidia gigabyte geforce gtx 960","960",0,[[1920,1080,142],[1920,1200,120]]],["nvidia gigabyte geforce gtx 970","970",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 980","980",0,[[2560,1440,60]]],["nvidia gigabyte geforce gtx 980 ti","980",0,[[1920,1080,60]]],["nvidia hp geforce gt 730","730",0,[[1920,1080,55]]],["nvidia inno3d geforce gtx660","3",0,[[2560,1440,107]]],["nvidia msi geforce gt 610","610",0,[[1920,1080,16]]],["nvidia msi geforce gt 630","630",0,[[1440,900,12]]],["nvidia msi geforce gt 635","635",0,[[1920,1080,30]]],["nvidia msi geforce gt 710","710",0,[[1920,1080,27]]],["nvidia msi geforce gt 730","730",0,[[1920,1080,53]]],["nvidia msi geforce gtx 1050 ti","1050",0,[[1920,1080,59]]],["nvidia msi geforce gtx 1060","1060",0,[[1920,1080,120]]],["nvidia msi geforce gtx 1070","1070",0,[[1920,1200,45]]],["nvidia msi geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia msi geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia msi geforce gtx 570 hd","570",0,[[1920,1200,60]]],["nvidia msi geforce gtx 580","580",0,[[2560,1440,60]]],["nvidia msi geforce gtx 650","650",0,[[2560,1080,52]]],["nvidia msi geforce gtx 650 ti","650",0,[[1920,1080,60]]],["nvidia msi geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia msi geforce gtx 660 ti","660",0,[[1680,1050,49]]],["nvidia msi geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia msi geforce gtx 745","745",0,[[1920,1080,55]]],["nvidia msi geforce gtx 760","760",0,[[1280,1024,30],[1920,1080,58]]],["nvidia msi geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia msi geforce gtx 950","950",0,[[1920,1080,59]]],["nvidia msi geforce gtx 960","960",0,[[1680,1050,120],[2560,1440,59]]],["nvidia msi geforce gtx 970","970",0,[[1680,1050,60]]],["nvidia msi geforce gtx 980","980",0,[[1920,1080,120],[3840,2160,60]]],["nvidia msi geforce gtx 980 ti","980",0,[[5120,2880,56]]],["nvidia null geforce 920a","920",0,[[1920,1080,25]]],["nvidia palit geforce gtx 650","650",0,[[1920,1080,49]]],["nvidia palit geforce gtx 650 ti","650",0,[[1920,1080,59]]],["nvidia palit geforce gtx 660","660",0,[[1920,1080,26]]],["nvidia pegatron geforce gt 420","420",0,[[1400,1050,25]]],["nvidia pny geforce gt 610","610",0,[[1280,1024,19]]],["nvidia pny geforce gtx 1060","1060",0,[[1920,1080,60]]],["nvidia pny geforce gtx 460","460",0,[[1360,768,59]]],["nvidia pny geforce gtx 550 ti","550",0,[[1920,1080,55]]],["nvidia pny geforce gtx 570 hd","570",0,[[1280,1024,72]]],["nvidia pny geforce gtx 580","580",0,[[1920,1200,59]]],["nvidia pny geforce gtx 680","680",0,[[2560,1080,120]]],["nvidia pny geforce gtx 750","750",0,[[1280,1024,60]]],["nvidia pny geforce gtx 970","970",0,[[2560,1440,60]]],["nvidia pny geforce gtx 980","980",0,[[1920,1080,120]]],["nvidia point of view geforce gtx 470","470",0,[[1920,1080,59]]],["nvidia point of view geforce gtx 660 ti","660",0,[[1680,1050,59]]],["nvidia sony geforce 410m","410",0,[[1366,768,24]]],["nvidia toshiba geforce gt 525m","525",0,[[1366,768,33]]],["nvidia zotac geforce gt 430","430",0,[[1600,900,32]]],["nvidia zotac geforce gt 610","610",0,[[1920,1080,15]]],["nvidia zotac geforce gt 630","630",0,[[1360,768,46]]],["nvidia zotac geforce gt 740","740",0,[[1280,1024,118]]],["nvidia zotac geforce gtx 460","460",0,[[1920,1080,59]]],["nvidia zotac geforce gtx 550 ti","550",0,[[1920,1080,42]]],["nvidia zotac geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 580","580",0,[[1920,1080,48]]],["nvidia zotac geforce gtx 650","650",0,[[1920,1080,44]]],["nvidia zotac geforce gtx 650 ti","650",0,[[1920,1080,58]]],["nvidia zotac geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 680","680",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 750","750",0,[[1680,1050,114],[1920,1080,60]]],["nvidia zotac geforce gtx 760","760",0,[[1920,1080,101]]],["nvidia zotac geforce gtx 770","770",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 960","960",0,[[2048,1152,60]]]]\')},178:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["intel","",0,[[4096,2304,12]]],["intel 0x496e74656c2048442047726170686963000732034343","0",0,[[1920,1080,22]]],["intel broxton-p hd","p",0,[[1920,1080,73]]],["intel cherryview hd","hd",0,[[1920,1080,16]]],["intel coffee lake uhd","uhd",0,[[1920,1080,49]]],["intel cometlake uhd graphics 630","630",0,[[2560,1440,40]]],["intel corporation 2nd gen core processor family integrated graphics controller","2",0,[[1366,768,25]]],["intel corporation 2nd generation core processor family integrated graphics controller","2",0,[[1600,900,28]]],["intel corporation 3rd gen core processor graphics controller","3",0,[[1366,768,20]]],["intel corporation 8th gen core processor gaussian mixture model","8",0,[[1366,768,17]]],["intel corporation atom processor z36xxx/z37xxx series graphics & display","36",0,[[1280,799,18],[1366,768,18]]],["intel corporation atom/celeron/pentium processor n4200 series integrated graphics controller","4200",0,[[1280,1024,28]]],["intel corporation atom/celeron/pentium processor x5-e8000 integrated graphics controller","5",0,[[1366,768,34]]],["intel corporation atom/celeron/pentium processor x5-e8000 series pci configuration registers","5",0,[[1920,1080,14]]],["intel corporation broadwell-u integrated","u",0,[[1920,1080,38]]],["intel corporation celeron n3350 n4200/atom e3900 series integrated graphics controller","3350",0,[[1680,1050,33]]],["intel corporation coffeelake-h gt2 [uhd graphics 630]","2",0,[[1920,1080,76]]],["intel corporation cometlake-h gt2 [uhd graphics]","2",0,[[3072,1728,29]]],["intel corporation cometlake-s gt2 [uhd graphics 630]","2",0,[[1920,1080,52]]],["intel corporation cometlake-u gt2 [uhd graphics]","2",0,[[1920,1080,39]]],["intel corporation device","",0,[[1920,1080,31]]],["intel corporation geminilake [uhd graphics 600]","600",0,[[1920,1080,15]]],["intel corporation haswell-ult integrated graphics controller","ult",0,[[1366,768,35]]],["intel corporation hd","hd",0,[[1920,1080,24]]],["intel corporation hd graphics 500","500",0,[[1366,768,19]]],["intel corporation hd graphics 510","510",0,[[1368,768,48]]],["intel corporation hd graphics 515","515",0,[[1920,1080,29]]],["intel corporation hd graphics 520","520",0,[[1366,768,59]]],["intel corporation hd graphics 530","530",0,[[1920,1080,58]]],["intel corporation hd graphics 5300","5300",0,[[1920,1080,35]]],["intel corporation hd graphics 5500","5500",0,[[1920,1080,36]]],["intel corporation hd graphics 610","610",0,[[1920,1080,28]]],["intel corporation hd graphics 620","620",0,[[1920,1080,56],[3200,1800,17]]],["intel corporation hd graphics 630","630",0,[[1920,1080,58]]],["intel corporation iris graphics 540","540",0,[[1920,1080,54]]],["intel corporation iris graphics 6100","6100",0,[[2560,1600,20]]],["intel corporation iris plus graphics 650","650",0,[[1440,900,60]]],["intel corporation iris plus graphics 655","655",0,[[1920,1080,119]]],["intel corporation iris plus graphics g1","1",0,[[1920,1080,57]]],["intel corporation iris plus graphics g7","7",0,[[1920,1080,112]]],["intel corporation iris pro graphics 580","580",0,[[1920,1080,60]]],["intel corporation iris pro graphics 6200","6200",0,[[2560,1080,41]]],["intel corporation iris xe","xe",0,[[1920,1200,60]]],["intel corporation sky lake integrated","sky",0,[[2560,1440,52]]],["intel corporation skylake gt2 [hd graphics 520]","2",0,[[1920,1080,52],[2560,1440,31]]],["intel corporation skylake integrated","",0,[[1920,1080,51]]],["intel corporation tigerlake gt2 [iris xe graphics]","2",0,[[1920,1080,60]]],["intel corporation tigerlake-lp gt2 [iris xe graphics]","2",0,[[1920,1080,60]]],["intel corporation uhd","uhd",0,[[1920,1080,65]]],["intel corporation uhd graphics 605","605",0,[[1920,1080,21]]],["intel corporation uhd graphics 615","615",0,[[1920,1080,30]]],["intel corporation uhd graphics 620","620",0,[[1920,1080,55]]],["intel corporation uhd graphics 630","630",0,[[1920,1080,57]]],["intel corporation whiskeylake-u gt2 [uhd graphics 620]","2",0,[[1920,1080,57]]],["intel corporation xeon e3-1200 v2 gen core processor graphics controller","3",0,[[1920,1080,15]]],["intel corporation xeon e3-1200 v3 gen core processor integrated graphics controller","3",0,[[1360,768,42],[1440,900,34],[1280,1024,23],[1920,1080,22]]],["intel corporation, series chipset iris plus graphics 655","655",0,[[1920,1080,42]]],["intel geforce gtx 960","960",0,[[1920,1080,26]]],["intel gen12 desktop graphics controller","12",0,[[3840,2160,20]]],["intel graphics gfx-driver-user-feature_dg1_poweron-27723 dch releaseinternal","1",0,[[3840,2160,11]]],["intel hd","hd",0,[[1280,800,18],[1366,768,26],[1600,900,12],[1920,1080,13],[1920,1200,16],[1920,1280,18],[3000,2002,6],[4096,2160,4]]],["intel hd 4000","4000",0,[[1366,768,37]]],["intel hd 530","530",0,[[1920,1200,54]]],["intel hd graphics 3000","3000",0,[[1920,1080,21]]],["intel hd graphics 4000","4000",0,[[1280,800,41],[1366,768,33],[1440,900,31],[1680,1050,50],[1920,1080,27],[2560,1600,13],[2880,1800,12]]],["intel hd graphics 4000,,,,,,,","4000",0,[[1920,1080,19]]],["intel hd graphics 4400","4400",0,[[1366,768,28],[1280,1024,48],[1920,1080,18],[2160,1440,20]]],["intel hd graphics 4600","4600",0,[[1366,768,14],[1280,960,65],[1280,1024,60],[1600,900,33],[1680,1050,31],[1600,1200,47],[1920,1080,19],[1920,1200,22],[2880,1620,14]]],["intel hd graphics 500","500",0,[[1920,1080,15]]],["intel hd graphics 5000","5000",0,[[1366,768,45],[1440,900,42],[1920,1032,25],[1920,1080,27],[2160,1439,19],[2160,1440,23],[2560,1440,15]]],["intel hd graphics 505","505",0,[[1366,768,28],[1920,1080,16]]],["intel hd graphics 510","510",0,[[1366,768,29],[1440,900,46],[1680,1050,12],[1920,1080,27]]],["intel hd graphics 515","515",0,[[1920,1080,45],[2720,768,22],[1920,1280,41],[2160,1440,28],[2560,1600,16],[2736,1824,19],[3200,1800,12],[3840,2160,10]]],["intel hd graphics 520","520",0,[[1366,768,90],[1920,1080,30],[2736,1824,26],[3000,2000,21]]],["intel hd graphics 530","530",0,[[1366,768,21],[1280,1024,65],[1920,1080,47],[1920,1200,39],[3840,2160,6]]],["intel hd graphics 5300","5300",0,[[1920,1080,21],[2304,1440,19],[2560,1600,13]]],["intel hd graphics 5500","5500",0,[[1366,768,37],[1920,1080,21]]],["intel hd graphics 5600","5600",0,[[1920,1080,26],[1920,1200,40],[2880,1620,21]]],["intel hd graphics 6000","6000",0,[[1366,768,43],[1440,900,40],[1920,1080,21]]],["intel hd graphics 610","610",0,[[1366,768,33],[1600,900,42],[1920,1080,27],[3840,2160,8]]],["intel hd graphics 615","615",0,[[1600,900,13],[1920,1080,18],[1800,1200,29],[1920,1200,34],[2560,1440,25],[2560,1600,21],[2736,1824,21]]],["intel hd graphics 620","620",0,[[1920,1080,37],[2736,1824,27],[3200,1800,25],[3840,2160,13]]],["intel hd graphics 630","630",0,[[1366,768,69],[1920,1080,40],[2560,1440,27],[2560,1600,23],[3360,2100,56],[3840,2160,12]]],["intel hd graphics 630 gt2","630",0,[[1920,1080,39],[1720,1440,120]]],["intel hd graphics cfl crb","hdcfl",0,[[2560,1440,38]]],["intel hd graphics family","hd",0,[[1366,768,44]]],["intel hd graphics icl rvp","hdicl",0,[[1920,1080,58]]],["intel hd graphics icl rvp bigsur","hdicl",0,[[1920,1080,57]]],["intel hd graphics kbl crb","hdkbl",0,[[1920,1080,57],[3840,2160,13]]],["intel hd graphics p4600","4600",0,[[1280,1024,57],[1920,1080,18],[2560,1600,60]]],["intel hd graphics p530","530",0,[[2560,1440,36],[3840,2160,12]]],["intel hd graphics p630","630",0,[[1440,900,35],[1920,1200,50]]],["intel hd graphics, gen10","10",0,[[3840,2160,4]]],["intel hd5500 broadwell pg7","5500",0,[[1366,768,31]]],["intel hd5500 graphics pg7","5500",0,[[1366,768,56]]],["intel iris","",0,[[1366,768,57],[1600,900,34],[1920,1080,34],[2560,1600,17],[2880,1800,14]]],["intel iris graphics 5100","5100",0,[[1920,1080,35],[2560,1600,18]]],["intel iris graphics 540","540",0,[[1920,1080,20],[2736,1824,28],[2880,1800,23],[3200,1800,17],[3840,2160,17]]],["intel iris graphics 550","550",0,[[1920,1080,81],[2160,1440,45],[2560,1600,28],[2880,1800,26],[3840,2160,24]]],["intel iris graphics 6100","6100",0,[[1920,1080,26],[2560,1600,19],[3840,2160,10]]],["intel iris graphics 6200","6200",0,[[4096,2304,13]]],["intel iris graphics 640","640",0,[[2256,1504,24],[3840,2160,9]]],["intel iris graphics 650","650",0,[[2560,1440,24]]],["intel iris graphics p580","580",0,[[3840,2160,12]]],["intel iris plus","",0,[[1920,1080,60],[2256,1504,95],[2496,1664,93],[2736,1824,60],[2880,1800,60],[3000,2000,56]]],["intel iris plus graphics 640","640",0,[[1920,1080,87],[2256,1504,46],[2560,1600,44],[2735,1823,28],[2736,1824,28],[2880,1800,26],[3072,1728,25],[3200,1800,37],[3840,2160,16]]],["intel iris plus graphics 645","645",0,[[2560,1599,32],[2560,1600,56],[2880,1800,47]]],["intel iris plus graphics 650","650",0,[[1920,1080,60],[2560,1600,49],[2880,1800,27],[3840,2160,16]]],["intel iris plus graphics 655","655",0,[[1920,1080,58],[2560,1440,85],[2880,1800,32],[3840,2160,24]]],["intel iris pro","pro",0,[[1920,1080,56]]],["intel iris pro graphics 5200","5200",0,[[1920,1080,53],[2879,1800,24],[2880,1800,21]]],["intel iris pro graphics 580","580",0,[[1920,1080,58],[2560,1080,91],[2560,1440,58],[3840,1600,27]]],["intel iris pro graphics 6200","6200",0,[[1366,696,38],[1920,1080,58],[1920,1200,60],[3840,2160,19],[4096,2304,14]]],["intel iris pro graphics p580","580",0,[[1024,768,42],[1920,1080,103],[3840,2160,27]]],["intel iris pro graphics p6300","6300",0,[[1366,768,102],[1440,900,128],[1920,1080,30]]],["intel iris xe","xe",0,[[1920,1080,88]]],["intel iris xe graphics releaseinternal","xe",0,[[3840,2160,38]]],["intel iris xe max","xe",0,[[1920,1080,60],[3840,2160,56]]],["intel kabylake hd graphics ult gt2","2",0,[[3840,2160,11]]],["intel kabylake hd graphics ulx gt2","2",0,[[1920,1080,28],[3840,2160,6]]],["intel kbl unknown","kbl",0,[[1920,1080,54]]],["intel mesa dri intel bay trail","dribay",0,[[1366,768,14]]],["intel mesa dri intel haswell mobile","dri",0,[[1920,1080,27]]],["intel mesa dri intel hd","drihd",0,[[1920,1080,10]]],["intel mesa dri intel hd graphics 400","400",0,[[1366,768,30]]],["intel mesa dri intel hd graphics 505","505",0,[[1920,1080,27]]],["intel mesa dri intel hd graphics 520","520",0,[[1920,1080,45],[2560,1440,24]]],["intel mesa dri intel hd graphics 530","530",0,[[3840,2160,12]]],["intel mesa dri intel hd graphics 5500","5500",0,[[1366,768,40]]],["intel mesa dri intel hd graphics 620","620",0,[[1920,1080,53]]],["intel mesa dri intel hd graphics 630","630",0,[[1477,831,58]]],["intel mesa dri intel hd graphics p4000","4000",0,[[1920,1080,36]]],["intel mesa dri intel iris graphics 540","540",0,[[1280,720,40]]],["intel mesa dri intel ivybridge desktop","dri",0,[[2560,1080,16]]],["intel mesa dri intel ivybridge mobile","dri",0,[[1920,1080,25]]],["intel mesa dri intel kabylake gt2","2",0,[[1920,1080,36]]],["intel mesa dri intel sandybridge desktop","dri",0,[[1280,1024,12]]],["intel mesa dri intel sandybridge mobile","dri",0,[[1366,768,33]]],["intel mesa dri intel uhd graphics 620","620",0,[[2736,1824,22]]],["intel mesa dri intel uhd graphics 630","630",0,[[1920,1080,42]]],["intel mesa intel hd graphics 520","520",0,[[1920,1080,47]]],["intel mesa intel hd graphics 530","530",0,[[1920,1080,55]]],["intel phdgd ivy 4","4",0,[[1366,768,45]]],["intel radeon pro vega 16","16",0,[[3360,1890,20]]],["intel radeong 0.4 on amd bonaire","0",0,[[1920,1200,92]]],["intel radeong 0.4 on amd cape verde","0",0,[[1920,1200,73]]],["intel radeong 0.4 on amd polaris10","0",0,[[3840,2160,108]]],["intel radeong 0.4 on amd tonga","0",0,[[1920,1080,124]]],["intel skl unknown","skl",0,[[1920,1080,43]]],["intel skylake gt2 [hd graphics 520]","2",0,[[1920,1080,39]]],["intel uhd","uhd",0,[[1920,1080,58],[2560,1600,22],[3440,1440,14],[2736,1824,32],[3840,2160,31]]],["intel uhd 630","630",0,[[2560,1440,38]]],["intel uhd graphics 600","600",0,[[1366,768,27],[1920,1080,13],[1920,1200,13],[2560,1440,11],[3840,2160,5]]],["intel uhd graphics 600 universal","600",0,[[1919,1031,15]]],["intel uhd graphics 605","605",0,[[1366,768,29],[1920,1080,37]]],["intel uhd graphics 610","610",0,[[1366,768,58],[1920,1080,32],[1920,1200,37],[2560,1440,17],[3840,2160,11]]],["intel uhd graphics 615","615",0,[[1920,1080,34],[1920,1280,29],[3840,2160,9]]],["intel uhd graphics 617","617",0,[[1920,1080,43],[2560,1599,24],[2560,1600,26],[2880,1800,24]]],["intel uhd graphics 620","620",0,[[1920,1080,50],[2736,1824,33],[3200,1800,16]]],["intel uhd graphics 630","630",0,[[1440,900,112],[1920,1080,44],[1920,1200,65],[2560,1080,68],[2560,1440,26],[3440,1440,25],[3584,2240,137],[3840,2160,12],[6016,3384,8]]],["intel uhd graphics 730","730",0,[[1920,1080,53]]],["intel uhd graphics 750","750",0,[[1920,1080,56],[3840,2160,36]]],["intel uhd graphics 770","770",0,[[3440,1440,78],[5120,1440,31]]],["intel uhd graphics gfx-driver-user-comp_core-23599","23599",0,[[3840,2160,18]]],["intel uhd graphics p630","630",0,[[1920,1080,54],[3840,2160,21]]],["intel uhd graphics releaseinternal","uhd",0,[[3199,1800,22],[3000,2000,47]]],["intel uhd graphics, gen11 lp","11",0,[[3840,2160,10]]],["intel uhd graphics, gen12 lp releaseinternal","12",0,[[3839,2159,4]]],["intel uhd graphics, lkf","uhdlkf",0,[[1927,1439,14]]],["intel unknown","",0,[[1920,1080,37]]],["intel xe","xe",0,[[1920,1080,268],[2560,1440,137]]],["intel xeon e3-1200 v3 gen core processor integrated graphics controller","3",0,[[1600,900,49]]]]\')},217:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["nvidia %nvidia_dev.13d7.0580.1028%","13",0,[[1920,1018,60]]],["nvidia a100-pcie-40gb","100",0,[[1920,1080,449]]],["nvidia a40","40",0,[[1920,1080,504]]],["nvidia a40-8q","40",0,[[2560,1440,58]]],["nvidia ashley","",0,[[1920,1080,60]]],["nvidia asus geforce gt 430","430",0,[[1366,768,35]]],["nvidia asus geforce gt 440","440",0,[[1920,1080,28]]],["nvidia asus geforce gt 520","520",0,[[1680,1050,12]]],["nvidia asus geforce gt 610","610",0,[[1920,1200,15]]],["nvidia asus geforce gt 630","630",0,[[1680,1050,41]]],["nvidia asus geforce gt 640","640",0,[[2560,1440,34]]],["nvidia asus geforce gt 710","710",0,[[1920,1080,31]]],["nvidia asus geforce gt 730","730",0,[[2560,1080,28],[3840,2160,12]]],["nvidia asus geforce gts 450","450",0,[[1920,1080,54]]],["nvidia asus geforce gtx 1060","1060",0,[[3840,2160,38]]],["nvidia asus geforce gtx 1080","1080",0,[[2560,1440,120]]],["nvidia asus geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia asus geforce gtx 480","480",0,[[1920,1080,59]]],["nvidia asus geforce gtx 550 ti","550",0,[[1920,1080,57]]],["nvidia asus geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia asus geforce gtx 560 se","560",0,[[1920,1080,59]]],["nvidia asus geforce gtx 560 ti","560",0,[[1680,1050,58]]],["nvidia asus geforce gtx 570","570",0,[[1280,1024,74]]],["nvidia asus geforce gtx 570 hd","570",0,[[1920,1080,60]]],["nvidia asus geforce gtx 580","580",0,[[1920,1200,59]]],["nvidia asus geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia asus geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia asus geforce gtx 750 ti","750",0,[[1360,768,59],[1920,1080,118]]],["nvidia asus geforce gtx 760","760",0,[[1920,1080,60],[1920,1200,60]]],["nvidia asus geforce gtx 770","770",0,[[1920,1080,60]]],["nvidia asus geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia asus geforce gtx 950","950",0,[[1920,1080,60]]],["nvidia asus geforce gtx 960","960",0,[[1920,1080,60],[2560,1600,117]]],["nvidia asus geforce gtx 970","970",0,[[2560,1600,60]]],["nvidia asus geforce gtx 980 ti","980",0,[[2560,1440,131]]],["nvidia chip model","",0,[[1920,1080,60]]],["nvidia colorful geforce gtx 960","960",0,[[2560,1440,60]]],["nvidia dell nvs 5200m","5200",0,[[1920,1080,27]]],["nvidia dell quadro 2000m","2000",0,[[1920,1080,29]]],["nvidia device","",0,[[1920,1080,746]]],["nvidia elitegroup geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia evga geforce gt 545","545",0,[[1920,1080,37]]],["nvidia evga geforce gt 640","640",0,[[1366,768,60]]],["nvidia evga geforce gt 710","710",0,[[1680,1050,36],[1920,1080,29]]],["nvidia evga geforce gt 730","730",0,[[1600,900,59]]],["nvidia evga geforce gt 740","740",0,[[1280,1024,45]]],["nvidia evga geforce gtx 1050 ti","1050",0,[[2560,1440,60],[4096,2304,58]]],["nvidia evga geforce gtx 1070","1070",0,[[5120,2880,60]]],["nvidia evga geforce gtx 1080 ti","1080",0,[[1920,1200,60]]],["nvidia evga geforce gtx 560 ti","560",0,[[1680,1050,59]]],["nvidia evga geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia evga geforce gtx 580","580",0,[[2560,1440,60]]],["nvidia evga geforce gtx 650","650",0,[[1920,1200,87],[2560,1600,43]]],["nvidia evga geforce gtx 650 ti","650",0,[[1680,1050,116],[2560,1440,55]]],["nvidia evga geforce gtx 650 ti boost","650",0,[[1920,1080,56]]],["nvidia evga geforce gtx 660 ti","660",0,[[1920,1200,60]]],["nvidia evga geforce gtx 680","680",0,[[1600,1200,60]]],["nvidia evga geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia evga geforce gtx 760","760",0,[[1920,1080,119],[1920,1200,60]]],["nvidia evga geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia evga geforce gtx 960","960",0,[[1920,1080,60],[2560,1440,115]]],["nvidia evga geforce gtx 970","970",0,[[1920,1080,120]]],["nvidia evga geforce gtx 980","980",0,[[3440,1440,60]]],["nvidia evga geforce gtx 980 ti","980",0,[[1920,1080,60]]],["nvidia ga104gl [rtx a4000]","104",0,[[3840,2160,60]]],["nvidia gainward geforce gt 630","630",0,[[1920,1080,28]]],["nvidia gainward geforce gts 450","450",0,[[1920,1080,55]]],["nvidia gainward geforce gtx 460","460",0,[[1920,1080,58]]],["nvidia gainward geforce gtx 550 ti","550",0,[[1280,1024,67]]],["nvidia gainward geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia gainward geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia gainward geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia geforce 210","210",0,[[1920,1080,8]]],["nvidia geforce 410m","410",0,[[1366,768,25],[1600,900,19]]],["nvidia geforce 510","510",0,[[1280,960,20]]],["nvidia geforce 605","605",0,[[1768,992,17],[1920,1080,15]]],["nvidia geforce 610m","610",0,[[1366,768,26]]],["nvidia geforce 610m/710m/810m/820m / gt 620m/625m/630m/720m","610",0,[[1366,768,51]]],["nvidia geforce 615","615",0,[[1920,1080,21]]],["nvidia geforce 705m","705",0,[[1920,1080,18]]],["nvidia geforce 710a","710",0,[[1920,1080,32]]],["nvidia geforce 710m","710",0,[[1366,768,55]]],["nvidia geforce 730a","730",0,[[1920,1080,37]]],["nvidia geforce 800m","800",0,[[1920,1080,18]]],["nvidia geforce 810m","810",0,[[1366,768,44],[1920,1080,31]]],["nvidia geforce 820a","820",0,[[1920,1080,28]]],["nvidia geforce 820m","820",0,[[1366,768,57],[1920,1080,23]]],["nvidia geforce 830a","830",0,[[1920,1080,53]]],["nvidia geforce 830m","830",0,[[1366,768,60]]],["nvidia geforce 8400 gs","8400",0,[[1680,1050,4]]],["nvidia geforce 8400 gs rev. 3","8400",0,[[1920,1080,4]]],["nvidia geforce 840a","840",0,[[1920,1080,56]]],["nvidia geforce 840m","840",0,[[1920,1080,56]]],["nvidia geforce 845m","845",0,[[1920,1080,59]]],["nvidia geforce 8600 gt","8600",1,[[1920,1200,-1]]],["nvidia geforce 8600 gts","8600",1,[[1920,1080,-1]]],["nvidia geforce 910m","910",0,[[1366,768,58],[1600,900,45]]],["nvidia geforce 920m","920",0,[[1366,768,60]]],["nvidia geforce 920mx","920",0,[[1366,768,60],[1920,1080,60]]],["nvidia geforce 9300 / nforce 730i","9300",0,[[1920,1080,6]]],["nvidia geforce 930a","930",0,[[1920,1080,55]]],["nvidia geforce 930m","930",0,[[1366,768,60]]],["nvidia geforce 930mx","930",0,[[1366,768,89],[1920,1080,59]]],["nvidia geforce 9400 gt","9400",1,[[1366,768,-1]]],["nvidia geforce 940a","940",0,[[1920,1080,58]]],["nvidia geforce 940m","940",0,[[1920,1080,54]]],["nvidia geforce 940mx","940",0,[[1920,1080,60]]],["nvidia geforce 945m","945",0,[[1920,1080,59]]],["nvidia geforce 9600 gt","9600",0,[[1920,1200,2]]],["nvidia geforce 9600m gt","9600",1,[[1440,900,-1]]],["nvidia geforce 9800 gt","9800",0,[[1920,1200,52]]],["nvidia geforce 9800 gtx / 9800 gtx+","9800",0,[[1280,1024,59]]],["nvidia geforce gpu","gpu",0,[[3000,2000,36]]],["nvidia geforce gt 1010","1010",0,[[1920,1080,135]]],["nvidia geforce gt 1030","1030",0,[[1920,1080,60]]],["nvidia geforce gt 1030 opengl engine","1030",0,[[6720,3780,15]]],["nvidia geforce gt 120","120",1,[[1920,1080,-1]]],["nvidia geforce gt 240","240",0,[[1366,768,32]]],["nvidia geforce gt 320m","320",0,[[1366,768,26]]],["nvidia geforce gt 415m","415",0,[[1366,768,19]]],["nvidia geforce gt 420","420",0,[[1024,768,33],[1920,1080,20]]],["nvidia geforce gt 420m","420",0,[[1366,768,28]]],["nvidia geforce gt 425m","425",0,[[1366,768,55],[1600,900,28]]],["nvidia geforce gt 430","430",0,[[1600,1200,16],[1920,1080,28]]],["nvidia geforce gt 435m","435",0,[[1366,768,53],[1920,1080,22]]],["nvidia geforce gt 440","440",0,[[1280,1024,51],[1680,1050,38],[1920,1080,45]]],["nvidia geforce gt 445m","445",0,[[1600,900,53]]],["nvidia geforce gt 520","520",0,[[1440,900,19],[1920,1080,17]]],["nvidia geforce gt 520m","520",0,[[1366,768,29]]],["nvidia geforce gt 520mx","520",0,[[1366,768,35]]],["nvidia geforce gt 525m","525",0,[[1366,768,28],[1600,900,22]]],["nvidia geforce gt 530","530",0,[[1920,1080,26]]],["nvidia geforce gt 540m","540",0,[[1366,768,38]]],["nvidia geforce gt 545","545",0,[[1920,1080,54]]],["nvidia geforce gt 550m","550",0,[[1600,900,44],[1920,1080,29]]],["nvidia geforce gt 555m","555",0,[[1920,1080,42]]],["nvidia geforce gt 555m/635m","555",0,[[1920,1080,36]]],["nvidia geforce gt 610","610",0,[[1280,1024,22],[1920,1080,15]]],["nvidia geforce gt 620","620",0,[[1920,1080,19]]],["nvidia geforce gt 620 oem","620",0,[[1920,1080,20],[1920,1200,20]]],["nvidia geforce gt 620m","620",0,[[1366,768,55],[1920,1080,30]]],["nvidia geforce gt 620m/630m/635m/640m le","620",0,[[1368,768,38]]],["nvidia geforce gt 625","625",0,[[1920,1080,18]]],["nvidia geforce gt 625m","625",0,[[1366,768,38]]],["nvidia geforce gt 630","630",0,[[1680,1050,36],[1920,1080,36],[1920,1200,30]]],["nvidia geforce gt 630 oem","630",0,[[1600,900,33]]],["nvidia geforce gt 630 opengl engine","630",0,[[1920,1080,33]]],["nvidia geforce gt 630 rev. 2","630",0,[[1920,1080,26]]],["nvidia geforce gt 630m","630",0,[[1366,768,57]]],["nvidia geforce gt 635","635",0,[[1920,1080,27]]],["nvidia geforce gt 635m","635",0,[[1366,768,47]]],["nvidia geforce gt 640","640",0,[[1920,1080,47]]],["nvidia geforce gt 640 oem","640",0,[[1920,1080,46],[2560,1440,35]]],["nvidia geforce gt 640 opengl engine","640",0,[[1280,1024,43]]],["nvidia geforce gt 640 rev. 2","640",0,[[1280,1024,60],[1920,1080,55]]],["nvidia geforce gt 640m","640",0,[[1366,768,82],[1600,900,59],[1920,1080,34]]],["nvidia geforce gt 640m le","640",0,[[1920,1080,49]]],["nvidia geforce gt 640m mac","640",0,[[1366,768,56],[1920,1080,20]]],["nvidia geforce gt 640m opengl engine","640",0,[[1920,1080,45]]],["nvidia geforce gt 645m","645",0,[[1366,768,60]]],["nvidia geforce gt 650m","650",0,[[1360,768,59],[1920,1080,58],[2560,1440,59]]],["nvidia geforce gt 650m mac","650",0,[[1440,900,56],[1920,1080,15],[2560,1440,19],[2880,1800,31]]],["nvidia geforce gt 650m opengl engine","650",0,[[1920,1080,56],[3840,2160,27]]],["nvidia geforce gt 705","705",0,[[1920,1080,11]]],["nvidia geforce gt 710","710",0,[[1920,1080,28]]],["nvidia geforce gt 710b","710",0,[[1920,1080,26]]],["nvidia geforce gt 710m","710",0,[[1366,768,46]]],["nvidia geforce gt 720","720",0,[[1920,1080,19],[2560,1440,16],[5120,2880,5]]],["nvidia geforce gt 720 opengl engine","720",0,[[2560,1600,20]]],["nvidia geforce gt 720m","720",0,[[1366,768,42]]],["nvidia geforce gt 730","730",0,[[1920,1080,54]]],["nvidia geforce gt 730a","730",0,[[1920,1080,23]]],["nvidia geforce gt 730m","730",0,[[1920,1080,43]]],["nvidia geforce gt 735m","735",0,[[1920,1080,39]]],["nvidia geforce gt 740","740",0,[[1920,1080,55],[3440,1440,23]]],["nvidia geforce gt 740 opengl engine","740",0,[[1920,1200,51]]],["nvidia geforce gt 740m","740",0,[[1366,768,60]]],["nvidia geforce gt 745m","745",0,[[1920,1080,55]]],["nvidia geforce gt 750m","750",0,[[1920,1080,57]]],["nvidia geforce gt 750m mac","750",0,[[1920,1080,58],[2880,1800,28]]],["nvidia geforce gt 755m","755",0,[[1920,1080,57]]],["nvidia geforce gt 755m mac","755",0,[[2560,1440,41]]],["nvidia geforce gt 755m opengl engine","755",0,[[2560,1440,51]]],["nvidia geforce gt 820m","820",0,[[1600,900,47]]],["nvidia geforce gts 250","250",0,[[1680,1050,53]]],["nvidia geforce gts 450","450",0,[[1360,768,60],[1680,1050,57],[1920,1080,55]]],["nvidia geforce gts 450 rev. 2","450",0,[[1920,1080,56]]],["nvidia geforce gtx 1050","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 3gb","1050",0,[[1280,1024,60]]],["nvidia geforce gtx 1050 mobile","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 opengl engine","1050",0,[[1920,1080,116]]],["nvidia geforce gtx 1050 ti","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 ti mobile","1050",0,[[1920,1080,298]]],["nvidia geforce gtx 1050 ti opengl engine","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 ti with max-q design","1050",0,[[1920,1080,268],[2560,1440,102],[3840,2160,60]]],["nvidia geforce gtx 1050 with max-q design","1050",0,[[1920,1080,60],[3840,2160,24]]],["nvidia geforce gtx 1060","1060",0,[[1920,1080,60],[3840,2160,59]]],["nvidia geforce gtx 1060 3gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 3gb opengl engine","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 5gb","1060",0,[[1920,1080,55]]],["nvidia geforce gtx 1060 6gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 6gb opengl engine","1060",0,[[1920,1080,75]]],["nvidia geforce gtx 1060 mobile","1060",0,[[1920,1080,422]]],["nvidia geforce gtx 1060 mobile 6gb","1060",0,[[1920,1080,120]]],["nvidia geforce gtx 1060 with max-q design","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060se 3gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1070","1070",0,[[1920,1080,134]]],["nvidia geforce gtx 1070 a17","1070",0,[[1920,1080,60]]],["nvidia geforce gtx 1070 mobile","1070",0,[[1920,1080,467]]],["nvidia geforce gtx 1070 opengl engine","1070",0,[[1920,1080,143]]],["nvidia geforce gtx 1070 ti","1070",0,[[1920,1080,60],[6016,3384,59]]],["nvidia geforce gtx 1070 ti opengl engine","1070",0,[[1920,1080,75]]],["nvidia geforce gtx 1070 with max-q design","1070",0,[[1920,1080,448]]],["nvidia geforce gtx 1070 with maxq design","1070",0,[[1920,1080,60],[3840,2160,59]]],["nvidia geforce gtx 1080","1080",0,[[1920,1080,119],[2560,1440,326],[3840,2160,286]]],["nvidia geforce gtx 1080 mobile","1080",0,[[1920,1080,120]]],["nvidia geforce gtx 1080 opengl engine","1080",0,[[1920,1080,79]]],["nvidia geforce gtx 1080 ti","1080",0,[[1920,1080,120]]],["nvidia geforce gtx 1080 ti opengl engine","1080",0,[[1920,1080,127]]],["nvidia geforce gtx 1080 with max-q design","1080",0,[[1920,1080,144]]],["nvidia geforce gtx 1180","1180",0,[[3440,1440,60]]],["nvidia geforce gtx 1650","1650",0,[[1920,1080,380]]],["nvidia geforce gtx 1650 mobile / max-q","1650",0,[[1920,1080,292]]],["nvidia geforce gtx 1650 super","1650",0,[[1920,1080,433]]],["nvidia geforce gtx 1650 ti","1650",0,[[1920,1080,144],[3840,2400,59]]],["nvidia geforce gtx 1650 ti mobile","1650",0,[[1920,1080,144]]],["nvidia geforce gtx 1650 ti with max-q design","1650",0,[[1920,1080,60],[3839,2160,60]]],["nvidia geforce gtx 1650 with max-q design","1650",0,[[1920,1080,142],[3000,2000,60]]],["nvidia geforce gtx 1660","1660",0,[[1920,1080,144]]],["nvidia geforce gtx 1660 super","1660",0,[[1920,1080,60]]],["nvidia geforce gtx 1660 ti","1660",0,[[1920,1080,546],[3840,2160,60]]],["nvidia geforce gtx 1660 ti mobile","1660",0,[[1920,1080,451]]],["nvidia geforce gtx 1660 ti with max-q design","1660",0,[[1920,1080,144]]],["nvidia geforce gtx 280","280",0,[[1680,1050,56]]],["nvidia geforce gtx 295","295",0,[[1920,1080,56]]],["nvidia geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia geforce gtx 460 oem","460",0,[[1360,768,60],[1920,1080,60]]],["nvidia geforce gtx 460 opengl engine","460",0,[[1920,1080,59]]],["nvidia geforce gtx 460 se","460",0,[[1920,1080,56],[1920,1200,57]]],["nvidia geforce gtx 460 v2","460",0,[[1920,1080,60],[1920,1200,60],[2560,1600,55]]],["nvidia geforce gtx 460m","460",0,[[1920,1080,46]]],["nvidia geforce gtx 465","465",0,[[1920,1080,134],[1920,1200,59]]],["nvidia geforce gtx 470","470",0,[[1680,1050,60],[1920,1080,59]]],["nvidia geforce gtx 470m","470",0,[[1920,1200,55]]],["nvidia geforce gtx 480","480",0,[[1440,900,191],[1920,1080,115],[1920,1200,60]]],["nvidia geforce gtx 480 opengl engine","480",0,[[1600,1200,60]]],["nvidia geforce gtx 550 ti","550",0,[[1280,1024,58],[1920,1080,58]]],["nvidia geforce gtx 550 ti opengl engine","550",0,[[1920,1080,55]]],["nvidia geforce gtx 555","555",0,[[1920,1080,54]]],["nvidia geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia geforce gtx 560 se","560",0,[[1680,1050,52],[1920,1080,111]]],["nvidia geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia geforce gtx 560 ti 448 cores","560",0,[[1920,1080,60],[2560,1440,60]]],["nvidia geforce gtx 560 ti oem","560",0,[[1920,1080,176]]],["nvidia geforce gtx 560 ti opengl engine","560",0,[[1920,1080,48]]],["nvidia geforce gtx 560m","560",0,[[1920,1080,55]]],["nvidia geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia geforce gtx 570 opengl engine","570",0,[[1920,1080,60]]],["nvidia geforce gtx 570 rev. 2","570",0,[[1920,1080,60],[1920,1200,60]]],["nvidia geforce gtx 570m","570",0,[[1920,1080,125],[2560,1440,8]]],["nvidia geforce gtx 580","580",0,[[1920,1080,60]]],["nvidia geforce gtx 580 opengl engine","580",0,[[1680,1050,59]]],["nvidia geforce gtx 580m","580",0,[[1920,1080,60]]],["nvidia geforce gtx 590","590",0,[[1920,1080,59]]],["nvidia geforce gtx 645","645",0,[[1920,1080,57],[1920,1200,58]]],["nvidia geforce gtx 645 opengl engine","645",0,[[1920,1200,58]]],["nvidia geforce gtx 650","650",0,[[1920,1080,72]]],["nvidia geforce gtx 650 oem","650",0,[[1366,768,59]]],["nvidia geforce gtx 650 opengl engine","650",0,[[1920,1080,59]]],["nvidia geforce gtx 650 ti","650",0,[[1920,1080,60]]],["nvidia geforce gtx 650 ti boost","650",0,[[1280,1024,60],[1600,1200,187],[1920,1080,60]]],["nvidia geforce gtx 650 ti opengl engine","650",0,[[1920,1080,60]]],["nvidia geforce gtx 660","660",0,[[1920,1080,111]]],["nvidia geforce gtx 660 oem","660",0,[[1920,1080,59]]],["nvidia geforce gtx 660 ti","660",0,[[1920,1080,60]]],["nvidia geforce gtx 660 ti opengl engine","660",0,[[1280,1024,60]]],["nvidia geforce gtx 660m","660",0,[[1680,1050,36],[1920,1080,59]]],["nvidia geforce gtx 660m mac","660",0,[[2560,1440,2]]],["nvidia geforce gtx 660m opengl engine","660",0,[[2560,1440,36]]],["nvidia geforce gtx 670","670",0,[[1920,1080,100]]],["nvidia geforce gtx 670 opengl engine","670",0,[[1920,1080,60]]],["nvidia geforce gtx 670m","670",0,[[1920,1080,66]]],["nvidia geforce gtx 670mx","670",0,[[1920,1080,60]]],["nvidia geforce gtx 675m","675",0,[[1920,1080,60]]],["nvidia geforce gtx 675mx","675",0,[[1680,1050,60],[1920,1080,60],[2560,1440,55]]],["nvidia geforce gtx 675mx mac","675",0,[[2560,1440,36]]],["nvidia geforce gtx 675mx opengl engine","675",0,[[2560,1440,60]]],["nvidia geforce gtx 680","680",0,[[1920,1080,60]]],["nvidia geforce gtx 680 opengl engine","680",0,[[1920,1080,60]]],["nvidia geforce gtx 680m","680",0,[[1920,1080,39],[1920,1200,60]]],["nvidia geforce gtx 680m opengl engine","680",0,[[1920,1080,36]]],["nvidia geforce gtx 680mx","680",0,[[2560,1440,59]]],["nvidia geforce gtx 680mx opengl engine","680",0,[[2560,1440,59]]],["nvidia geforce gtx 690","690",0,[[1920,1080,60],[3840,2160,30]]],["nvidia geforce gtx 745","745",0,[[1920,1080,60],[2560,1600,29]]],["nvidia geforce gtx 750","750",0,[[1920,1080,60]]],["nvidia geforce gtx 750 opengl engine","750",0,[[1920,1200,58]]],["nvidia geforce gtx 750 ti","750",0,[[1920,1080,97]]],["nvidia geforce gtx 760","760",0,[[1920,1080,60],[1920,1200,116]]],["nvidia geforce gtx 760 oem","760",0,[[1920,1080,60]]],["nvidia geforce gtx 760 opengl engine","760",0,[[1920,1080,52]]],["nvidia geforce gtx 760 ti","760",0,[[1920,1080,60],[1920,1200,60]]],["nvidia geforce gtx 760 ti oem","760",0,[[1920,1200,60]]],["nvidia geforce gtx 760 ti opengl engine","760",0,[[1920,1080,60]]],["nvidia geforce gtx 760a","760",0,[[2560,1080,15]]],["nvidia geforce gtx 760m","760",0,[[1920,1080,60]]],["nvidia geforce gtx 765m","765",0,[[1920,1080,53],[2560,1440,57]]],["nvidia geforce gtx 765m by nick[d]vb","765",0,[[2560,1440,58]]],["nvidia geforce gtx 765m opengl engine","765",0,[[2560,1440,57]]],["nvidia geforce gtx 770","770",0,[[1920,1080,143],[2560,1440,203]]],["nvidia geforce gtx 770 opengl engine","770",0,[[1920,1080,60]]],["nvidia geforce gtx 770m","770",0,[[1920,1080,60],[2560,1440,59]]],["nvidia geforce gtx 770m by nick[d]vb","770",0,[[2560,1440,34]]],["nvidia geforce gtx 770m opengl engine","770",0,[[2560,1440,59]]],["nvidia geforce gtx 775m by idopt mac","775",0,[[2560,1440,56]]],["nvidia geforce gtx 775m mac","775",0,[[2560,1440,59]]],["nvidia geforce gtx 775m opengl engine","775",0,[[2560,1440,60]]],["nvidia geforce gtx 780","780",0,[[1920,1080,159]]],["nvidia geforce gtx 780 by st3phl3","780",0,[[3840,2160,30]]],["nvidia geforce gtx 780 mac","780",0,[[1680,1050,60],[1920,1080,60]]],["nvidia geforce gtx 780 rev. 2","780",0,[[1920,1080,144],[2560,1440,119],[3840,2160,58],[5120,2880,58]]],["nvidia geforce gtx 780 ti","780",0,[[1280,1024,120],[1920,1080,119]]],["nvidia geforce gtx 780 ti opengl engine","780",0,[[2560,1440,60]]],["nvidia geforce gtx 780m","780",0,[[1920,1080,60],[2560,1440,59]]],["nvidia geforce gtx 780m by nick[d]vb","780",0,[[1920,1080,59],[2560,1440,60]]],["nvidia geforce gtx 780m mac","780",0,[[2560,1440,60]]],["nvidia geforce gtx 780m opengl engine","780",0,[[2560,1440,60]]],["nvidia geforce gtx 850a","850",0,[[2560,1440,48]]],["nvidia geforce gtx 850m","850",0,[[1920,1080,60]]],["nvidia geforce gtx 860m","860",0,[[1920,1080,59]]],["nvidia geforce gtx 860m opengl engine","860",0,[[2560,1440,58]]],["nvidia geforce gtx 870m","870",0,[[1920,1080,60],[2560,1440,102]]],["nvidia geforce gtx 880m","880",0,[[1920,1080,60],[2560,1440,74]]],["nvidia geforce gtx 880m opengl engine","880",0,[[2560,1440,60]]],["nvidia geforce gtx 950","950",0,[[1920,1080,98]]],["nvidia geforce gtx 950 opengl engine","950",0,[[1920,1200,60]]],["nvidia geforce gtx 950a","950",0,[[1920,1080,60],[3840,2160,38]]],["nvidia geforce gtx 950m","950",0,[[1920,1080,114]]],["nvidia geforce gtx 960","960",0,[[1920,1080,60]]],["nvidia geforce gtx 960a","960",0,[[1920,1440,128]]],["nvidia geforce gtx 960m","960",0,[[1920,1080,119],[3840,2160,37]]],["nvidia geforce gtx 965m","965",0,[[1920,1080,195],[3000,2000,59],[3840,2160,41]]],["nvidia geforce gtx 965m opengl engine","965",0,[[2880,1620,55]]],["nvidia geforce gtx 970","970",0,[[1920,1080,143]]],["nvidia geforce gtx 970 opengl engine","970",0,[[2560,1600,60]]],["nvidia geforce gtx 970m","970",0,[[1920,1080,60]]],["nvidia geforce gtx 980","980",0,[[1920,1080,60],[3440,1440,294]]],["nvidia geforce gtx 980 ti","980",0,[[1920,1080,119],[2560,1440,456]]],["nvidia geforce gtx 980 ti opengl engine","980",0,[[1920,1080,60]]],["nvidia geforce gtx 980m","980",0,[[1920,1080,60],[3840,2160,104]]],["nvidia geforce gtx titan","gtx",0,[[1920,1080,119],[1920,1200,119],[2560,1440,60]]],["nvidia geforce gtx titan black","gtx",0,[[1680,1050,60],[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["nvidia geforce gtx titan black opengl engine","gtx",0,[[3840,2160,60]]],["nvidia geforce gtx titan opengl engine","gtx",0,[[2560,1440,60]]],["nvidia geforce gtx titan x","gtxx",0,[[1920,1080,144],[2560,1440,120],[2560,1600,60]]],["nvidia geforce gtx titan xp","gtxxp",0,[[2560,1440,60],[3440,1440,60]]],["nvidia geforce gtx titan z","gtxz",0,[[1440,900,59],[1920,1080,39],[3840,2160,60]]],["nvidia geforce gtx780m by nikey22","780",0,[[2560,1440,60]]],["nvidia geforce gtx870m by nikey22","870",0,[[2560,1440,60]]],["nvidia geforce gtx880m","880",0,[[1920,1080,60]]],["nvidia geforce gtx880m by nikey22","880",0,[[2560,1440,59]]],["nvidia geforce gtx880m opengl engine","880",0,[[2560,1440,59]]],["nvidia geforce mx110","110",0,[[1366,768,61],[1920,1080,57]]],["nvidia geforce mx130","130",0,[[1920,1080,60]]],["nvidia geforce mx150","150",0,[[1920,1080,113]]],["nvidia geforce mx230","230",0,[[1920,1080,60]]],["nvidia geforce mx250","250",0,[[1920,1080,60]]],["nvidia geforce mx330","330",0,[[1920,1080,60],[3840,2160,51]]],["nvidia geforce mx350","350",0,[[1920,1080,60]]],["nvidia geforce mx450","450",0,[[1920,1080,60]]],["nvidia geforce pre-release graphics device","pre",0,[[2560,1440,60]]],["nvidia geforce pre-release tesla c2075 opengl engine","2075",0,[[1600,900,59]]],["nvidia geforce pre-release titan x opengl engine","prex",0,[[1920,1080,60]]],["nvidia geforce pre-release titan xp collectors edition opengl e","prexpe",0,[[1920,1080,59]]],["nvidia geforce pre-release titan xp opengl engine","prexp",0,[[2560,1440,60]]],["nvidia geforce rtx 2060","2060",0,[[1920,1080,512]]],["nvidia geforce rtx 2060 max-q","2060",0,[[2560,1440,301]]],["nvidia geforce rtx 2060 mobile","2060",0,[[1920,1080,518]]],["nvidia geforce rtx 2060 rev. a","2060",0,[[3840,2160,257]]],["nvidia geforce rtx 2060 super","2060",0,[[1920,1080,645],[2560,1440,143]]],["nvidia geforce rtx 2060 with max-q design","2060",0,[[1920,1080,292],[1920,1200,60]]],["nvidia geforce rtx 2070","2070",0,[[1920,1080,60],[3840,2160,60]]],["nvidia geforce rtx 2070 mobile","2070",0,[[1920,1080,477]]],["nvidia geforce rtx 2070 mobile / max-q","2070",0,[[1920,1080,526]]],["nvidia geforce rtx 2070 mobile / max-q refresh","2070",0,[[1920,1080,143]]],["nvidia geforce rtx 2070 rev. a","2070",0,[[2560,1440,144]]],["nvidia geforce rtx 2070 super","2070",0,[[1920,1080,510]]],["nvidia geforce rtx 2070 super with max-q design","2070",0,[[1920,1080,300]]],["nvidia geforce rtx 2070 with max-q design","2070",0,[[1920,1080,240]]],["nvidia geforce rtx 2080","2080",0,[[1920,1080,632],[2560,1440,165]]],["nvidia geforce rtx 2080 mobile","2080",0,[[1920,1080,144]]],["nvidia geforce rtx 2080 rev. a","2080",0,[[2560,1440,143]]],["nvidia geforce rtx 2080 super","2080",0,[[1920,1080,601]]],["nvidia geforce rtx 2080 super mobile / max-q","2080",0,[[3840,2160,59]]],["nvidia geforce rtx 2080 super with max-q design","2080",0,[[1920,1080,300]]],["nvidia geforce rtx 2080 ti","2080",0,[[1920,1080,83]]],["nvidia geforce rtx 2080 ti rev. a","2080",0,[[1920,1080,403]]],["nvidia geforce rtx 2080 with max-q design","2080",0,[[1920,1080,476]]],["nvidia geforce rtx 3050","3050",0,[[1920,1080,60]]],["nvidia geforce rtx 3050 laptop gpu","3050",0,[[1920,1080,144]]],["nvidia geforce rtx 3050 ti laptop gpu","3050",0,[[1920,1080,144]]],["nvidia geforce rtx 3060","3060",0,[[1920,1080,674]]],["nvidia geforce rtx 3060 laptop gpu","3060",0,[[1920,1080,300]]],["nvidia geforce rtx 3060 lite hash rate","3060",0,[[1920,1080,60]]],["nvidia geforce rtx 3060 mobile / max-q","3060",0,[[1920,1080,435]]],["nvidia geforce rtx 3060 ti","3060",0,[[1920,1080,779]]],["nvidia geforce rtx 3070","3070",0,[[1920,1080,723],[2560,1440,294]]],["nvidia geforce rtx 3070 laptop gpu","3070",0,[[1920,1080,357]]],["nvidia geforce rtx 3070 mobile / max-q","3070",0,[[2560,1440,386]]],["nvidia geforce rtx 3070 ti","3070",0,[[1920,1080,60]]],["nvidia geforce rtx 3080","3080",0,[[1920,1080,726],[2560,1440,60],[3840,2160,60]]],["nvidia geforce rtx 3080 laptop gpu","3080",0,[[1920,1080,294],[2560,1440,244]]],["nvidia geforce rtx 3080 mobile / max-q 8gb/16gb","3080",0,[[1920,1080,293]]],["nvidia geforce rtx 3080 ti","3080",0,[[1920,1080,239],[2560,1440,60]]],["nvidia geforce rtx 3090","3090",0,[[2560,1440,60],[3840,2160,474]]],["nvidia geforce rtx t10-16","10",0,[[2560,1600,3]]],["nvidia geforce rtx t10-8","10",0,[[2560,1600,3]]],["nvidia gf100 board - 10220000","100",0,[[1920,1200,60]]],["nvidia gf117","117",0,[[1920,1080,32]]],["nvidia gigabyte geforce gt 440","440",0,[[1280,1024,34]]],["nvidia gigabyte geforce gt 610","610",0,[[1920,1080,17]]],["nvidia gigabyte geforce gt 630","630",0,[[1920,1080,34]]],["nvidia gigabyte geforce gt 730","730",0,[[1280,1024,38]]],["nvidia gigabyte geforce gts 450","450",0,[[1280,1024,37]]],["nvidia gigabyte geforce gtx 1050 ti","1050",0,[[1920,1080,30]]],["nvidia gigabyte geforce gtx 460","460",0,[[1680,1050,60]]],["nvidia gigabyte geforce gtx 550 ti","550",0,[[1920,1080,57]]],["nvidia gigabyte geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 570 hd","570",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 580","580",0,[[1920,1200,60]]],["nvidia gigabyte geforce gtx 650","650",0,[[1680,1050,55]]],["nvidia gigabyte geforce gtx 650 ti","650",0,[[2560,1440,40]]],["nvidia gigabyte geforce gtx 660","660",0,[[1920,1080,31]]],["nvidia gigabyte geforce gtx 660 ti","660",0,[[5120,2880,29]]],["nvidia gigabyte geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 750","750",0,[[1920,1080,59]]],["nvidia gigabyte geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 760","760",0,[[3440,1440,17]]],["nvidia gigabyte geforce gtx 770","770",0,[[2560,1440,59]]],["nvidia gigabyte geforce gtx 780 ti","780",0,[[1920,1080,240]]],["nvidia gigabyte geforce gtx 960","960",0,[[1920,1080,142],[1920,1200,120]]],["nvidia gigabyte geforce gtx 970","970",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 980","980",0,[[2560,1440,60]]],["nvidia gigabyte geforce gtx 980 ti","980",0,[[1920,1080,60]]],["nvidia gk104 board - 2051b502","104",0,[[2560,1440,60]]],["nvidia gk104 board - 20530501","104",0,[[2560,1440,60]]],["nvidia gk104gl [grid k2]","104",0,[[2560,1343,21]]],["nvidia gk104gl [grid k520]","104",0,[[1024,768,120]]],["nvidia gp102 [titan x]","102",0,[[3440,1440,462]]],["nvidia gp102 [titan xp]","102",0,[[1920,1080,126]]],["nvidia gp104","104",0,[[1920,1080,60]]],["nvidia gp104gl","104",0,[[2560,1343,36]]],["nvidia gp108","108",0,[[1920,1080,60]]],["nvidia graphics device","",0,[[1920,1080,60],[1920,1200,60],[3840,2160,60]]],["nvidia grid gtx p40-6","40",0,[[1440,900,153]]],["nvidia grid k1","1",0,[[1245,768,6],[1920,1080,35]]],["nvidia grid k140q vgpu","140",0,[[1920,1080,30]]],["nvidia grid k160q","160",0,[[1920,1080,34]]],["nvidia grid k180q","180",0,[[1920,1080,28]]],["nvidia grid k2","2",0,[[1245,768,6],[1920,1080,59]]],["nvidia grid k220q","220",0,[[1920,1200,34]]],["nvidia grid k240q","240",0,[[1920,1080,64]]],["nvidia grid k260q","260",0,[[2560,1440,31]]],["nvidia grid k280q","280",0,[[1920,1080,64]]],["nvidia grid k520","520",0,[[1280,720,60]]],["nvidia grid m10-1b","10",0,[[1024,768,49]]],["nvidia grid m10-2q","10",0,[[2560,1440,15]]],["nvidia grid m6-0b","6",0,[[1680,1050,33]]],["nvidia grid m60-1b","60",0,[[1680,1050,46],[1920,1080,46]]],["nvidia grid m60-1q","60",0,[[1536,864,60]]],["nvidia grid m60-2q","60",0,[[1920,1080,57]]],["nvidia grid m60-4q","60",0,[[1920,1080,59]]],["nvidia grid m60-8q","60",0,[[1920,1080,60]]],["nvidia grid p100-4q","100",0,[[2560,1440,16]]],["nvidia grid p4-4q","4",0,[[1892,932,247]]],["nvidia grid p40-4q","40",0,[[2741,1495,60]]],["nvidia grid p40-8q","40",0,[[1920,1080,60]]],["nvidia grid rtx6000-2q","6000",0,[[1024,768,60]]],["nvidia grid rtx6000p-6","6000",0,[[1280,1024,161]]],["nvidia grid t4-16q","4",0,[[1920,1080,61]]],["nvidia grid t4-1b","4",0,[[1920,1080,46]]],["nvidia grid t4-1q","4",0,[[1280,1024,48]]],["nvidia grid t4-2b4","4",0,[[1536,864,47]]],["nvidia grid t4-2q","4",0,[[1920,1080,65]]],["nvidia grid t4-8q","4",0,[[2560,1080,60]]],["nvidia grid v100-1q","100",0,[[1646,1154,59]]],["nvidia grid v100-2b","100",0,[[1440,900,45]]],["nvidia grid v100dx-16q","100",0,[[1280,1024,60]]],["nvidia grid v100dx-1q","100",0,[[1280,1024,60]]],["nvidia gtx 1060 hl","1060",0,[[3840,2160,60]]],["nvidia gtx 865m by imacgfx","865",0,[[2560,1440,60]]],["nvidia gtx 980m sli","980",0,[[1366,768,29]]],["nvidia gv-n660oc-2gd","660",0,[[1920,1200,60]]],["nvidia gv100","100",0,[[3840,2160,60]]],["nvidia gv100 [titan v]","100",0,[[2560,1440,60]]],["nvidia gv102","102",0,[[2560,1600,525]]],["nvidia hp geforce gt 730","730",0,[[1920,1080,55]]],["nvidia hp quadro 2000","2000",0,[[2560,1080,38]]],["nvidia hp quadro 4000","4000",0,[[2560,1080,52]]],["nvidia hp quadro 600","600",0,[[1360,768,41]]],["nvidia hp quadro k4000","4000",0,[[1920,1200,26]]],["nvidia hp quadro k620","620",0,[[1600,1200,94]]],["nvidia inno3d geforce gtx660","3",0,[[2560,1440,107]]],["nvidia microsoft virtual render driver","",0,[[1920,1080,59]]],["nvidia msi geforce gt 610","610",0,[[1920,1080,16]]],["nvidia msi geforce gt 630","630",0,[[1440,900,12]]],["nvidia msi geforce gt 635","635",0,[[1920,1080,30]]],["nvidia msi geforce gt 710","710",0,[[1920,1080,27]]],["nvidia msi geforce gt 730","730",0,[[1920,1080,53]]],["nvidia msi geforce gtx 1050 ti","1050",0,[[1920,1080,59]]],["nvidia msi geforce gtx 1060","1060",0,[[1920,1080,120]]],["nvidia msi geforce gtx 1070","1070",0,[[1920,1200,45]]],["nvidia msi geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia msi geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia msi geforce gtx 570 hd","570",0,[[1920,1200,60]]],["nvidia msi geforce gtx 580","580",0,[[2560,1440,60]]],["nvidia msi geforce gtx 650","650",0,[[2560,1080,52]]],["nvidia msi geforce gtx 650 ti","650",0,[[1920,1080,60]]],["nvidia msi geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia msi geforce gtx 660 ti","660",0,[[1680,1050,49]]],["nvidia msi geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia msi geforce gtx 745","745",0,[[1920,1080,55]]],["nvidia msi geforce gtx 760","760",0,[[1280,1024,30],[1920,1080,58]]],["nvidia msi geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia msi geforce gtx 950","950",0,[[1920,1080,59]]],["nvidia msi geforce gtx 960","960",0,[[1680,1050,120],[2560,1440,59]]],["nvidia msi geforce gtx 970","970",0,[[1680,1050,60]]],["nvidia msi geforce gtx 980","980",0,[[1920,1080,120],[3840,2160,60]]],["nvidia msi geforce gtx 980 ti","980",0,[[5120,2880,56]]],["nvidia n15e-gt","15",0,[[3840,2160,30]]],["nvidia null geforce 920a","920",0,[[1920,1080,25]]],["nvidia null graphics device","",0,[[1920,1080,24]]],["nvidia nvs 310","310",0,[[1280,1024,24],[1920,1080,15]]],["nvidia nvs 3100m","3100",0,[[1920,1080,10]]],["nvidia nvs 315","315",0,[[1280,1024,25],[1920,1080,15]]],["nvidia nvs 4200m","4200",0,[[1920,1080,11]]],["nvidia nvs 510","510",0,[[1920,1200,27],[2560,1080,24],[3440,1440,16]]],["nvidia nvs 5200m","5200",0,[[1366,768,55],[1600,900,33],[1920,1080,57]]],["nvidia nvs 5400m","5400",0,[[1600,900,46],[1920,1200,27]]],["nvidia p102-100","102",0,[[1600,1200,35]]],["nvidia p106-090","106",0,[[1920,1371,16]]],["nvidia p106-100","106",0,[[1920,1080,60],[3840,2160,30]]],["nvidia p106-100 custom","106",0,[[1680,1050,60]]],["nvidia palit geforce gtx 650","650",0,[[1920,1080,49]]],["nvidia palit geforce gtx 650 ti","650",0,[[1920,1080,59]]],["nvidia palit geforce gtx 660","660",0,[[1920,1080,26]]],["nvidia palit gtx 680 jetstream","680",0,[[1920,1080,60]]],["nvidia pegatron geforce gt 420","420",0,[[1400,1050,25]]],["nvidia pny geforce gt 610","610",0,[[1280,1024,19]]],["nvidia pny geforce gtx 1060","1060",0,[[1920,1080,60]]],["nvidia pny geforce gtx 460","460",0,[[1360,768,59]]],["nvidia pny geforce gtx 550 ti","550",0,[[1920,1080,55]]],["nvidia pny geforce gtx 570 hd","570",0,[[1280,1024,72]]],["nvidia pny geforce gtx 580","580",0,[[1920,1200,59]]],["nvidia pny geforce gtx 680","680",0,[[2560,1080,120]]],["nvidia pny geforce gtx 750","750",0,[[1280,1024,60]]],["nvidia pny geforce gtx 970","970",0,[[2560,1440,60]]],["nvidia pny geforce gtx 980","980",0,[[1920,1080,120]]],["nvidia point of view geforce gtx 470","470",0,[[1920,1080,59]]],["nvidia point of view geforce gtx 660 ti","660",0,[[1680,1050,59]]],["nvidia quadro 1000m","1000",0,[[1920,1080,28]]],["nvidia quadro 1000m,","1000",0,[[1920,1080,27]]],["nvidia quadro 2000","2000",0,[[1920,1080,51],[2560,1440,28]]],["nvidia quadro 2000d","2000",0,[[1280,1024,56]]],["nvidia quadro 2000m","2000",0,[[1920,1080,31]]],["nvidia quadro 3000m","3000",0,[[1920,1080,53],[2560,1440,6]]],["nvidia quadro 3000m opengl engine","3000",0,[[1920,1080,49]]],["nvidia quadro 4000","4000",0,[[1920,1080,56],[1920,1200,58]]],["nvidia quadro 4000m","4000",0,[[1920,1080,51]]],["nvidia quadro 410","410",0,[[1920,1080,23]]],["nvidia quadro 5000","5000",0,[[1920,1080,60],[2560,1080,55],[2560,1440,51]]],["nvidia quadro 5000 opengl engine","5000",0,[[1920,1200,59]]],["nvidia quadro 5000m","5000",0,[[1600,900,110]]],["nvidia quadro 600","600",0,[[1680,1050,28],[1920,1080,28],[1920,1200,26]]],["nvidia quadro 6000","6000",0,[[1920,1080,60],[1920,1200,60]]],["nvidia quadro 7000","7000",0,[[1920,1200,60]]],["nvidia quadro fx 1800m","1800",0,[[1600,900,15]]],["nvidia quadro fx 2800m","2800",0,[[1920,1200,36]]],["nvidia quadro fx grid k1","1",0,[[1920,1080,31]]],["nvidia quadro gp100","100",0,[[1920,1200,366]]],["nvidia quadro gv100","100",0,[[3840,2160,60],[4096,2160,60]]],["nvidia quadro k1000m","1000",0,[[1920,1080,28]]],["nvidia quadro k1000m by nick[d]vb","1000",0,[[1920,1080,36]]],["nvidia quadro k1100m","1100",0,[[1920,1080,56]]],["nvidia quadro k1100m by nick[d]vb","1100",0,[[1920,1080,66]]],["nvidia quadro k1100m opengl engine","1100",0,[[1920,1080,54]]],["nvidia quadro k1200","1200",0,[[1920,1080,60],[2560,1440,57],[3840,2160,28]]],["nvidia quadro k1200 opengl engine","1200",0,[[3840,2160,34]]],["nvidia quadro k2000","2000",0,[[1920,1080,55]]],["nvidia quadro k2000 opengl engine","2000",0,[[2560,1440,44]]],["nvidia quadro k2000d","2000",0,[[1280,1024,57],[1680,1050,57],[1920,1080,59]]],["nvidia quadro k2000m","2000",0,[[1920,1080,36]]],["nvidia quadro k2000m by nick[d]vb","2000",0,[[2560,1440,38]]],["nvidia quadro k2000m opengl engine","2000",0,[[1920,1080,43]]],["nvidia quadro k2100m","2100",0,[[1920,1080,58]]],["nvidia quadro k2100m by nick[d]vb","2100",0,[[2560,1440,54]]],["nvidia quadro k2100m opengl engine","2100",0,[[1920,1080,59]]],["nvidia quadro k2200","2200",0,[[1920,1080,60],[1920,1200,126],[5120,2880,25]]],["nvidia quadro k2200m","2200",0,[[1920,1080,60]]],["nvidia quadro k3000m","3000",0,[[1920,1080,59]]],["nvidia quadro k3000m by st3phl3","3000",0,[[2560,1440,50]]],["nvidia quadro k3100m","3100",0,[[1920,1080,60]]],["nvidia quadro k3100m by nikey22","3100",0,[[2560,1440,59]]],["nvidia quadro k3100m opengl engine","3100",0,[[2560,1440,58]]],["nvidia quadro k4000","4000",0,[[1920,1080,60],[1920,1200,59]]],["nvidia quadro k4000 opengl engine","4000",0,[[1920,1080,59]]],["nvidia quadro k4000m","4000",0,[[1920,1080,80]]],["nvidia quadro k4100m","4100",0,[[1920,1080,32]]],["nvidia quadro k4100m by nikey22","4100",0,[[2560,1440,60]]],["nvidia quadro k420","420",0,[[1366,768,57],[2560,1440,19],[3840,2160,10]]],["nvidia quadro k4200","4200",0,[[1920,1080,60],[2560,1440,59],[3840,2160,57]]],["nvidia quadro k5000","5000",0,[[1920,1080,60],[2560,1440,60]]],["nvidia quadro k5000 opengl engine","5000",0,[[2560,1600,59]]],["nvidia quadro k5000m","5000",0,[[1920,1080,60],[2560,1440,60]]],["nvidia quadro k5000m opengl engine","5000",0,[[2560,1440,60]]],["nvidia quadro k5100m","5100",0,[[1920,1080,60],[2560,1080,171]]],["nvidia quadro k5100m by nikey22","5100",0,[[2560,1440,60]]],["nvidia quadro k510m","510",0,[[1920,1080,33]]],["nvidia quadro k5200","5200",0,[[1920,1080,60],[1920,1200,60]]],["nvidia quadro k5200 opengl engine","5200",0,[[1920,1200,41]]],["nvidia quadro k600","600",0,[[1920,1080,28]]],["nvidia quadro k600 opengl engine","600",0,[[1920,1200,31]]],["nvidia quadro k6000","6000",0,[[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["nvidia quadro k6000 opengl engine","6000",0,[[1920,1080,59]]],["nvidia quadro k610m","610",0,[[1920,1080,36]]],["nvidia quadro k610m by nick[d]vb","610",0,[[1920,1080,34]]],["nvidia quadro k620","620",0,[[1920,1080,87],[1920,1200,69],[2560,1440,44]]],["nvidia quadro k620 opengl engine","620",0,[[1920,1080,59]]],["nvidia quadro k620m","620",0,[[1920,1080,49],[2880,1620,15]]],["nvidia quadro m1000m","1000",0,[[1920,1080,60]]],["nvidia quadro m1200","1200",0,[[1920,1080,60],[3840,2160,43]]],["nvidia quadro m2000","2000",0,[[1920,1080,73],[2560,1440,59]]],["nvidia quadro m2000m","2000",0,[[1920,1080,60]]],["nvidia quadro m2000m special","2000",0,[[1920,1080,60]]],["nvidia quadro m2200","2200",0,[[1920,1080,60]]],["nvidia quadro m2200 mobile","2200",0,[[3840,2160,13]]],["nvidia quadro m3000m","3000",0,[[1920,1080,60]]],["nvidia quadro m4000","4000",0,[[1920,1080,120],[1920,1200,60],[2560,1440,60]]],["nvidia quadro m4000 opengl engine","4000",0,[[1920,1080,60]]],["nvidia quadro m4000m","4000",0,[[1920,1080,60],[3840,2160,69]]],["nvidia quadro m5000","5000",0,[[1920,1080,60],[1920,1200,60],[2560,1440,59]]],["nvidia quadro m5000m","5000",0,[[1920,1080,212],[3840,2160,60]]],["nvidia quadro m500m","500",0,[[1920,1080,58],[2880,1620,29]]],["nvidia quadro m520","520",0,[[1920,1080,59],[3840,2160,27]]],["nvidia quadro m5500","5500",0,[[3440,1440,60]]],["nvidia quadro m6000","6000",0,[[1920,1080,408],[2560,1440,60]]],["nvidia quadro m6000 24gb","6000",0,[[1680,1050,60],[1920,1200,60]]],["nvidia quadro m600m","600",0,[[1920,1080,59]]],["nvidia quadro m620","620",0,[[1920,1080,60]]],["nvidia quadro nvs 4200m","4200",0,[[1600,900,26],[1920,1080,19]]],["nvidia quadro p1000","1000",0,[[1920,1080,60],[1920,1200,60]]],["nvidia quadro p1000 mobile","1000",0,[[1920,1080,60]]],["nvidia quadro p2000","2000",0,[[1680,1050,60],[1920,1080,242],[2560,1440,60]]],["nvidia quadro p2000 mobile","2000",0,[[1920,1080,60]]],["nvidia quadro p2000 opengl engine","2000",0,[[1920,1080,59]]],["nvidia quadro p2000 with max-q design","2000",0,[[1920,1080,60],[3840,2160,67]]],["nvidia quadro p2200","2200",0,[[1920,1080,60],[3840,2160,340]]],["nvidia quadro p3000","3000",0,[[1920,1080,60]]],["nvidia quadro p3200","3200",0,[[1920,1080,60],[3840,2160,60]]],["nvidia quadro p3200 mobile","3200",0,[[3840,2160,60]]],["nvidia quadro p3200 with max-q design","3200",0,[[2560,1440,60]]],["nvidia quadro p400","400",0,[[1680,1050,46],[1920,1080,57],[1920,1200,54]]],["nvidia quadro p4000","4000",0,[[1920,1080,60],[3840,2160,167]]],["nvidia quadro p4200","4200",0,[[1920,1080,60],[3840,2160,60]]],["nvidia quadro p4200 with max-q design","4200",0,[[3839,2159,53]]],["nvidia quadro p500","500",0,[[1920,1080,60]]],["nvidia quadro p5000","5000",0,[[1920,1080,60]]],["nvidia quadro p5000 opengl engine","5000",0,[[3840,2160,58]]],["nvidia quadro p520","520",0,[[1920,1080,60]]],["nvidia quadro p5200","5200",0,[[3840,2160,100]]],["nvidia quadro p600","600",0,[[1920,1080,60]]],["nvidia quadro p6000","6000",0,[[1920,1080,60],[2560,1440,60],[2560,1600,411]]],["nvidia quadro p620","620",0,[[1920,1080,65]]],["nvidia quadro rtx 3000","3000",0,[[1920,1080,60]]],["nvidia quadro rtx 3000 mobile / max-q","3000",0,[[3840,2160,60]]],["nvidia quadro rtx 3000 with max-q design","3000",0,[[3240,2160,60]]],["nvidia quadro rtx 4000","4000",0,[[1920,1080,60]]],["nvidia quadro rtx 4000 mobile / max-q","4000",0,[[1920,1080,60]]],["nvidia quadro rtx 4000 with max-q design","4000",0,[[1920,1080,60],[3840,2160,60]]],["nvidia quadro rtx 5000","5000",0,[[1920,1080,443],[2560,1440,60]]],["nvidia quadro rtx 5000 mobile / max-q","5000",0,[[3840,2160,60]]],["nvidia quadro rtx 5000 with max-q design","5000",0,[[1920,1080,60],[3840,2160,60]]],["nvidia quadro rtx 6000","6000",0,[[1920,1080,438],[2560,1440,60]]],["nvidia quadro rtx 8000","8000",0,[[1920,1080,60],[1920,1200,60]]],["nvidia quadro t1000","1000",0,[[1920,1080,60],[2560,1440,41]]],["nvidia quadro t1000 mobile","1000",0,[[1920,1080,277]]],["nvidia quadro t1000 with max-q design","1000",0,[[1920,1080,60]]],["nvidia quadro t2000","2000",0,[[1920,1080,60]]],["nvidia quadro t2000 mobile / max-q","2000",0,[[1920,1080,302]]],["nvidia quadro t2000 with max-q design","2000",0,[[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["nvidia rtx a1000 laptop gpu","1000",0,[[1920,1080,60]]],["nvidia rtx a2000","2000",0,[[3840,2160,60]]],["nvidia rtx a2000 laptop gpu","2000",0,[[2400,1600,120],[3840,2160,60]]],["nvidia rtx a3000 laptop gpu","3000",0,[[1920,1080,60],[3840,2160,60]]],["nvidia rtx a4000","4000",0,[[1920,1080,60],[3840,2160,60]]],["nvidia rtx a4000 laptop gpu","4000",0,[[1920,1080,60]]],["nvidia rtx a5000","5000",0,[[3840,2160,60]]],["nvidia rtx a5000 laptop gpu","5000",0,[[3840,2160,60]]],["nvidia rtx a6000","6000",0,[[1920,1200,60]]],["nvidia sony geforce 410m","410",0,[[1366,768,24]]],["nvidia t1000","1000",0,[[1920,1080,43],[3840,2160,60]]],["nvidia t1200 laptop gpu","1200",0,[[1920,1080,60]]],["nvidia t400","400",0,[[3840,2160,35]]],["nvidia t500","500",0,[[1920,1080,60],[3839,2159,52]]],["nvidia t600","600",0,[[1920,1080,60]]],["nvidia tesla c2050 / c2070","2050",0,[[1920,1080,105]]],["nvidia tesla c2070","2070",0,[[1920,1200,60]]],["nvidia tesla c2075","2075",0,[[1920,1080,60]]],["nvidia tesla k10","10",0,[[1920,1080,60]]],["nvidia tesla k10.g1.8gb","10",0,[[1440,900,59]]],["nvidia tesla k20m","20",0,[[1240,821,118]]],["nvidia tesla k20xm","20",0,[[3840,2400,17]]],["nvidia tesla k80","80",0,[[1664,896,66],[3840,2160,30]]],["nvidia tesla m10","10",0,[[1440,900,60],[1280,1024,60]]],["nvidia tesla m40","40",0,[[1600,1024,190]]],["nvidia tesla m6","6",0,[[1920,1080,59]]],["nvidia tesla m60","60",0,[[1366,768,60],[1920,962,61],[3840,2160,27]]],["nvidia tesla p100 pcie 16gb","100",0,[[1920,1080,60]]],["nvidia tesla p100-pcie-16gb","100",0,[[1920,1080,103]]],["nvidia tesla p4","4",0,[[1680,1050,60]]],["nvidia tesla p40","40",0,[[1546,877,62],[1920,1200,60]]],["nvidia tesla t4","4",0,[[1440,900,33],[1920,1080,60]]],["nvidia tesla v100-pcie-16gb","100",0,[[1920,997,57]]],["nvidia tesla v100-pcie-32gb","100",0,[[1920,1080,57]]],["nvidia tesla v100-sxm2-16gb","100",0,[[1920,1080,60]]],["nvidia tesla v100-sxm2-32gb","100",0,[[1920,1080,1],[2560,1440,60]]],["nvidia titan rtx","rtx",0,[[2560,1440,60],[3840,2160,680]]],["nvidia titan v","v",0,[[2560,1440,622],[3840,2160,60]]],["nvidia titan x","x",0,[[2560,1080,60],[3840,1600,75],[3840,2160,339]]],["nvidia titan xp","xp",0,[[1920,1200,60],[2560,1440,60],[3440,1440,105]]],["nvidia titan xp collectors","xp",0,[[1920,1080,60],[2560,1440,893],[5120,2880,60]]],["nvidia toshiba geforce gt 525m","525",0,[[1366,768,33]]],["nvidia tu102 [titan rtx]","102",0,[[3840,2160,60]]],["nvidia tu107","107",0,[[1920,1080,312]]],["nvidia tu117m","117",0,[[1920,1080,337]]],["nvidia unknown","",0,[[1920,1080,60]]],["nvidia zotac geforce gt 430","430",0,[[1600,900,32]]],["nvidia zotac geforce gt 610","610",0,[[1920,1080,15]]],["nvidia zotac geforce gt 630","630",0,[[1360,768,46]]],["nvidia zotac geforce gt 740","740",0,[[1280,1024,118]]],["nvidia zotac geforce gtx 460","460",0,[[1920,1080,59]]],["nvidia zotac geforce gtx 550 ti","550",0,[[1920,1080,42]]],["nvidia zotac geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 580","580",0,[[1920,1080,48]]],["nvidia zotac geforce gtx 650","650",0,[[1920,1080,44]]],["nvidia zotac geforce gtx 650 ti","650",0,[[1920,1080,58]]],["nvidia zotac geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 680","680",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 750","750",0,[[1680,1050,114],[1920,1080,60]]],["nvidia zotac geforce gtx 760","760",0,[[1920,1080,101]]],["nvidia zotac geforce gtx 770","770",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 960","960",0,[[2048,1152,60]]]]\')},145:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["amd [amd/ati] fiji [radeon r9 fury / nano series]","9",0,[[1920,1200,162]]],["amd asus amd radeon r9-990x","9",0,[[1920,1080,60]]],["amd asus radeon r7 250","7",0,[[800,638,60]]],["amd asus radeon r7 260x","7",0,[[2560,1080,65]]],["amd asus radeon r9 270x","9",0,[[1024,768,85],[1920,1080,60]]],["amd asus radeon r9 280","9",0,[[1920,1080,60]]],["amd asus radeon rx 460","460",0,[[1360,768,104]]],["amd asus radeon rx 470","470",0,[[1920,1080,60]]],["amd asus radeon rx 480","480",0,[[1920,1080,124]]],["amd asus radeon rx 550","550",0,[[1440,900,60],[1920,1080,49]]],["amd asus radeon rx 5500 xt","5500",0,[[1920,1080,325]]],["amd asus radeon rx 560","560",0,[[1360,768,60],[1920,1080,85]]],["amd asus radeon rx 570","570",0,[[1600,900,202],[1920,1080,60]]],["amd asus radeon rx 5700","5700",0,[[1920,1080,327]]],["amd asus radeon rx 5700 xt","5700",0,[[1920,1080,224],[2560,1440,60]]],["amd asus radeon rx 580","580",0,[[1920,1080,177],[2560,1080,60]]],["amd asus radeon rx vega","rx",0,[[2560,1440,117]]],["amd ati mobility radeon hd 5870","5870",0,[[1920,1200,19]]],["amd baffin amd radeon rx 560","560",0,[[1920,1080,60]]],["amd ellesmere radeon rx 570","570",0,[[1920,1080,60]]],["amd embedded radeon e9171","9171",0,[[3840,2160,26]]],["amd embedded radeon e9173","9173",0,[[3840,2160,16]]],["amd gigabyte radeon rx 580","580",0,[[1920,1080,60]]],["amd madison [mobility radeon hd 5650 / 6530m/6550m]","5650",0,[[1366,768,43]]],["amd mobility radeon hd 4250","4250",0,[[963,722,26]]],["amd mobility radeon hd 5000","5000",0,[[1366,768,47]]],["amd mobility radeon hd 5400","5400",0,[[1366,768,24]]],["amd mobility radeon hd 5430","5430",0,[[1600,900,15],[1920,1080,60]]],["amd mobility radeon hd 5470","5470",0,[[1366,768,24]]],["amd mobility radeon hd 5570","5570",0,[[1920,1080,27]]],["amd mobility radeon hd 5730 / 6570m","5730",0,[[1366,768,58]]],["amd mobility radeon hd 5850","5850",0,[[1600,900,55]]],["amd mobility radeon hd 5870","5870",0,[[1600,900,64],[1920,1200,53]]],["amd park [mobility radeon hd 5430","5430",0,[[1280,720,11]]],["amd pitcairn pro radeon hd 7850","7850",0,[[1920,1080,60]]],["amd powercolor radeon r9 280","9",0,[[1920,1080,60]]],["amd radeon","",0,[[1920,1080,299],[3440,1440,60]]],["amd radeon 500","500",0,[[1920,1080,73]]],["amd radeon 520","520",0,[[1920,1080,35],[2560,1440,29]]],["amd radeon 530","530",0,[[1366,768,60],[1920,1080,30]]],["amd radeon 535","535",0,[[1920,1080,35]]],["amd radeon 535dx","535",0,[[1366,768,31],[1920,1080,37]]],["amd radeon 540","540",0,[[1920,1080,38]]],["amd radeon 540 / rx 540x/550/550x","540",0,[[2560,1440,88]]],["amd radeon 540x","540",0,[[1920,1080,59]]],["amd radeon 550","550",0,[[1920,1080,115]]],["amd radeon 550x","550",0,[[1920,1080,28]]],["amd radeon 610","610",0,[[1920,1080,29]]],["amd radeon 620","620",0,[[1920,1080,18]]],["amd radeon 625","625",0,[[1366,768,55],[1920,1080,47]]],["amd radeon 630","630",0,[[1920,1080,29]]],["amd radeon 6600m and 6700m","6600",0,[[1366,768,36],[1440,900,60]]],["amd radeon 6800","6800",0,[[3440,1440,100]]],["amd radeon 7500m/7600m","7500",0,[[1366,768,37]]],["amd radeon 7950 x2","7950",0,[[2560,1440,174]]],["amd radeon d700","700",0,[[2560,1440,120]]],["amd radeon e6460","6460",0,[[1600,1200,13]]],["amd radeon e6760","6760",0,[[1200,900,54],[1920,1080,42]]],["amd radeon e8860","8860",0,[[1920,1200,27],[2560,1374,88]]],["amd radeon e8870","8870",0,[[1920,1080,81]]],["amd radeon e8870mxm","8870",0,[[1920,1080,60]]],["amd radeon e9260","9260",0,[[1680,1050,60],[3840,2160,38]]],["amd radeon e9550","9550",0,[[1680,1050,60],[3840,2160,58]]],["amd radeon embedded e9560","9560",0,[[1920,1200,60]]],["amd radeon fury","",0,[[1920,1080,60]]],["amd radeon fury x","x",0,[[1920,1080,60],[2560,1440,144]]],["amd radeon hd - firepro d300","300",0,[[1920,1080,60]]],["amd radeon hd - firepro d300 opengl engine","300",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd - firepro d500 opengl engine","500",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd - firepro d700 opengl engine","700",0,[[3840,2160,52]]],["amd radeon hd 2600 xt","2600",1,[[2560,1600,-1]]],["amd radeon hd 5000","5000",0,[[1920,1080,8]]],["amd radeon hd 5400","5400",0,[[1920,1080,12]]],["amd radeon hd 5450","5450",0,[[1920,1080,13]]],["amd radeon hd 5470","5470",0,[[1280,1024,16]]],["amd radeon hd 5500","5500",0,[[1920,1080,27]]],["amd radeon hd 5570","5570",0,[[1920,1080,60],[2048,1152,31]]],["amd radeon hd 5600","5600",0,[[1920,1080,56]]],["amd radeon hd 5650","5650",0,[[1366,768,53]]],["amd radeon hd 5670","5670",1,[[1920,1080,-1],[2560,1440,-1]]],["amd radeon hd 5670 opengl engine","5670",1,[[2560,1440,-1]]],["amd radeon hd 5700","5700",0,[[1920,1080,59]]],["amd radeon hd 5730","5730",0,[[1366,768,46],[1680,1050,40]]],["amd radeon hd 5750","5750",1,[[1920,1080,-1],[1920,1200,-1],[2560,1440,-1]]],["amd radeon hd 5750 opengl engine","5750",1,[[2560,1440,-1]]],["amd radeon hd 5770","5770",0,[[1776,1000,43],[1920,1080,59]]],["amd radeon hd 5800","5800",0,[[1366,768,60],[1920,1200,102]]],["amd radeon hd 5850","5850",0,[[1920,1080,60]]],["amd radeon hd 5870","5870",0,[[1280,960,75],[1920,1080,60],[2048,1280,60]]],["amd radeon hd 5870m","5870",0,[[2560,1080,31]]],["amd radeon hd 5970","5970",0,[[1360,768,60],[1920,1080,60]]],["amd radeon hd 6230","6230",0,[[1366,768,13]]],["amd radeon hd 6250","6250",0,[[1280,800,8],[1366,768,8]]],["amd radeon hd 6290","6290",1,[[1366,768,-1]]],["amd radeon hd 6300m","6300",1,[[1366,768,-1]]],["amd radeon hd 6310","6310",1,[[1366,768,-1]]],["amd radeon hd 6320","6320",1,[[1366,768,-1]]],["amd radeon hd 6350","6350",0,[[1280,1024,18],[1920,1080,14]]],["amd radeon hd 6370d","6370",0,[[1920,1080,14]]],["amd radeon hd 6370m","6370",0,[[1366,768,25]]],["amd radeon hd 6380g","6380",0,[[1366,768,19]]],["amd radeon hd 6400","6400",0,[[1920,1080,13]]],["amd radeon hd 6400m","6400",0,[[1366,768,28]]],["amd radeon hd 6400m/7400m","6400",0,[[1366,768,28]]],["amd radeon hd 6410d","6410",0,[[1920,1080,11]]],["amd radeon hd 6450","6450",0,[[1920,1080,14]]],["amd radeon hd 6450 / r5 230","6450",0,[[1440,900,12]]],["amd radeon hd 6450 230","6450",0,[[1920,1080,15]]],["amd radeon hd 6470m","6470",0,[[1366,768,27],[1600,900,21]]],["amd radeon hd 6470m/7400m","6470",0,[[1366,768,44]]],["amd radeon hd 6480g","6480",0,[[1280,768,19],[1366,768,27],[1600,900,18]]],["amd radeon hd 6490m","6490",1,[[1366,768,-1],[1440,900,-1],[1680,1050,-1]]],["amd radeon hd 6500","6500",0,[[1920,1080,25]]],["amd radeon hd 6500m/5600","6500",0,[[1920,1080,27]]],["amd radeon hd 6510","6510",0,[[1600,900,32]]],["amd radeon hd 6520g","6520",0,[[1366,768,21],[1600,900,20]]],["amd radeon hd 6530d","6530",0,[[1366,768,31],[1440,900,36],[1920,1080,24]]],["amd radeon hd 6540","6540",0,[[1600,1200,13]]],["amd radeon hd 6550d","6550",0,[[1920,1080,28]]],["amd radeon hd 6570","6570",0,[[1920,1080,52],[2560,1440,17]]],["amd radeon hd 6620g","6620",0,[[1360,768,43],[1366,768,28]]],["amd radeon hd 6630m","6630",1,[[1366,768,-1],[1600,900,-1],[1920,1080,-1]]],["amd radeon hd 6630m/6650m/6750m/7670m/7690m","6630",1,[[1366,768,-1],[1920,1080,-1]]],["amd radeon hd 6650m","6650",0,[[1366,768,51],[1600,900,31]]],["amd radeon hd 6670","6670",0,[[1920,1080,55]]],["amd radeon hd 6700","6700",0,[[1920,1080,56]]],["amd radeon hd 6700 green","6700",0,[[1360,768,89]]],["amd radeon hd 6700m/7700m/7900m","6700",0,[[1366,768,59]]],["amd radeon hd 6730m/6770m","6730",0,[[1366,768,58],[1920,1080,46]]],["amd radeon hd 6730m/6770m/7690m xt","6730",0,[[1920,1080,48]]],["amd radeon hd 6750","6750",0,[[1440,900,72],[1920,1080,60]]],["amd radeon hd 6750m","6750",1,[[1440,900,-1],[1920,1080,-1],[1920,1200,-1]]],["amd radeon hd 6770","6770",0,[[1920,1080,60]]],["amd radeon hd 6770m","6770",1,[[1440,900,-1],[2560,1440,-1]]],["amd radeon hd 6770m opengl engine","6770",1,[[2560,1440,-1]]],["amd radeon hd 6790","6790",0,[[1920,1080,59]]],["amd radeon hd 6800","6800",0,[[1280,1024,89],[1920,1080,60]]],["amd radeon hd 6800m","6800",0,[[1600,900,18],[1920,1080,40]]],["amd radeon hd 6850","6850",0,[[1920,1080,59],[2560,1600,54]]],["amd radeon hd 6870","6870",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd 6900","6900",0,[[1920,1080,60]]],["amd radeon hd 6900m","6900",0,[[1920,1080,60]]],["amd radeon hd 6950","6950",0,[[1680,1050,60],[1920,1080,41]]],["amd radeon hd 6970","6970",0,[[1920,1080,60]]],["amd radeon hd 6970m","6970",1,[[2560,1440,-1]]],["amd radeon hd 6970m opengl engine","6970",1,[[2560,1440,-1]]],["amd radeon hd 6990","6990",0,[[1920,1080,60]]],["amd radeon hd 7000","7000",0,[[1920,1080,24]]],["amd radeon hd 7290","7290",0,[[1366,768,9]]],["amd radeon hd 7310","7310",0,[[1366,768,14]]],["amd radeon hd 7340","7340",0,[[1366,768,17],[1920,1080,10]]],["amd radeon hd 7340g","7340",0,[[1366,768,15]]],["amd radeon hd 7340m","7340",0,[[1366,768,15]]],["amd radeon hd 7350","7350",0,[[1920,1080,13]]],["amd radeon hd 7400","7400",0,[[1920,1080,18]]],["amd radeon hd 7400g","7400",0,[[963,768,31]]],["amd radeon hd 7400m","7400",0,[[1366,768,44]]],["amd radeon hd 7420g","7420",0,[[1366,768,28],[1600,900,26]]],["amd radeon hd 7450","7450",0,[[1920,1080,15]]],["amd radeon hd 7450a","7450",0,[[1920,1080,15]]],["amd radeon hd 7450m","7450",0,[[1366,768,30]]],["amd radeon hd 7470","7470",0,[[1680,1050,22],[1920,1080,144]]],["amd radeon hd 7470m","7470",0,[[1366,768,31],[1600,900,23]]],["amd radeon hd 7480d","7480",0,[[1280,1024,25],[1920,1080,24],[1920,1200,18]]],["amd radeon hd 7500","7500",0,[[1366,696,49],[1366,768,49]]],["amd radeon hd 7500g","7500",0,[[1366,768,26]]],["amd radeon hd 7500m/7600m","7500",0,[[1366,768,46]]],["amd radeon hd 7520g","7520",0,[[1366,768,33]]],["amd radeon hd 7520g + hd 7400m dual","7520",0,[[1366,768,34]]],["amd radeon hd 7520g + hd 7600m dual","7520",0,[[1366,768,31],[1600,900,41]]],["amd radeon hd 7540d","7540",0,[[1024,768,55],[1280,1024,44],[1920,1080,22]]],["amd radeon hd 7540d + hd 6670 dual","7540",0,[[1280,1024,36]]],["amd radeon hd 7550m/7650m","7550",0,[[1366,768,57]]],["amd radeon hd 7560d","7560",0,[[1920,1080,34]]],["amd radeon hd 7560d + hd 6570 dual","7560",0,[[1680,1050,44]]],["amd radeon hd 7560d + hd 6670 dual","7560",0,[[800,638,60]]],["amd radeon hd 7570","7570",0,[[1024,768,72],[1920,1080,52]]],["amd radeon hd 7570m","7570",0,[[1366,768,35]]],["amd radeon hd 7570m/hd 7670m","7570",0,[[1366,768,50],[1600,900,29]]],["amd radeon hd 7600","7600",0,[[1920,1080,60]]],["amd radeon hd 7600a","7600",0,[[1920,1080,28]]],["amd radeon hd 7600g","7600",0,[[1366,768,29]]],["amd radeon hd 7600g + 7500m/7600m dual","7600",0,[[1366,768,19]]],["amd radeon hd 7600g + hd 8670m dual","7600",0,[[1366,768,29]]],["amd radeon hd 7600g + hd dual","7600",0,[[1366,768,20]]],["amd radeon hd 7600m","7600",0,[[1366,768,56]]],["amd radeon hd 7600m/7700m","7600",0,[[1366,768,31]]],["amd radeon hd 7610m","7610",0,[[1366,768,43]]],["amd radeon hd 7620g","7620",0,[[1366,768,22],[1920,1080,19]]],["amd radeon hd 7640g","7640",0,[[1366,768,38]]],["amd radeon hd 7640g + 7470m dual","7640",0,[[1366,768,32]]],["amd radeon hd 7640g + 7600m dual","7640",0,[[1366,768,23]]],["amd radeon hd 7640g + 7670m dual","7640",0,[[1600,900,15]]],["amd radeon hd 7640g + 8500m dual","7640",0,[[1366,768,35]]],["amd radeon hd 7640g + hd 7400m dual","7640",0,[[1366,768,37]]],["amd radeon hd 7640g + hd 7500 dual","7640",0,[[1366,768,35]]],["amd radeon hd 7640g + hd 7670m dual","7640",0,[[1366,768,34]]],["amd radeon hd 7640g + hd 8500m dual","7640",0,[[1366,768,40]]],["amd radeon hd 7640g + hd 8570m dual","7640",0,[[1366,768,31]]],["amd radeon hd 7650a","7650",0,[[1680,1050,43],[1920,1080,15]]],["amd radeon hd 7650m","7650",0,[[1366,768,41],[1600,900,45]]],["amd radeon hd 7660d","7660",0,[[1680,1050,40],[1920,1008,60],[1920,1080,38]]],["amd radeon hd 7660d + hd 6570 dual","7660",0,[[1200,900,32]]],["amd radeon hd 7660d + hd 6670 dual","7660",0,[[1360,768,57],[1920,1080,53]]],["amd radeon hd 7660g","7660",0,[[1366,768,44],[1600,900,41],[1920,1080,34],[1920,1200,27]]],["amd radeon hd 7660g + 7600m dual","7660",0,[[1366,768,53],[1600,900,45]]],["amd radeon hd 7660g + 7670m dual","7660",0,[[1366,768,52]]],["amd radeon hd 7660g + 8670m dual","7660",0,[[1600,900,46]]],["amd radeon hd 7660g + hd 7600m dual","7660",0,[[1366,768,50]]],["amd radeon hd 7660g + hd 7670m dual","7660",0,[[1366,768,35]]],["amd radeon hd 7660g + hd 8600m dual","7660",0,[[1600,900,29]]],["amd radeon hd 7670","7670",0,[[1920,1080,39]]],["amd radeon hd 7670m","7670",0,[[1366,768,49],[1920,1080,36]]],["amd radeon hd 7700","7700",0,[[1400,1050,45],[1920,1080,60]]],["amd radeon hd 7700m","7700",0,[[1920,1080,54]]],["amd radeon hd 7730m","7730",0,[[1920,1080,57]]],["amd radeon hd 7750","7750",0,[[1280,1024,60],[1600,900,60],[1400,1050,98],[1920,1080,60],[3840,2160,23]]],["amd radeon hd 7750 / r7 250e","7750",0,[[2560,1080,69]]],["amd radeon hd 7750m","7750",0,[[1680,1050,57]]],["amd radeon hd 7770","7770",0,[[1920,1080,60]]],["amd radeon hd 7770 / r7 250x","7770",0,[[1680,1050,78]]],["amd radeon hd 7770 ghz","7770",0,[[1920,1080,78]]],["amd radeon hd 7790","7790",0,[[1920,1080,16]]],["amd radeon hd 7790 / r7 360 / r9 260/360","7790",0,[[1280,1024,131]]],["amd radeon hd 7800","7800",0,[[1920,1080,60]]],["amd radeon hd 7800m","7800",0,[[1920,1080,57]]],["amd radeon hd 7850","7850",0,[[1920,1080,60]]],["amd radeon hd 7850 / r7 265 / r9 270 1024sp","7850",0,[[1280,1024,87]]],["amd radeon hd 7870","7870",0,[[1920,1080,120],[2560,1440,60],[2560,1600,114],[3840,2160,30]]],["amd radeon hd 7870 ghz","7870",0,[[1920,1080,75]]],["amd radeon hd 7870 xt","7870",0,[[1920,1080,57],[3840,2160,53]]],["amd radeon hd 7870m","7870",0,[[1920,1080,22],[2732,1536,40]]],["amd radeon hd 7900","7900",0,[[2560,1600,59]]],["amd radeon hd 7950","7950",0,[[1920,1080,50]]],["amd radeon hd 7950 / r9 280","7950",0,[[1920,1080,59]]],["amd radeon hd 7950 oem / r9 280","7950",0,[[1920,1080,60]]],["amd radeon hd 7970","7970",0,[[1920,1080,60]]],["amd radeon hd 7970 / r9 280x","7970",0,[[1920,1080,193]]],["amd radeon hd 7970m","7970",0,[[1366,768,60],[1920,1080,60]]],["amd radeon hd 7970x/8970 280x","7970",0,[[1920,1080,60]]],["amd radeon hd 7990","7990",0,[[1920,1080,60],[5120,2880,63]]],["amd radeon hd 7xxx","7",0,[[1920,1080,60]]],["amd radeon hd 8180","8180",0,[[1366,768,10]]],["amd radeon hd 8200 / r3","8200",0,[[1366,768,21],[1600,900,13],[1680,1050,13]]],["amd radeon hd 8210","8210",0,[[1366,768,18]]],["amd radeon hd 8240","8240",0,[[1600,900,17]]],["amd radeon hd 8240 / r3","8240",0,[[1366,768,14]]],["amd radeon hd 8250","8250",0,[[1366,768,14],[1920,1200,10]]],["amd radeon hd 8280","8280",0,[[1600,900,60]]],["amd radeon hd 8280 / r3","8280",0,[[1366,768,22]]],["amd radeon hd 8280e","8280",0,[[2880,1620,6]]],["amd radeon hd 8330","8330",0,[[1366,768,24]]],["amd radeon hd 8350","8350",0,[[1920,1080,57]]],["amd radeon hd 8350g","8350",0,[[1366,768,18]]],["amd radeon hd 8370d","8370",0,[[1366,768,60],[1280,1024,26],[1920,1080,22]]],["amd radeon hd 8400","8400",0,[[1366,768,30],[1920,1080,16]]],["amd radeon hd 8400 / r3","8400",0,[[1360,768,19],[1366,768,22],[1920,1080,12]]],["amd radeon hd 8400e","8400",0,[[1680,1050,17],[1920,1080,16],[1920,1200,14]]],["amd radeon hd 8410g","8410",0,[[1366,768,32]]],["amd radeon hd 8450g","8450",0,[[1366,768,23]]],["amd radeon hd 8450g + hd 8750m dual","8450",0,[[1366,768,21]]],["amd radeon hd 8470","8470",0,[[1920,1080,17]]],["amd radeon hd 8470 + 7660d dual","8470",0,[[1920,1080,60]]],["amd radeon hd 8470d","8470",0,[[1280,1024,44],[1920,1080,21]]],["amd radeon hd 8470d + hd 6450 dual","8470",0,[[1600,900,37]]],["amd radeon hd 8490","8490",0,[[1920,1080,18],[1920,1200,20]]],["amd radeon hd 8500m","8500",0,[[1366,768,41],[1920,1080,19]]],["amd radeon hd 8500m/8700m","8500",0,[[1920,1080,30]]],["amd radeon hd 8510g","8510",0,[[1366,768,29],[1920,1080,17]]],["amd radeon hd 8550","8550",0,[[1920,1080,25]]],["amd radeon hd 8550g","8550",0,[[1366,768,34],[1600,900,41],[1920,1080,34]]],["amd radeon hd 8550g + 8500m dual","8550",0,[[1366,768,42]]],["amd radeon hd 8550g + 8600 dual","8550",0,[[1920,1080,27]]],["amd radeon hd 8550g + hd 8570m dual","8550",0,[[1366,768,32]]],["amd radeon hd 8550g + hd 8600 dual","8550",0,[[1366,768,60]]],["amd radeon hd 8550g + hd 8750m dual","8550",0,[[1366,768,37]]],["amd radeon hd 8550g + r5 m230 dual","8550",0,[[1366,768,29]]],["amd radeon hd 8570","8570",0,[[1280,1024,60],[1680,1050,54],[1920,1080,50]]],["amd radeon hd 8570 / r5 430 / r7 240 / radeon 520","8570",0,[[1920,1080,25]]],["amd radeon hd 8570d","8570",0,[[1920,1080,16]]],["amd radeon hd 8570d + r7 240 dual","8570",0,[[1920,1080,45]]],["amd radeon hd 8570m","8570",0,[[1366,768,40]]],["amd radeon hd 8600","8600",0,[[1366,768,41]]],["amd radeon hd 8600m","8600",0,[[1366,768,42],[1920,1080,14]]],["amd radeon hd 8610g","8610",0,[[1366,768,31],[1920,1080,16]]],["amd radeon hd 8610g + 8600m dual","8610",0,[[1366,768,22]]],["amd radeon hd 8610g + hd 8600m dual","8610",0,[[1366,768,41]]],["amd radeon hd 8610g + hd 8670m dual","8610",0,[[1366,768,33]]],["amd radeon hd 8650g","8650",0,[[1360,768,44],[1366,768,44]]],["amd radeon hd 8650g + 8500m dual","8650",0,[[1366,768,35]]],["amd radeon hd 8650g + 8600 dual","8650",0,[[1920,1080,38]]],["amd radeon hd 8650g + 8600m dual","8650",0,[[1366,768,21]]],["amd radeon hd 8650g + 8670m dual","8650",0,[[1366,768,66]]],["amd radeon hd 8650g + 8750m dual","8650",0,[[1920,1080,28]]],["amd radeon hd 8650g + hd 7600m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + hd 8500m dual","8650",0,[[1366,768,23]]],["amd radeon hd 8650g + hd 8570m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + hd 8600m dual","8650",0,[[1366,768,46],[1600,900,29]]],["amd radeon hd 8650g + hd 8750m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + r5 m200 dual","8650",0,[[1366,768,35]]],["amd radeon hd 8670 / r7 250","8670",0,[[1024,768,1]]],["amd radeon hd 8670a/8670m/8690m","8670",0,[[1366,768,47]]],["amd radeon hd 8670a/8670m/8750m","8670",0,[[1366,768,60]]],["amd radeon hd 8670d","8670",0,[[1024,768,45],[1280,1024,69],[1920,1080,38]]],["amd radeon hd 8670d + 7700 dual","8670",0,[[1680,1050,58]]],["amd radeon hd 8670d + hd 6670 dual","8670",0,[[1680,1050,33]]],["amd radeon hd 8670d + r5 200 dual","8670",0,[[2560,1080,14]]],["amd radeon hd 8670d + r7 200 dual","8670",0,[[1920,1080,37]]],["amd radeon hd 8670m","8670",0,[[1366,768,41]]],["amd radeon hd 8690a","8690",0,[[1920,1080,31]]],["amd radeon hd 8690m","8690",0,[[1600,900,35]]],["amd radeon hd 8700m","8700",0,[[1366,768,60]]],["amd radeon hd 8730m","8730",0,[[1366,768,59]]],["amd radeon hd 8750m","8750",0,[[1366,768,60]]],["amd radeon hd 8770","8770",0,[[1920,1080,111]]],["amd radeon hd 8790m","8790",0,[[1600,900,78],[1920,1080,60]]],["amd radeon hd 8800m","8800",0,[[1920,1080,60],[2880,1800,45]]],["amd radeon hd 8830m","8830",0,[[1920,1080,82]]],["amd radeon hd 8850m","8850",0,[[1366,768,45]]],["amd radeon hd 8870m","8870",0,[[1280,1024,60],[1600,900,60]]],["amd radeon hd 8950","8950",0,[[1920,1080,60],[1920,1200,59]]],["amd radeon hd 8970","8970",0,[[2560,1600,60]]],["amd radeon hd 8970m","8970",0,[[1920,1080,146],[1920,1200,60]]],["amd radeon hd 8xxx","8",0,[[1920,1080,120],[2560,1440,58]]],["amd radeon hd5450","5450",0,[[1280,720,24]]],["amd radeon hd6870","6870",0,[[1920,1080,60]]],["amd radeon hd7970m","7970",0,[[2560,1440,116]]],["amd radeon hd8530m","8530",0,[[1366,768,40]]],["amd radeon hd8730","8730",0,[[1680,1050,42]]],["amd radeon hd8970m","8970",0,[[1920,1080,74]]],["amd radeon hybrid","",0,[[1366,768,27]]],["amd radeon infoshock rx 460","460",0,[[1360,768,102]]],["amd radeon instinct mi25","25",0,[[1920,1200,26]]],["amd radeon instinct mi25 mxgpu","25",0,[[1920,1080,20],[1920,1200,32]]],["amd radeon m535dx","535",0,[[1366,768,58]]],["amd radeon navi14","14",0,[[3840,2160,60]]],["amd radeon polaris","",0,[[3840,2160,60],[5120,2880,44]]],["amd radeon polaris 10","10",0,[[1920,1200,60]]],["amd radeon pro","pro",0,[[1920,1080,114]]],["amd radeon pro 270x","270",0,[[2560,1440,74]]],["amd radeon pro 450","450",0,[[1920,1080,30],[2880,1800,43],[3360,2100,36],[5120,2880,30]]],["amd radeon pro 450 opengl engine","450",0,[[1920,1200,60]]],["amd radeon pro 455","455",0,[[2879,1800,54],[2880,1800,48],[3360,2100,37]]],["amd radeon pro 455 opengl engine","455",0,[[3360,2100,36]]],["amd radeon pro 460","460",0,[[2880,1800,50],[3360,2100,42]]],["amd radeon pro 460 opengl engine","460",0,[[5760,3240,15]]],["amd radeon pro 470","470",0,[[6016,3384,49]]],["amd radeon pro 480","480",0,[[1920,1080,60]]],["amd radeon pro 5300","5300",0,[[5120,2880,60]]],["amd radeon pro 5300m","5300",0,[[1920,1080,214],[3584,2240,130]]],["amd radeon pro 5500 xt","5500",0,[[5120,2880,51]]],["amd radeon pro 5500m","5500",0,[[3072,1920,60],[3584,2240,139]]],["amd radeon pro 555","555",0,[[2879,1800,54],[2880,1800,36],[3360,2100,40]]],["amd radeon pro 555x","555",0,[[2880,1800,42],[3360,2100,39]]],["amd radeon pro 560","560",0,[[2879,1800,56],[2880,1800,56],[3360,2100,42]]],["amd radeon pro 5600m","5600",0,[[3072,1920,60],[3584,2240,60]]],["amd radeon pro 560x","560",0,[[2879,1800,59],[2880,1800,71],[3360,2100,43]]],["amd radeon pro 570","570",0,[[5120,2880,48]]],["amd radeon pro 570 opengl engine","570",0,[[5120,2880,46]]],["amd radeon pro 5700","5700",0,[[5120,2880,60]]],["amd radeon pro 5700 xt","5700",0,[[5120,2880,60]]],["amd radeon pro 570x","570",0,[[5120,2880,50]]],["amd radeon pro 575","575",0,[[4096,2304,60],[5120,2880,50]]],["amd radeon pro 575 opengl engine","575",0,[[5120,2880,48]]],["amd radeon pro 575x","575",0,[[5120,2880,56]]],["amd radeon pro 580","580",0,[[5120,2880,54]]],["amd radeon pro 580 opengl engine","580",0,[[5120,2880,50]]],["amd radeon pro 580x","580",0,[[5120,2880,52]]],["amd radeon pro duo","pro",0,[[1920,1080,234],[1800,1350,59],[3840,2160,82],[4096,2160,60]]],["amd radeon pro rx 560","560",0,[[2560,1080,60]]],["amd radeon pro ssg","pro",0,[[3440,1440,125]]],["amd radeon pro v340","340",0,[[1920,1080,112]]],["amd radeon pro v520 mxgpu","520",0,[[1920,1080,271]]],["amd radeon pro v7350x2","7350",0,[[1920,1080,60]]],["amd radeon pro vega 16","16",0,[[2879,1800,60],[3360,2100,60]]],["amd radeon pro vega 20","20",0,[[2880,1800,120],[3360,2100,121],[3840,2160,30]]],["amd radeon pro vega 48","48",0,[[5120,2880,86]]],["amd radeon pro vega 56","56",0,[[1920,1080,60],[5120,2880,60]]],["amd radeon pro vega 56 opengl engine","56",0,[[5120,2880,60]]],["amd radeon pro vega 64","64",0,[[5120,2880,60]]],["amd radeon pro vega 64 opengl engine","64",0,[[5120,2880,60]]],["amd radeon pro vega 64x","64",0,[[2560,1440,206],[4096,2304,60],[5120,2880,60]]],["amd radeon pro vega ii","proii",0,[[3840,1600,60],[5120,2880,60]]],["amd radeon pro vega ii duo","proii",0,[[2560,1440,239],[5120,2880,60]]],["amd radeon pro w5500","5500",0,[[1920,1080,195],[3840,2160,59],[7680,3240,56]]],["amd radeon pro w5500m","5500",0,[[1920,1080,60]]],["amd radeon pro w5500x","5500",0,[[1920,1200,60]]],["amd radeon pro w5700","5700",0,[[1680,1050,253],[5120,1440,120],[3840,2160,60]]],["amd radeon pro w5700x","5700",0,[[3840,2160,60]]],["amd radeon pro w6600","6600",0,[[1920,1200,60],[3840,2160,166]]],["amd radeon pro w6600m","6600",0,[[1920,1080,60]]],["amd radeon pro w6800","6800",0,[[1920,1080,60],[3840,2160,237]]],["amd radeon pro w6800x","6800",0,[[6016,3384,60]]],["amd radeon pro w6800x duo","6800",0,[[3840,1600,60],[5120,2880,45]]],["amd radeon pro w6900x","6900",0,[[3840,2160,60]]],["amd radeon pro wx","pro",0,[[2560,1080,69]]],["amd radeon pro wx 2100","2100",0,[[1280,1024,145],[1920,1080,60]]],["amd radeon pro wx 3100","3100",0,[[1919,1080,58],[1920,1080,123],[2560,1440,82]]],["amd radeon pro wx 3200","3200",0,[[2560,1440,92]]],["amd radeon pro wx 4100","4100",0,[[1920,1080,60],[1920,1200,60],[3840,2160,30],[5120,2880,18]]],["amd radeon pro wx 4130","4130",0,[[1920,1080,60],[3840,2160,30]]],["amd radeon pro wx 4150","4150",0,[[1920,1080,56],[3840,2160,37],[4096,2160,34]]],["amd radeon pro wx 5100","5100",0,[[1920,1080,60],[2560,1440,91],[3840,2160,55]]],["amd radeon pro wx 5100 opengl engine","5100",0,[[2560,1440,60]]],["amd radeon pro wx 7100","7100",0,[[1920,1080,122],[2560,1080,58],[3840,2160,60],[5120,2880,60]]],["amd radeon pro wx 7100 mobile","7100",0,[[2560,1440,60]]],["amd radeon pro wx 7100 opengl engine","7100",0,[[3840,2160,60]]],["amd radeon pro wx 8200","8200",0,[[3440,1440,124]]],["amd radeon pro wx 9100","9100",0,[[1920,1080,60],[4096,2160,101]]],["amd radeon pro wx 9100 opengl engine","9100",0,[[1920,1080,60]]],["amd radeon pro wx vega m gl","prom",0,[[3840,2160,14]]],["amd radeon pro wx3200","3200",0,[[1920,1080,55]]],["amd radeon pro wx9100","9100",0,[[2560,1440,60]]],["amd radeon r2","2",0,[[1366,768,13],[1600,900,14]]],["amd radeon r2e","2",0,[[1366,768,16],[1920,1080,45],[3840,2160,4]]],["amd radeon r3","3",0,[[1366,768,17],[1920,1080,15]]],["amd radeon r4","4",0,[[1366,768,19],[1920,1080,13]]],["amd radeon r4e","4",0,[[3840,2160,6]]],["amd radeon r5","5",0,[[1024,768,38],[1360,768,25],[1366,768,21],[1280,1024,33],[1920,1080,14],[3200,1800,7]]],["amd radeon r5 220","5",0,[[1366,768,19],[1920,1080,12]]],["amd radeon r5 230","5",0,[[1920,1080,21]]],["amd radeon r5 235","5",0,[[1920,1080,17]]],["amd radeon r5 240","5",0,[[1280,1024,34],[1920,1080,24]]],["amd radeon r5 340","5",0,[[1920,1080,27]]],["amd radeon r5 340x","5",0,[[1920,1080,31]]],["amd radeon r5 430","5",0,[[1280,1024,31],[1680,1050,54],[1920,1080,54]]],["amd radeon r5 435","5",0,[[1920,1080,30]]],["amd radeon r5 m200","5",0,[[1600,900,45],[1920,1080,20]]],["amd radeon r5 m200 / hd 8500m","5",0,[[1366,768,31],[1920,1080,24]]],["amd radeon r5 m230","5",0,[[1366,768,37]]],["amd radeon r5 m240","5",0,[[1366,768,42],[1920,1080,23]]],["amd radeon r5 m255","5",0,[[1366,768,59],[1600,900,33]]],["amd radeon r5 m315","5",0,[[1366,768,45]]],["amd radeon r5 m320","5",0,[[1920,1080,19]]],["amd radeon r5 m330","5",0,[[1366,768,27],[1920,1080,26]]],["amd radeon r5 m335","5",0,[[1366,768,55],[1920,1080,19]]],["amd radeon r5 m420","5",0,[[1366,768,49]]],["amd radeon r5 m430","5",0,[[1366,768,36],[1920,1080,20]]],["amd radeon r5 m435","5",0,[[1920,1080,41],[2560,1440,67]]],["amd radeon r5 m445","5",0,[[1920,1080,32]]],["amd radeon r5e","5",0,[[1600,768,14],[1920,1080,16]]],["amd radeon r6","6",0,[[1366,768,30],[1280,1024,23],[1920,1080,12]]],["amd radeon r6 m255dx","6",0,[[1366,768,25]]],["amd radeon r6 m340dx","6",0,[[1366,768,31],[1920,1080,15]]],["amd radeon r6e","6",0,[[3840,2160,5]]],["amd radeon r7","7",0,[[1366,768,35],[1280,1024,31],[1680,1050,39],[1920,1080,12],[1920,1200,16],[2560,1080,15],[2560,1440,21],[3840,2160,8]]],["amd radeon r7 200","7",0,[[1280,1024,45],[1920,1080,120]]],["amd radeon r7 200 series","7",0,[[1920,1080,43]]],["amd radeon r7 240","7",0,[[1920,1080,29]]],["amd radeon r7 240 + hd 8570d dual","7",0,[[1920,1080,43]]],["amd radeon r7 250","7",0,[[1920,1080,49]]],["amd radeon r7 250e","7",0,[[1920,1080,60]]],["amd radeon r7 250x","7",0,[[1920,1080,60]]],["amd radeon r7 260x","7",0,[[1920,1080,56]]],["amd radeon r7 260x/360","7",0,[[1920,1200,102]]],["amd radeon r7 350","7",0,[[1024,768,60],[1280,1024,79],[1920,1080,59]]],["amd radeon r7 350x","7",0,[[1920,1080,50]]],["amd radeon r7 360","7",0,[[1920,1048,60],[1920,1080,102]]],["amd radeon r7 360 / r9 360","7",0,[[1920,1080,60]]],["amd radeon r7 370","7",0,[[1600,900,60],[1920,1080,75]]],["amd radeon r7 370 / r9 270","7",0,[[1920,1080,74]]],["amd radeon r7 370 / r9 270x/370","7",0,[[1600,900,115],[1920,1080,60]]],["amd radeon r7 370 / r9 270x/370x","7",0,[[1920,1080,115]]],["amd radeon r7 370 series","7",0,[[1920,1080,212],[3840,2160,60]]],["amd radeon r7 430","7",0,[[1920,1080,55],[3840,2160,10]]],["amd radeon r7 450","7",0,[[1920,1080,60]]],["amd radeon r7 a360","7",0,[[1920,1080,28]]],["amd radeon r7 graphics + hd 7700 dual","7",0,[[1600,1200,72]]],["amd radeon r7 graphics + r5 340 dual","7",0,[[1920,1080,47]]],["amd radeon r7 graphics + r7 200 dual","7",0,[[1920,1080,45],[1920,1200,47]]],["amd radeon r7 graphics + r7 350 dual","7",0,[[1919,1080,60]]],["amd radeon r7 m260","7",0,[[1600,900,44],[1920,1080,13]]],["amd radeon r7 m260dx","7",0,[[1366,768,46],[1920,1080,18]]],["amd radeon r7 m260x","7",0,[[1920,1080,29]]],["amd radeon r7 m265","7",0,[[1366,768,48],[1920,1080,27]]],["amd radeon r7 m270","7",0,[[1920,1080,31],[3840,2160,10]]],["amd radeon r7 m340","7",0,[[1366,768,60],[1920,1080,32]]],["amd radeon r7 m350","7",0,[[3840,2160,12]]],["amd radeon r7 m360","7",0,[[1366,768,40],[1920,1080,22]]],["amd radeon r7 m370","7",0,[[1920,1080,24]]],["amd radeon r7 m440","7",0,[[1920,1080,39]]],["amd radeon r7 m445","7",0,[[1920,1080,36]]],["amd radeon r7 m460","7",0,[[1919,1080,24],[1920,1080,29]]],["amd radeon r7 m520","7",0,[[1919,1080,17]]],["amd radeon r7 series / hd 9000","7",0,[[1920,1080,71],[2560,1080,59]]],["amd radeon r7e","7",0,[[1024,768,41]]],["amd radeon r8 m350dx","8",0,[[1366,768,30]]],["amd radeon r8 m365dx","8",0,[[1920,1080,28]]],["amd radeon r8 m435dx","8",0,[[1920,1080,22]]],["amd radeon r8 m445dx","8",0,[[1366,768,38],[1920,1080,27]]],["amd radeon r8 m535dx","8",0,[[1366,768,55]]],["amd radeon r9","9",0,[[1920,1080,60]]],["amd radeon r9 200","9",0,[[1920,1080,60]]],["amd radeon r9 200 / hd 7900","9",0,[[1920,1080,250]]],["amd radeon r9 255","9",0,[[1600,900,52],[1920,1080,51]]],["amd radeon r9 260","9",0,[[1920,1080,16]]],["amd radeon r9 270","9",0,[[1280,1024,60],[1920,1080,60]]],["amd radeon r9 270 1024sp","9",0,[[1920,1080,135]]],["amd radeon r9 270x","9",0,[[1920,1080,30]]],["amd radeon r9 280","9",0,[[1920,1080,75],[1920,1200,428],[2560,1440,60]]],["amd radeon r9 280,","9",0,[[5120,2880,39]]],["amd radeon r9 280x","9",0,[[1920,1080,137]]],["amd radeon r9 285","9",0,[[1920,1080,60],[1920,1200,129]]],["amd radeon r9 290","9",0,[[1920,1080,60]]],["amd radeon r9 290x","9",0,[[1920,1080,60],[2560,1440,60],[3840,2160,118]]],["amd radeon r9 300","9",0,[[1920,1080,59]]],["amd radeon r9 350","9",0,[[1920,1200,63]]],["amd radeon r9 360","9",0,[[1600,900,83],[1920,1080,60],[2560,1440,59]]],["amd radeon r9 370","9",0,[[1680,1050,205],[1920,1080,60],[3840,2160,49]]],["amd radeon r9 370x","9",0,[[1920,1080,60]]],["amd radeon r9 380","9",0,[[1920,1080,41],[2560,1440,75]]],["amd radeon r9 380x","9",0,[[2560,1600,60]]],["amd radeon r9 390","9",0,[[1920,1080,60],[2560,1440,60]]],["amd radeon r9 390x","9",0,[[2560,1440,60],[3840,2160,60]]],["amd radeon r9 a375","9",0,[[1920,1080,28]]],["amd radeon r9 fury","9",0,[[1920,1080,75],[3840,2160,133]]],["amd radeon r9 fury / nano","9",0,[[1920,1200,155]]],["amd radeon r9 m200x","9",0,[[1366,768,104],[1920,1080,60]]],["amd radeon r9 m265x","9",0,[[1920,1080,33]]],["amd radeon r9 m270x","9",0,[[1600,900,60],[1920,1080,68]]],["amd radeon r9 m275","9",0,[[1920,1080,29]]],["amd radeon r9 m275x","9",0,[[1920,1080,20]]],["amd radeon r9 m280x","9",0,[[1920,1080,60],[2560,1440,25]]],["amd radeon r9 m290","9",0,[[5120,2880,33]]],["amd radeon r9 m290x","9",0,[[1920,1080,60],[3840,2160,61],[5120,2880,33]]],["amd radeon r9 m295x","9",0,[[3840,2160,33],[5120,2880,36]]],["amd radeon r9 m295x mac","9",0,[[5120,2880,42]]],["amd radeon r9 m295x mac edition / r9 380x","9",0,[[1920,1080,128]]],["amd radeon r9 m360","9",0,[[1920,1080,60],[3840,2160,26]]],["amd radeon r9 m370x","9",0,[[2560,1440,30],[2880,1800,27]]],["amd radeon r9 m370x opengl engine","9",0,[[5120,2880,14]]],["amd radeon r9 m375","9",0,[[1920,1080,29]]],["amd radeon r9 m375x","9",0,[[1920,1080,60],[3840,2160,22]]],["amd radeon r9 m380","9",0,[[1920,1080,50],[3840,2160,8],[5120,2880,9]]],["amd radeon r9 m380 opengl engine","9",0,[[5120,2880,15]]],["amd radeon r9 m385","9",0,[[1920,1080,58]]],["amd radeon r9 m385x","9",0,[[1920,1080,60]]],["amd radeon r9 m390","9",0,[[5119,2879,29],[5120,2880,21],[5760,3240,32]]],["amd radeon r9 m390 opengl engine","9",0,[[5120,2880,27]]],["amd radeon r9 m390x","9",0,[[1920,1080,140]]],["amd radeon r9 m395","9",0,[[2560,1440,59],[5120,2880,19]]],["amd radeon r9 m395 opengl engine","9",0,[[5120,2880,38]]],["amd radeon r9 m395x","9",0,[[3840,2160,58],[5120,2880,36]]],["amd radeon r9 m395x opengl engine","9",0,[[5120,2880,35]]],["amd radeon r9 m470","9",0,[[3840,2160,29]]],["amd radeon r9 m470x","9",0,[[1920,1080,60]]],["amd radeon r9-290x","9",0,[[1920,1080,60]]],["amd radeon renoir graphics d1","1",0,[[1366,768,60]]],["amd radeon rro 580x","580",0,[[5120,2880,59]]],["amd radeon rx 460","460",0,[[1920,1080,55],[2560,1080,60],[3840,2160,31]]],["amd radeon rx 460 / pro 450/455/460/555/555x/560/560x","460",0,[[3440,1440,93]]],["amd radeon rx 460 / pro 450/455/460/560","460",0,[[1920,1080,72]]],["amd radeon rx 470","470",0,[[1280,1024,73],[1920,1080,58],[1920,1200,147],[3840,2160,51]]],["amd radeon rx 470 opengl engine","470",0,[[2560,1440,60]]],["amd radeon rx 475m","475",0,[[1920,1080,60]]],["amd radeon rx 480","480",0,[[1400,1050,267],[1920,1080,60],[2560,1080,71]]],["amd radeon rx 480 opengl engine","480",0,[[1920,1080,60]]],["amd radeon rx 5300m","5300",0,[[1920,1080,60],[3840,2160,60]]],["amd radeon rx 540","540",0,[[1919,1080,52],[1920,1080,36]]],["amd radeon rx 550","550",0,[[1280,1024,135],[1920,1080,60],[1920,1200,60],[6016,3384,15]]],["amd radeon rx 550 640sp / rx 560","550",0,[[1920,1080,60]]],["amd radeon rx 5500","5500",0,[[1920,1080,139]]],["amd radeon rx 5500 / pro 5500m","5500",0,[[1920,1080,60],[2560,1440,227]]],["amd radeon rx 5500 xt","5500",0,[[1920,1080,239]]],["amd radeon rx 5500m","5500",0,[[1920,1048,144],[1920,1080,144],[3840,2160,60]]],["amd radeon rx 550x","550",0,[[1920,1080,52]]],["amd radeon rx 560","560",0,[[1920,1080,60],[1920,1200,42],[2560,1440,60]]],["amd radeon rx 560 [baffin]","560",0,[[1920,1080,60]]],["amd radeon rx 5600 oem/5600 xt / 5700 xt","5600",0,[[1920,1080,360],[2560,1440,164]]],["amd radeon rx 5600 xt","5600",0,[[1920,1080,75]]],["amd radeon rx 5600m","5600",0,[[1920,1080,144]]],["amd radeon rx 560d","560",0,[[2560,1080,60]]],["amd radeon rx 560x","560",0,[[1920,1080,115],[3840,2160,35]]],["amd radeon rx 570","570",0,[[1920,1080,60],[3072,1728,60]]],["amd radeon rx 570 opengl engine","570",0,[[1920,1080,226]]],["amd radeon rx 5700","5700",0,[[1920,1080,144]]],["amd radeon rx 5700 / 5700 xt","5700",0,[[3840,2160,201]]],["amd radeon rx 5700 xt","5700",0,[[1920,1080,464],[3840,2160,60],[6016,3384,34]]],["amd radeon rx 5700 xt 50th anniversary","5700",0,[[2560,1440,144],[3840,1600,60],[3840,2160,222],[5120,2880,60]]],["amd radeon rx 5700xt","5700",0,[[1920,1080,369]]],["amd radeon rx 580","580",0,[[1920,1080,60],[1920,1200,97],[2560,1440,60],[3840,2160,60]]],["amd radeon rx 580 2048sp","580",0,[[1920,1080,60]]],["amd radeon rx 580 opengl engine","580",0,[[1920,1080,145]]],["amd radeon rx 580 special","580",0,[[2560,1440,60]]],["amd radeon rx 580x","580",0,[[1920,1200,60],[3840,2160,79]]],["amd radeon rx 590","590",0,[[1920,1080,75],[2560,1440,164],[3584,2240,60]]],["amd radeon rx 640","640",0,[[1920,1080,39]]],["amd radeon rx 6500 xt","6500",0,[[1920,1080,60]]],["amd radeon rx 6600","6600",0,[[1920,1080,433],[3840,2160,57]]],["amd radeon rx 6600 xt","6600",0,[[1920,1080,60]]],["amd radeon rx 6600 xt/6600m","6600",0,[[2560,1440,60]]],["amd radeon rx 6600m","6600",0,[[1920,1080,139]]],["amd radeon rx 6700 xt","6700",0,[[1920,1080,451]]],["amd radeon rx 6700 xt / 6800m","6700",0,[[2560,1440,144]]],["amd radeon rx 6700m","6700",0,[[1920,1080,240]]],["amd radeon rx 6800","6800",0,[[2560,1440,564],[3840,2160,60]]],["amd radeon rx 6800 xt","6800",0,[[2560,1440,446],[3440,1440,144],[3840,2160,60]]],["amd radeon rx 6800 xt / 6900 xt","6800",0,[[2560,1440,239]]],["amd radeon rx 6800 xt 16gb","6800",0,[[6400,2666,60]]],["amd radeon rx 6800m","6800",0,[[1920,1080,300]]],["amd radeon rx 6900 xt","6900",0,[[3840,2160,60]]],["amd radeon rx rx 560","560",0,[[1920,1080,60]]],["amd radeon rx vega","rx",0,[[1920,1080,39]]],["amd radeon rx vega 10","10",0,[[1920,1080,38]]],["amd radeon rx vega 11","11",0,[[1920,1080,35]]],["amd radeon rx vega 56","56",0,[[1920,1080,144],[3440,1440,60],[3840,2160,60]]],["amd radeon rx vega 56 8gb","56",0,[[2560,1600,60]]],["amd radeon rx vega 56 opengl engine","56",0,[[2560,1440,60]]],["amd radeon rx vega 64","64",0,[[2560,1440,518]]],["amd radeon rx vega 64 8gb","64",0,[[2560,1440,60]]],["amd radeon rx vega 64 opengl engine","64",0,[[3840,2160,119]]],["amd radeon rx vega 64.1","64",0,[[6016,3384,60]]],["amd radeon rx vega 8","8",0,[[1920,1080,53]]],["amd radeon rx vega m gh","rxm",0,[[1920,1080,60],[2560,1440,60],[3840,2160,51]]],["amd radeon rx vega m gl","rxm",0,[[2560,1440,567],[3840,2160,59]]],["amd radeon rx vega11","11",0,[[2496,1664,30]]],["amd radeon rx460","460",0,[[1920,1080,60]]],["amd radeon rx480","480",0,[[1920,1080,102],[2560,1080,71]]],["amd radeon rx540","540",0,[[2400,1800,37]]],["amd radeon rx550","550",0,[[1920,1080,60]]],["amd radeon rx560","560",0,[[1920,1080,93]]],["amd radeon rx5600","5600",0,[[3840,2160,129]]],["amd radeon rx570","570",0,[[5120,2880,59]]],["amd radeon rx5700","5700",0,[[1920,1080,60]]],["amd radeon rx580","580",0,[[1920,1080,60]]],["amd radeon rx590 gme","590",0,[[1920,1080,112]]],["amd radeon rx6600xt","6600",0,[[3840,2160,60]]],["amd radeon sky 500","500",0,[[4096,2160,34]]],["amd radeon vega","",0,[[5120,2880,32]]],["amd radeon vega 10","10",0,[[1920,1080,44]]],["amd radeon vega 10 mobile","10",0,[[1920,1080,30]]],["amd radeon vega 11","11",0,[[1280,1024,60],[1920,1080,60],[3840,2160,17]]],["amd radeon vega 2","2",0,[[1366,768,30]]],["amd radeon vega 3","3",0,[[1440,900,44],[1920,1080,29],[3840,2160,8]]],["amd radeon vega 3 mobile","3",0,[[1920,1080,30]]],["amd radeon vega 56","56",0,[[2560,1440,144]]],["amd radeon vega 6","6",0,[[1366,768,61],[1920,1080,23]]],["amd radeon vega 64","64",0,[[6016,3384,35]]],["amd radeon vega 64 lc","64",0,[[2560,1080,60]]],["amd radeon vega 8","8",0,[[1920,1080,35],[2560,1440,24],[4096,2160,15]]],["amd radeon vega 8 mobile","8",0,[[1920,1080,36]]],["amd radeon vega 9","9",0,[[2496,1663,32],[2496,1664,39]]],["amd radeon vega fe","fe",0,[[1920,1080,120],[2560,1440,60]]],["amd radeon vega frontier","",0,[[1920,1080,120],[3840,2160,60]]],["amd radeon vega frontier edition opengl engine","",0,[[3440,1440,60]]],["amd radeon vega series / radeon vega mobile","",0,[[1920,1080,67]]],["amd radeon vii","vii",0,[[1920,1080,468],[2560,1440,60],[3840,2160,60]]],["amd radeont 540x","540",0,[[1920,1080,74],[3840,2160,22]]],["amd radeont rx 5300","5300",0,[[1920,1080,60]]],["amd radeont rx 5500m","5500",0,[[1920,1080,303]]],["amd radeont rx 560x","560",0,[[1920,1080,60]]],["amd saphire radeon rx 580","580",0,[[1920,1080,57]]],["amd sapphire radeon hd6870","6870",0,[[1680,1050,60]]],["amd sapphire radeon rx 560","560",0,[[1280,1024,60]]],["amd sapphire radeon rx vega 64 8gb","64",0,[[2560,1440,144]]],["intel radeon pro vega 16","16",0,[[3360,1890,20]]],["intel radeong 0.4 on amd bonaire","0",0,[[1920,1200,92]]],["intel radeong 0.4 on amd cape verde","0",0,[[1920,1200,73]]],["intel radeong 0.4 on amd polaris10","0",0,[[3840,2160,108]]],["intel radeong 0.4 on amd tonga","0",0,[[1920,1080,124]]],["radeon 500","500",0,[[1920,1080,58]]],["radeon 550","550",0,[[1920,1080,60]]],["radeon 550x","550",0,[[1920,1080,68]]],["radeon hd 7700","7700",0,[[1920,1080,60],[1920,1200,90]]],["radeon hd 7800","7800",0,[[1920,1080,60]]],["radeon hd 7900","7900",0,[[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["radeon hd 8500","8500",0,[[1920,1080,42]]],["radeon hd 8790m","8790",0,[[1600,900,60]]],["radeon hd8800","8800",0,[[1920,1080,60]]],["radeon pro wx 5100 graphics (polaris10 / drm 3.27.0 / 4.19.4-1.el7.elrepo.x86_64, llvm 6.0","5100",0,[[1920,1080,60]]],["radeon pro wx3100","3100",0,[[2560,1440,1],[3840,2160,43]]],["radeon r5 340","5",0,[[1536,864,41]]],["radeon r5 m330","5",0,[[1366,768,38]]],["radeon r7 200","7",0,[[1280,1024,60],[2560,1440,52]]],["radeon r7 300","7",0,[[1920,1080,60]]],["radeon r7 m340","7",0,[[1920,1080,32]]],["radeon r7 m360","7",0,[[1920,1080,32]]],["radeon r9 200","9",0,[[1920,1080,60],[1920,1200,60],[2560,1440,1]]],["radeon r9 380","9",0,[[2560,1440,1]]],["radeon r9 390","9",0,[[1920,1080,60],[2560,1440,60]]],["radeon r9 fury","9",0,[[1920,1080,51],[1920,1920,60]]],["radeon rx","rx",0,[[1920,1200,60]]],["radeon rx 460","460",0,[[1920,1080,60],[1920,1200,60]]],["radeon rx 470","470",0,[[1280,768,60],[1680,1050,422],[1920,1080,60],[2560,1440,60]]],["radeon rx 480","480",0,[[1920,1080,60],[1920,1200,185],[2560,1440,1]]],["radeon rx 550","550",0,[[1600,900,60],[1680,1050,60],[1920,1080,1],[1920,1200,60],[2560,1080,60],[3840,2160,30]]],["radeon rx 5500 xt","5500",0,[[1920,1080,60],[1920,1200,60],[2560,1440,60],[3840,2160,19]]],["radeon rx 560","560",0,[[1600,900,60],[1920,1080,29],[1920,1200,47],[2688,1512,60],[3440,1440,60],[3840,2160,58]]],["radeon rx 5600 xt","5600",0,[[1920,1080,60]]],["radeon rx 570","570",0,[[1440,900,60],[1280,1024,60],[1920,1080,51],[1920,1200,60],[2560,1080,60],[2560,1440,37],[3440,1440,60]]],["radeon rx 5700 xt","5700",0,[[1707,960,60],[1920,1080,60],[2560,1440,55],[3840,2160,60]]],["radeon rx 580","580",0,[[1477,831,72],[1440,900,60],[1680,1050,60],[1920,1080,4],[1920,1200,60],[2560,1080,52],[2560,1440,60],[2560,1600,60],[3840,2160,1]]],["radeon rx 580 2048sp","580",0,[[1440,900,75]]],["radeon rx 590","590",0,[[1920,1080,60],[2560,1440,60],[3840,2160,30]]],["radeon rx vega","rx",0,[[1920,1080,60],[1920,1200,60],[2194,1234,60],[2560,1080,60],[2560,1440,60],[3440,1440,75],[3840,2160,60]]],["radeon rx vega 8","8",0,[[3840,2160,23]]],["radeon rx550","550",0,[[1680,1050,60],[1920,1080,60],[3440,1440,58]]],["radeon vega 8","8",0,[[1680,1050,60]]],["radeon vega frontier","",0,[[2560,1440,144]]],["radeon vii","vii",0,[[2560,1440,60],[3440,1440,60],[3840,2160,1]]],["radeong 0.4 on amd polaris10","0",0,[[3840,2160,109]]],["radeong 0.4 on amd tahiti","0",0,[[1920,1080,223]]],["ryzen embedded r1305g with radeon vega gfx","1305",0,[[3840,2160,14]]],["ryzen embedded v1605b with radeon vega gfx","1605",0,[[3840,2160,28]]]]\')},921:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["adreno 506","506",0,[[1512,720,18,"motorola moto g(7) play"]]],["adreno 530","530",0,[[2560,1140,27,"samsung galaxy s7 (sm-930x)"],[2392,1440,28,"google pixel xl"]]],["adreno 615","615",0,[[2088,1080,20,"google pixel 3a"]]],["adreno 618","618",0,[[2210,1080,34,"xiaomi mi 9t"]]],["adreno 620","620",0,[[2340,1080,42,"google pixel 5"]]],["adreno 630","630",0,[[2280,1080,58,"oneplus a6003"]]],["adreno 640","640",0,[[2280,1080,60,"google pixel 4"]]],["qualcomm adreno 205","205",0,[[1280,720,11,"coolpad 8675-w00 (adreno 205)"]]],["qualcomm adreno 304","304",0,[[480,320,16,"zte z353vl cymbal t"],[480,480,6,"lg watch sport"],[758,480,8,"kyocera kyf33 torque x01 s-max"],[782,480,8,"vodafone vfd 510"],[791,480,8,"acer t012"],[792,480,6,"lg k4 2017 (m151, m160, m150 phoenix 3, m153 fortune, m154 risio 2, l58vl rebel 2)"],[800,480,7,"chainway c4050-q4"],[854,480,6,"zte q302c"],[897,540,6,"kyocera c6742 hydro view"],[960,540,6,"cat s40"],[1024,552,6,"tcl 9007 pixi 3 (7)"],[1184,720,4,"micromax q4251 canvas juice a1"],[1187,720,4,"lg phoenix 2 (k37x)"],[1193,720,4,"lg x power (k210, k450)"],[1196,720,4,"obi sj2.5"],[1217,720,4,"fibo la0920"],[1224,720,4,"umax visionbook p70 lte"],[1280,720,4,"k-touch beeline fast +"],[1280,736,4,"alcatel 9022x one touch pixi 3 8.0"],[1280,752,4,"lenovo tab 10 (x103f)"]]],["qualcomm adreno 305","305",0,[[432,320,18,"sonim xp6700"],[480,320,16,"lg t480s wine smart 3g"],[400,400,0,"huawei watch"],[734,480,7,"lg l fino (d290, d295)"],[737,480,7,"acer liquid z220"],[790,480,8,"htc desire 510 (adreno 305)"],[791,480,7,"sony xperia m (c19xx, c20xx)"],[800,480,5,"cherry mobile q510"],[854,480,6,"alcatel a564c one touch pop icon"],[886,540,7,"lg g2 mini (d610, d618, d620)"],[896,540,7,"htc desire 610"],[897,540,5,"motorola xt830c moto e"],[960,540,4,"huawei c8817l"],[1024,528,5,"aurora au701"],[1024,552,4,"asus zenfone go 6.9 (l001 zb690kg)"],[982,600,4,"huawei mediapad 7 youth 2"],[1024,600,7,"samsung galaxy tab 3 7.0 (sm-t215, sm-t217)"],[1024,720,4,"ereneben eben a2"],[1024,722,5,"prestigio pmt5287 multipad ranger 8.0 4g"],[1280,648,5,"tomtom bridge"],[1184,720,5,"htc desire 650 (d650)"],[1188,720,4,"lg aka (h778, h788, f520x)"],[1196,720,3,"zte z787"],[1200,720,4,"lg g vista (d631, vs880, gx2 f430)"],[1216,720,4,"vodafone smart 4 max"],[1217,720,4,"kyocera e6790 duraforce xd"],[1220,720,4,"huawei ascend mate 2 mt2-l03"],[1196,768,4,"infocus m2"],[1280,720,3,"zuum p47"],[1280,732,4,"lg g pad 7.0 (uk410, v410, vk410)"],[1280,736,4,"zte amazing p6"],[1280,737,4,"asus memo pad hd 7 (k00s me175kg)"],[1280,739,4,"lg g pad 8.0 (v480, v49x, p490, t01)"],[1280,740,4,"qualcomm msm8926 (adreno 305, development board)"],[1280,752,4,"asus padfone e (t008 a68m)"],[1216,800,3,"huawei mediapad t1 8.0 (adreno 305)"],[1280,800,3,"samsung tn10gedlte"],[1920,1080,2,"zte s2002 star 1"],[1920,1128,2,"lenovo b8080"]]],["qualcomm adreno 306","306",0,[[734,480,9,"lg f60 (d390, d392)"],[790,480,8,"htc desire 510 (adreno 306)"],[791,480,5,"lg l21g destiny"],[800,480,8,"covia fleaz cp-l42a pop"],[854,480,8,"freetel ft151a priori2 lte"],[897,540,7,"kyocera c6740 hydro wave"],[960,540,5,"blu studio mini lte 2"],[1024,552,6,"tcl 9006w"],[1024,600,5,"samsung sm-t116ir (adreno 306)"],[1024,720,5,"ereneben eben k8s"],[1024,768,5,"samsung sm-p350 galaxy tab a plus"],[1184,720,4,"lg x screen (k500, f650)"],[1188,720,4,"lg band play (f570s)"],[1196,720,4,"fly a5042"],[1199,720,4,"lg stylus 2 (f720, k520, k540, ls775 g stylo 2, l82vl)"],[1200,720,4,"lg g4 stylus (h63x, ms631, f560, ls770 g stylo)"],[1208,720,4,"vizio xr6m10 tablet remote"],[1217,720,4,"lenovo pb1-750x phab"],[1224,720,4,"c spire ft7"],[1280,720,3,"bgh joy smart axs ii"],[1280,736,4,"vodafone smart tab 4g"],[1280,752,4,"huawei mediapad t1 10 (t1-a21)"],[1216,800,4,"huawei mediapad t1 8.0 pro, lte (adreno 306)"],[1280,800,4,"samsung galaxy tab e 8.0 (adreno 306, sm-t377p)"],[1794,1080,2,"bluebird sf550"],[1815,1080,2,"vizio xr6"],[1920,1080,2,"longcheer cc01"]]],["qualcomm adreno 308","308",0,[[800,480,13,"samsung galaxy folder 2 (sm-g160x)"],[854,480,12,"coolpad 3632"],[960,540,10,"samsung sm-j250g"],[1184,720,5,"infocus 00ww"],[1187,720,6,"lg m200"],[1193,720,6,"lg k20 plus (mp260, k20 v vs501)"],[1195,720,6,"lg x charge (x power 2, m322, l63bl fiesta)"],[1199,720,6,"lg stylo 3 (l83bl)"],[1280,720,6,"hisense f23"],[1280,736,6,"lenovo tb-8504"],[1280,752,6,"lenovo tb-x304"],[1344,720,6,"wiko view"],[1223,800,6,"huawei mediapad t3 8.0 (kob-xxx)"],[1368,720,6,"casper via g1"],[1280,800,6,"samsung galaxy tab a2 s (sm-t380, sm-t385)"]]],["qualcomm adreno 320","320",0,[[1196,720,11,"pantech im-a850 vega r3"],[1196,768,10,"google nexus 4 (lg e960)"],[1280,720,8,"blackberry z30"],[1280,752,8,"asus memo pad 10 (k01e me103k)"],[1280,768,10,"lg optimus g (e97x, ls970, e987, f180, kddi lgl21)"],[1920,1008,5,"technicolor px36"],[1794,1080,5,"sony xperia z (c66xx, so-02e, l36x)"],[1848,1080,5,"pantech im-a860 vega n6"],[1920,1080,5,"zte nubia z5 (nx501, nx50x)"],[1920,1104,5,"google nexus 7 (2nd gen, razor)"],[1920,1114,4,"lg g pad 8.3 (vk810 4g)"],[1920,1128,5,"sony xperia tablet z (sgp3xx, so-03e)"]]],["qualcomm adreno 330","330",0,[[800,480,18,"samsung sm-w2014"],[1184,720,27,"sony so-04g xperia a4"],[1196,720,21,"sony xperia j1 compact (d5788)"],[1202,720,21,"lg g flex (d95x, ls995, lgl23, f340)"],[1280,720,20,"amazon fire phone (sd4930ur)"],[1280,768,21,"samsung sm-w2015 galaxy golden 2"],[1280,960,14,"lg f300 optimus vu 3"],[1600,1152,15,"hp pro slate 12"],[1440,1308,10,"blackberry passport"],[1776,1080,11,"google nexus 5"],[1788,1080,11,"lg g3 a f410"],[1794,1080,10,"fujitsu f-01f arrows nx luge (docomo)"],[1803,1080,11,"lg g pro 2 (d838, f350)"],[1836,1080,11,"sony xperia z ultra (c68xx, xl39h, sol24, sgp412)"],[1920,1080,9,"qualcomm quanta is7"],[1920,1104,12,"ntt docomo sh-06f sharp aquos pad"],[1920,1128,12,"sony xperia z2 tablet (sgp5xx, so-05f, sot21)"],[1920,1129,10,"lg g pad ii (v935, v940 prada 3.0, v930 g pad x 10.1, uk932)"],[1920,1200,9,"amazon kindle fire hdx 7 (3rd gen, kfthwa, kfthwi)"],[2048,1440,8,"hp red"],[2392,1440,8,"fujitsu f-02g arrows nx (docomo)"],[2400,1440,6,"iuni u3"],[2560,1440,7,"vivo x520l xplay 3s"],[2560,1504,7,"ntt docomo f-03g (fujitsu arrows tab)"],[2560,1600,5,"samsung sm-t525 galaxy tab pro 10.1"]]],["qualcomm adreno 405","405",0,[[1184,720,13,"lyf ls-5015 water 8"],[1196,720,10,"alcatel 6044 one touch pop up"],[1200,720,12,"oppo a53"],[1280,720,8,"hisense c1"],[1280,736,10,"asus zenpad 8 (adreno 405, p024 z380kl)"],[1776,1080,7,"lyf ls-5505"],[1794,1080,6,"medion life x5020"],[1798,1080,7,"lg h740 g vista 2"],[1800,1080,6,"oppo r7s plus"],[1803,1080,6,"oppo r7 plus (adreno 405)"],[1812,1080,6,"ramos mos1"],[1824,1080,6,"vargo ivargo v210101"],[1836,1080,6,"lenovo pb1-770m everypad3"],[1920,1080,2,"smartisan yq607 jianguo"],[1920,1104,5,"lg vk815 g pad x8.3, p815l g pad ii 8.3"],[1920,1111,6,"lg g pad x 8.0 (v52x)"],[1794,1200,5,"qisda f80"],[1920,1128,5,"huawei mediapad t2 10.0 pro (fdr-xxx)"],[1830,1200,6,"huawei mediapad x3 (ple-xxx)"],[1836,1200,6,"huawei mediapad t2 8.0 pro (jdn-xxx)"]]],["qualcomm adreno 418","418",0,[[1280,768,28,"samsung sm-g9198"],[1776,1080,17,"sharp sh-m03 aquos mini"],[1794,1080,15,"softbank 502sh (sharp aquos xx2)"],[1920,1080,11,"smartisan t2 (sm801)"],[2368,1440,10,"fujitsu f-02h arrows nx (docomo)"],[2392,1440,10,"lg k600"],[2413,1440,10,"motorola moto x style, pure (xt1570, xt1572, xt1575)"],[2560,1440,9,"qiku q terra (8692-a00)"],[2560,1504,9,"ntt docomo f-04h arrows tab"]]],["qualcomm adreno 420","420",0,[[1280,720,32,"odg r7-w"],[1920,1080,20,"samsung galaxy s5 (adreno 420, sm-g901)"],[2392,1440,13,"lg g3 (adreno 420, f460)"],[2560,1352,7,"qualcomm apq8084 (adreno 420, development board)"],[2413,1440,12,"motorola moto x pro"],[2560,1440,8,"qualcomm liquid (adreno 420, windows, development board)"],[2560,1532,12,"samsung galaxy note edge (adreno 420, sm-n915x, scl24, sc-01g)"],[2560,1600,11,"amazon kindle fire hdx 8.9 (4th gen, kfsawa, kfsawi)"]]],["qualcomm adreno 430","430",0,[[1184,720,53,"sony xperia z5 compact (e58xx, so-02h)"],[1280,720,18,"zebra technologies mtp8994"],[1776,1080,29,"sony xperia z5 (e66xx, so-01h, sov32, 501so)"],[1794,1080,19,"vertu signature touch (2015)"],[1920,1080,9,"nokia rm-1106"],[1920,1104,21,"ntt docomo sh-05g sharp aquos pad"],[2392,1440,11,"sony e6508 vzw xperia z4v"],[2413,1440,17,"sirin labs solarin"],[2560,1440,7,"microsoft rm-1105"],[2560,1504,16,"sony xperia z4 tablet (sgp7xx, so-05g, sot31)"]]],["qualcomm adreno 505","505",0,[[728,480,29,"zebra technologies tc25"],[1184,720,15,"ivvi i3-01"],[1196,720,15,"huawei honor 6c (dig-xxx)"],[1199,720,14,"lg stylus 2 plus (ms550, k550)"],[1280,720,14,"xiaomi land"],[1344,720,14,"wiko view prime"],[1368,720,13,"micromax hs3"],[1776,1080,7,"hisense a2"],[1787,1080,7,"lg qua phone px (lgv33)"],[1794,1080,7,"pantech im-100 vega"],[1798,1080,8,"lg stylo 3 plus (tp450, mp450, m470)"],[1802,1080,7,"lg k11 (k530, k535)"],[1812,1080,7,"sugar f11"],[1920,1080,6,"lg x venture (h700, m710)"],[1920,1111,6,"lg g pad x ii 8.0 plus (v530)"],[2004,1080,7,"lg q6 (m700, x600)"],[1920,1128,7,"vodafone vfd 1400"],[1920,1132,7,"huawei mediapad t3 lite 10 (bah-xxx)"],[1839,1200,7,"huawei mediapad m3 lite 8.0 (cpn-xxx)"]]],["qualcomm adreno 506","506",0,[[1184,720,20,"fujitsu f-04j docomo"],[1280,720,20,"samsung galaxy j7 2017 (adreno 506, sm-j727x)"],[1320,720,18,"xiaomi redmi 5"],[1356,720,18,"vivo v7 plus (1716)"],[1620,1080,11,"blackberry bbb100-x (keyone, mercury)"],[1776,1080,10,"condor plume h1"],[1788,1080,10,"huawei nova (caz-xxx)"],[1794,1080,10,"nuans neo reloaded"],[1920,1080,9,"blackberry bbd100"],[1920,1104,9,"nec lavietab pc-ts508fam"],[1980,1080,10,"xiaomi redmi 5 plus"],[1920,1128,9,"zte k92 primetime"],[1920,1132,9,"vestel v tab 1090 lte"],[1920,1200,9,"i.safe is910.1"]]],["qualcomm adreno 508","508",0,[[1776,1080,15,"sonim xp8812"],[1798,1080,15,"sharp fs8010"],[1920,1080,14,"htc u11 life"],[2009,1080,14,"vestel venus z20"]]],["qualcomm adreno 509","509",0,[[2159,1080,15,"asus zenfone 5"]]],["qualcomm adreno 510","510",0,[[1184,720,31,"zebra technologies tc51"],[1208,800,27,"askey turbonet tn800a1 turbotab e1"],[1366,720,29,"sony xperia touch (g1109)"],[1776,1080,13,"agm x2"],[1794,1080,14,"qualcomm msm8952 (adreno 510, development board)"],[1920,1080,14,"coolpad r116 cool1"],[2048,1440,11,"asus zenpad 3 8.0 (p008 z581kl)"],[2160,1440,10,"jide remix pro"],[2048,1536,11,"asus zenpad z10 (p00i zt500kl)"],[2368,1440,10,"vodafone vfd 900"],[2392,1440,10,"sharp aquos z3 (fs8009)"],[2413,1440,9,"infocus m820"],[2560,1440,9,"vivo pd1522a"],[2560,1504,9,"lenovo yoga tab3 plus (yt-x703)"]]],["qualcomm adreno 512","512",0,[[782,480,59,"honeywell cn80"],[1798,1080,23,"sharp fs8016"],[1920,1080,22,"vivo td1608"],[2016,1080,22,"oppo r11s"],[2034,1080,22,"vivo x20a"],[2151,1080,20,"xiaomi redmi note 7"]]],["qualcomm adreno 530","530",0,[[1600,900,56,"keecker keecker"],[1776,1080,43,"softbank 506sh (sharp aquos phone xx3)"],[1794,1080,49,"google pixel"],[1920,1024,47,"contextmedia p-wal-107-elc-03"],[1920,1080,26,"nokia 6071w"],[2048,1536,35,"samsung galaxy tab s3 (sm-t82x)"],[2368,1440,27,"motorola xt1650 (1.8 ghz)"],[2392,1440,21,"lg q8 (h970, x800l)"],[2416,1440,31,"alcatel 6076s"],[2560,1439,17,"hp elite x3"],[2560,1440,4,"hp falcon"],[2672,1440,30,"lg g6 (g600, us997, ls993, vs988, h87x)"],[2880,1440,26,"baofeng ke-01"],[3840,2076,15,"via vt6093"]]],["qualcomm adreno 540","540",0,[[1184,720,61,"sony xperia xz1 compact (g8441)"],[1776,1080,57,"sony xperia xz1 (g834x, sov36, so-01k, 701so)"],[1794,1080,57,"google pixel 2 (walleye)"],[1920,1080,56,"zte nx595j nubia"],[1980,1080,56,"xiaomi mi mix 2"],[2034,1080,55,"oneplus 5t (a5010)"],[2276,1312,43,"essential ph-1"],[2368,1440,39,"sharp aquos r (sh-03j, shv39, 605sh)"],[2392,1440,41,"qualcomm adreno 540 (development board)"],[2416,1440,40,"razer phone"],[2560,1440,36,"htc u11 (u-3x, 2pzc100, 2pzc5, htv33, 601ht)"],[2678,1440,35,"samsung galaxy s8 active (sm-g892)"],[2768,1440,33,"samsung galaxy s8+ (adreno 540, sm-g955x, sc-03j, scv35)"],[2960,1440,33,"samsung galaxy note 8 (adreno 540, sm-n950, sc-01k, scv37)"]]],["qualcomm adreno 615","615",0,[[2560,1492,18,"samsung galaxy tab s5e sm-t720"]]],["qualcomm adreno 616","616",0,[[2047,1080,30,"meizu x8"]]],["qualcomm adreno 618","618",0,[[2183,1080,38,"samsung galaxy a71 (sm-a715f)"],[2274,1080,37,"samsung galaxy a80 sm-a805f"]]],["qualcomm adreno 630","630",0,[[2792,1440,49,"samsung galaxy s9+ (adreno 630, sm-g965)"]]],["qualcomm adreno 640","640",0,[[2020,1080,60,"samsung galaxy s10e (adreno 640, sm-g970x)"],[2064,1080,60,"samsung galaxy note 10 (adreno 640, sm-n970x)"],[2181,1080,60,"samsung galaxy s10 lite"],[2198,1080,60,"samsung galaxy a90 5g"],[2210,1080,79,"xiaomi redmi k20 pro premium edition"],[2048,1410,59,"samsung galaxy fold 5g (adreno 640, sm-f900x)"],[2723,1440,55,"samsung galaxy s10 (adreno 640, sm-g973x)"],[2730,1440,56,"samsung galaxy s10+ (adreno 640, sm-g975x)"],[2759,1440,56,"samsung galaxy note 10+ (adreno 640, sm-n975x)"],[2901,1440,55,"samsung galaxy s10 5g (adreno 640, sm-g977x)"]]],["qualcomm adreno 650","650",0,[[2274,1080,90,"asus zenfone 7"],[3101,1387,50,"samsung galaxy s20 ultra 5g (sm-g988u1)"]]]]\')},535:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["apple a10 gpu","10",0,[[2048,1536,41,"apple ipad (6th gen)"],[2160,1620,36,"apple ipad (10.2-inch) (7th generation)"]]],["apple a10x gpu","10",0,[[2048,1536,59,"apple ipad pro (10.5-inch)"],[2224,1668,69,"apple ipad pro (10.5-inch)"],[2732,2048,46,"apple ipad pro (12.9-inch, 2nd gen)"]]],["apple a12 gpu","12",0,[[2048,1536,60,"apple ipad mini (2019)"]]],["apple a12x gpu","12",0,[[2224,1668,116,"apple ipad pro (11-inch)"],[2388,1668,115,"apple ipad pro (11-inch)"],[2732,2048,60,"apple ipad pro (12.9-inch) (3rd generation)"]]],["apple a12z gpu","12",0,[[2388,1668,115,"apple ipad pro (11-inch) (2nd generation)"],[2732,2048,60,"apple ipad pro (12.9 inch) (4th generation)"]]],["apple a13 gpu","13",0,[[2160,1620,59,"apple ipad 9th gen"]]],["apple a14 gpu","14",0,[[2388,1668,52,"apple ipad air 4th gen (wi-fi only)"]]],["apple a15 gpu","15",0,[[2388,1668,60,"apple ipad mini (6th gen)"]]],["apple a7 gpu","7",0,[[2048,1536,10,"apple ipad mini 3"]]],["apple a8 gpu","8",0,[[2048,1536,16,"apple ipad mini 4"]]],["apple a8x gpu","8",0,[[2048,1536,30,"apple ipad air 2"]]],["apple a9 gpu","9",0,[[2048,1536,29,"apple ipad 9.7 (5th gen)"]]],["apple a9x gpu","9",0,[[2048,1536,40,"apple ipad pro 9.7"],[2732,2048,35,"apple ipad pro"]]],["apple m1 gpu","1",0,[[2732,2048,60,"apple ipad pro (12.9-inch) (5th generation)"]]]]\')},438:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["apple a10 gpu","10",0,[[1334,750,104,"apple iphone 7"],[1920,1080,60,"apple iphone 7 plus"],[2001,1125,59,"apple iphone x"]]],["apple a11 gpu","11",0,[[1334,750,64,"apple iphone 8"],[1920,1080,78,"apple iphone 8 plus"]]],["apple a12 gpu","12",0,[[1792,828,60,"apple iphone xr"],[2436,1125,57,"apple iphone xs"],[2208,1242,60,"apple iphone xs max"]]],["apple a13 gpu","13",0,[[1334,750,60,"apple iphone se (2nd gen)"],[1792,828,61,"apple iphone 11"],[2436,1125,60,"apple iphone 11 pro"],[2688,1242,61,"apple iphone 11 pro max"]]],["apple a14 gpu","14",0,[[2338,1080,60,"apple iphone 12 mini"],[2436,1125,60,"apple iphone 12"],[2778,1284,60,"apple iphone 12 pro max"]]],["apple a15 gpu","15",0,[[2338,1080,60,"apple iphone 13 mini"],[2436,1125,60,"apple iphone 13 pro"],[2688,1242,60,"apple iphone 13 pro max"]]],["apple a7 gpu","7",0,[[1136,640,32,"apple iphone 5s"]]],["apple a8 gpu","8",0,[[1136,640,40,"apple ipod touch 6"],[1334,750,36,"apple iphone 6"],[1920,1080,21,"apple iphone 6 plus"]]],["apple a9 gpu","9",0,[[1136,640,90,"apple iphone se"],[1334,750,72,"apple iphone 6s"],[1920,1080,42,"apple iphone 6s plus"]]]]\')},283:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["intel intel hd graphics for atom x5","5",0,[[1024,600,35,"amazon aeokn"],[1024,720,13,"arbor venus 8"],[1217,720,23,"gole gole1"],[1280,736,27,"medion p850x"],[1360,704,15,"chuwi hibox hero mini pc"],[1280,752,21,"tetratab casebook 3"],[1280,759,28,"lenovo yoga a12 (yb-q501f)"],[1366,720,19,"nextbook nx16a11264 ares 11 (x5-z8300)"],[1920,996,20,"teclast x16 pro"],[1920,1008,12,"teclast tbook 16 pro"],[1920,1016,13,"teclast x16 plus"],[1920,1104,13,"medion p851x"],[1920,1116,13,"teclast x80 pro (x5-z8350)"],[1920,1128,8,"cube technology i12-y"],[1920,1133,9,"cube technology i1-tfp (x5-z8350)"],[1920,1134,11,"microtech e-tab pro lte"],[1920,1136,14,"cube technology iwork 10 ultimate (i15-t)"],[1920,1214,10,"chuwi cw-hi10 plus (x5-z8350)"],[2048,1440,8,"teclast x98 plus"],[2160,1368,10,"chuwi hi12 (x5-z8350)"],[2048,1452,10,"teclast x98 plus ii"],[2048,1536,14,"xiaomi mi pad 2"],[2560,1356,7,"baofeng a1"],[2560,1504,6,"chuwi hibook pro (z8350)"],[2560,1518,11,"lenovo yt3-x90 yoga tablet 3 pro (x5-z8550)"]]],["intel intel hd graphics for baytrail","hdfor",0,[[1024,552,13,"multilaser intel 7qc"],[1024,696,17,"thundersoft dual os tablet"],[1024,720,15,"airis onepad 785i"],[1184,720,18,"trimble tdc500"],[1280,736,12,"acer a1-840"],[1280,752,9,"imuz mupad win 10.1 ii"],[1366,720,13,"nextbook nxa116qc164"],[1366,724,10,"cube technology i10 remix"],[1440,1008,12,"teclast x89 kindow"],[1920,1008,8,"minix neo z64"],[1920,1014,9,"cube technology i7 cx remix"],[1920,1032,11,"hp slate 17"],[1920,1104,5,"jltd d630"],[1920,1128,6,"intel(r) e1008"],[1920,1133,9,"pipo w3f"],[2048,1440,6,"kruger & matz eagle 975 (km0975)"],[2048,1448,6,"jide e-tab 3g"],[2048,1464,6,"reeder a10ix air"],[2560,1344,7,"lenovo yoga tablet 2 pro-1380"],[2560,1504,5,"teclast x10hd 3g"]]],["intel mesa dri intel bay trail","dribay",0,[[1366,768,15,"google chromebook pixel (2015, n2830)"]]],["intel mesa dri intel hd","drihd",0,[[688,412,39,"hp chromebook x360 11 g1 ee"],[960,568,36,"google chromebook pixel (2015, n3450)"],[1024,561,28,"aaeon up-cht01 up board"],[1024,736,33,"google chromebook reef (n3350)"]]],["intel mesa dri intel hd graphics 400","400",0,[[688,412,41,"asus c202sa chromebook"],[768,431,45,"hp chromebook 11 g5"],[960,568,25,"acer chromebook r11 (n3050)"],[1366,768,19,"samsung chromebook 3"],[1536,832,25,"google chromebook r11 (n3160)"],[1920,1080,17,"acer chromebook 14"]]],["intel mesa dri intel hd graphics 510","510",0,[[690,378,53,"hp chromebook chell"],[688,412,60,"acer chromebook 14 for work"]]],["intel mesa dri intel hd graphics 515","515",0,[[1033,617,56,"samsung chromebook pro (m7-6y75, caroline)"],[1536,1088,32,"google chromebook pixel (2015, m3-6y30)"],[1920,980,32,"asus c302 chromebook flip"],[2400,1504,22,"samsung chromebook pro (caroline)"],[3200,1640,12,"google chromebook pixel (2015, 4405y)"]]],["intel mesa dri intel hd graphics 520","520",0,[[700,412,60,"acer chromebook 14 for work (i3-6100u)"]]],["intel mesa dri intel hd graphics 5500","5500",0,[[1080,575,59,"google chromebook pixel (2015, i3-5005u)"],[1920,1000,30,"google chromebook pixel (2015, i5-5300u)"],[2560,1700,14,"google chromebook pixel (2015, i5-5200u)"]]],["intel mesa dri intel hd graphics 615","615",0,[[1034,618,55,"google soraka (4415y)"],[1200,720,34,"google poppy (4410y, kabylake)"],[2400,1504,21,"google chromebook eve (i5-7y54)"]]],["intel mesa dri intel kabylake gt2","2",0,[[960,568,38,"google chromebook pixel (2015, m3-7y30)"]]]]\')},327:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["arm mali-t604 mp4","604",0,[[2560,1504,4,"google nexus 10"]]],["arm mali-t622","622",0,[[1024,564,12,"telechips tcc896x (quad core, development board)"],[1280,720,7,"leadcore l1860 (mali-t622, development board)"]]],["arm mali-t624","624",0,[[1794,1080,7,"huawei grace"],[1812,1080,6,"huawei abc-ul00"],[1830,1080,10,"huawei p8 max (dav-70x)"],[1920,1080,4,"sony amai vp9"],[1920,1104,9,"huawei dtab compact d-02h (docomo)"],[1920,1128,8,"huawei dtab d-01h (docomo)"],[1824,1200,9,"huawei mediapad m2 (m2-80xx)"],[1830,1200,9,"huawei mediapad x2 (gem-701l, gem-702l, gem-703l)"]]],["arm mali-t624 mp2","624",0,[[1280,720,5,"samsung sm-g910f (mali-t624)"]]],["arm mali-t624 mp4","624",0,[[1794,1080,9,"huawei z100"]]],["arm mali-t628","628",0,[[1024,600,30,"thinkware inavi davinci"],[2560,1536,8,"meizu mx4 pro"]]],["arm mali-t628 mp2","628",0,[[1280,720,8,"leadcore l1860 (development board)"]]],["arm mali-t628 mp6","628",0,[[800,480,35,"gen2wave rp1600"],[1280,672,14,"hardkernel odroid-xu3 (development board)"],[1280,720,26,"samsung galaxy alpha (mali-t628, sm-g850)"],[1920,1080,11,"samsung galaxy note iii (mali-t628, sm-n900, sm-n9000q)"],[2560,1600,3,"samsung sm-t520 galaxy tab 10.1"]]],["arm mali-t720","720",0,[[432,240,16,"unihertz jelly pro"],[782,480,8,"mobiistar lai zoro"],[784,480,8,"lg k3 (k100)"],[791,480,6,"i-mobile i-style 812 4g"],[800,480,4,"lava iris 550"],[854,480,3,"verykool sl5009 jet"],[897,540,5,"bluboo xfire"],[960,540,3,"siswoo a5 chocolate"],[1024,552,4,"bb-mobile tq763i techno 7.0 lte"],[1024,714,9,"bluedot bnt-791 (2g)"],[1024,720,3,"zte e8qp"],[1280,624,10,"panasonic p55 novo 4g"],[1280,648,4,"tcl 9025"],[1280,656,7,"acer a1-734 iconia talk s"],[1184,720,4,"lenovo xt1700, xt1706, k10a40"],[1187,720,7,"lg k8 (k350)"],[1189,720,5,"ark impulse p2"],[1193,720,7,"lg x power (k220, f750)"],[1196,720,2,"dtac phone m2"],[1198,720,5,"dtac phone t3"],[1205,720,7,"firefly aurii passion"],[1206,720,4,"archos 50 power"],[1208,720,3,"advan i7 plus"],[1217,720,7,"energy sistem energy phone max 2+"],[1238,720,9,"vnpt technology vivas lotus s3 lte"],[1280,720,2,"archos bush spira c2 5"],[1280,736,2,"digma cs1062ml citi 1903 4g"],[1280,737,3,"waywalkers t805g"],[1280,740,3,"casper via l8"],[1280,746,3,"philips tle821l e line 4g"],[1280,752,3,"4good light at200"],[1280,755,7,"leotec letab1020 supernova qi32"],[1356,720,8,"xiaolajiao la-v11"],[1360,720,7,"tecno in5"],[1368,720,7,"tinno p100"],[1280,800,4,"samsung galaxy tab e 8.0 (sm-t375x, sm-t377x)"],[1920,936,4,"panasonic eluga note"],[1920,996,4,"cube technology u83 iplay10"],[1776,1080,4,"fly fs522 cirrus 14"],[1787,1080,5,"lg x cam (k580, f690)"],[1920,1008,6,"alcatel one touch xess (p17aa)"],[1794,1080,3,"ramos mos 1 max"],[1800,1080,4,"archos sense 55 s"],[1815,1080,4,"archos diamond plus"],[1920,1032,5,"virgin media tellytablet"],[1920,1080,2,"infocus m640"],[1920,1104,4,"vestel v tab 7030"],[1920,1116,4,"jty q101"],[1920,1128,2,"archos 80 oxygen"],[2009,1080,4,"tcl 5099"],[1920,1136,4,"asus zenpad 10 (p028 z301m)"]]],["arm mali-t760","760",0,[[854,480,14,"aux t6200l"],[897,540,13,"sony xperia e4g (e20xx)"],[960,540,12,"gionee v381"],[960,568,24,"asus c100pa chromebook flip"],[1024,552,12,"archos 70 helium"],[1024,720,10,"wiz t-8168"],[1188,720,9,"lg h520 magna, h522 prime plus"],[1196,720,9,"acer s57 liquid jade z"],[1280,720,8,"dunetek vitamin a"],[1280,736,8,"archos 80b helium"],[1280,752,8,"frael m10g 4g"],[1280,768,8,"meizu m1"],[1794,1080,6,"sugar 2 ss136 l8560"],[1920,1032,9,"qbic bxp-300 box pc"],[1920,1080,4,"byxpress mphone xone"],[1920,1104,6,"cube technology t7"],[1920,1128,5,"nec lavietab pc-te510bal"],[2048,1440,3,"teclast p98 4g"],[2560,1440,10,"samsung galaxy note 4 (mali-t760, sm-n910x, sm-n916)"]]],["arm mali-t760 mp6","760",0,[[1920,1080,17,"samsung galaxy a8 (mali-t760, sm-a800x, scv32)"],[2048,1536,12,"samsung galaxy tab s 2 8.0 (sm-t710, sm-t715)"],[2560,1532,10,"samsung galaxy note edge (mali-t760, sm-n915x)"],[2560,1600,10,"samsung galaxy tab s 10.5 (mali-t760, sm-t805s)"]]],["arm mali-t760 mp8","760",0,[[1280,768,42,"samsung sm-w2016"],[1920,1080,25,"meizu niux"],[2160,1200,17,"idealens k2"],[2560,1440,12,"le xiang deepoon m2 vr"],[2560,1504,15,"bungbungame kalos 2"]]],["arm mali-t764","764",0,[[1024,600,19,"gpd q9"],[1280,720,15,"gpd xd"],[1280,752,13,"kruger & matz 1064.1g eagle"],[1280,800,13,"pipo p7"],[1920,1008,6,"rockchip mk809 4k tv stick"],[1920,1010,8,"pipo p7 hd"],[1920,1020,5,"rockchip mk903v mini tv"],[1920,1032,7,"acooo oneboard pro+"],[1872,1080,7,"contextmedia wallboard 32 tablet (p-wal-106-yit-01)"],[1920,1080,7,"rockchip cs4k tv box"],[1920,1128,7,"archos 101 oxygen"],[2048,1437,5,"haier pad 971"],[2048,1440,5,"hisense f5281 vidaa pad"],[2560,1504,4,"teclast p90hd"]]],["arm mali-t820","820",0,[[1344,720,5,"lenovo k320t"],[1776,1080,6,"leagoo t5c"],[1920,1008,7,"probox2 ava tv box"],[1920,1080,4,"skyworth coocaa 5s32 n2"]]],["arm mali-t830","830",0,[[1280,720,9,"samsung galaxy on7 (mali-t830, sm-g600x)"],[1280,800,9,"samsung sm-t536 (mali-t830)"],[1776,1080,9,"huawei p10 lite (was-xxx)"],[1794,1080,9,"huawei honor 6x (bln-xxx)"],[1920,1080,5,"samsung galaxy on7 prime 2018 (sm-g611)"],[2033,1080,8,"huawei p smart (fig-xxx)"],[2040,1080,9,"huawei maimang 6 (rne-xxx)"],[1920,1200,5,"samsung galaxy tab a 10.1 (sm-t580, sm-t585)"]]],["arm mali-t860","860",0,[[1184,720,8,"tcl a626"],[1196,720,8,"green orange go t2"],[1280,720,14,"htc one a9s"],[1920,1024,17,"hardkernel odroid-n1 (development board)"],[1920,1032,16,"contextmedia p-wal-108-elc-02"],[1920,1080,7,"htc u play (u-2u)"],[1920,1116,15,"imuz revolution a8"],[1920,1128,15,"rockchip rk3399 (development board)"],[2400,1440,10,"samsung chromebook plus (kevin)"]]],["arm mali-t860 mp2","860",0,[[598,480,25,"cipherlab 9700a"],[1184,720,11,"vernee m5"],[1193,720,11,"lg x power 2 (u+, x500, m-x320, m320)"],[1196,720,11,"lava z25"],[1199,720,11,"lg stylus 3 (m400)"],[1212,720,11,"meeg 306"],[1280,720,10,"oppo r66"],[1336,720,13,"asus pegasus 4s (x018d zb570tl)"],[1344,720,13,"allview x4 soul infinity n"],[1776,1080,7,"benq f55"],[1794,1080,6,"alcatel 7070"],[1798,1080,7,"energy sistem energy phone pro 3"],[1806,1080,8,"tecno phantom 6"],[1807,1080,7,"covia fleaz cp-j55a g07"],[1810,1080,8,"archos 55 diamond 2 plus"],[1920,1080,4,"advan vandroid i55c"],[2004,1080,7,"asus zenfone max plus m1 (x018d zb570tl)"],[1920,1128,7,"verizon qtaxia1"]]],["arm mali-t880","880",0,[[1184,720,22,"doogee mix"],[1280,720,20,"lenovo k8"],[1344,720,18,"casper via f2"],[1776,1080,11,"alcatel 6060 (mali-t880)"],[1794,1080,20,"huawei mate 8 (nxt-xxx)"],[1824,1080,11,"meiigoo m1"],[1920,1080,10,"letv leeco lex650"],[2016,1080,9,"vernee mix 2"],[2064,1080,10,"umi s2 pro"],[2392,1440,12,"huawei honor v8 (knt-al20)"],[2434,1440,11,"huawei honor note 8 premium edition (edi-al10)"],[2560,1440,24,"meizu pro 6 plus"],[2560,1480,10,"huawei dtab compact d-01j (docomo)"],[2560,1600,10,"huawei mediapad m3 (btv-xxx)"]]],["arm mali-t880 mp12","880",0,[[1920,1080,44,"samsung galaxy s7 (sm-g930f)"],[2560,1440,27,"samsung galaxy note 7 (mali-t880, sm-n930)"]]],["arm mali-t880 mp2","880",0,[[1184,720,19,"sony pikachu"],[1376,720,17,"umi s2"],[1776,1080,10,"coolpad a9s-9"],[1800,1080,11,"infinix x603"],[1920,1080,9,"innjoo pro2"]]],["arm mali-t880 mp4","880",0,[[1280,672,18,"mediatek x20 (development board)"],[1794,1080,13,"infocus tsp"],[1800,1080,16,"infinix x602 zero 4 plus"],[1806,1080,16,"tecno phantom a9"],[1810,1080,8,"mobiistar prime x pro"],[1815,1080,16,"tecno phantom 6 plus"],[1920,1080,7,"elephone r9"],[2048,1440,12,"brown tab 1"],[2392,1440,12,"vernee apollo"],[2416,1440,11,"freetel ftj162b kiwami2"],[2560,1440,10,"ivvi i5"]]],["mali-t830","830",0,[[1480,720,10,"samsung gm-j600fn"]]]]\')},538:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["arm mali-g31","31",0,[[1920,1080,7,"mecool km9 pro"]]],["arm mali-g51","51",0,[[1920,636,10,"telechips tcc803x_lcn"],[1920,1080,5,"skyworth 8n10 g1a"]]],["arm mali-g52 mc1","52",0,[[1280,736,25,"amazon fire hd 8 (kfonwi, 2020)"]]],["arm mali-g52 mc2","52",0,[[2110,1080,23,"xiaomi redmi 10x 4g"],[2264,1080,20,"xiaomi redmi 9 m2004j19c"],[2400,1080,20,"huawei y9a frl-l22"]]],["arm mali-g57 mc3","57",0,[[2158,1080,48,"realme rmx2173"]]],["arm mali-g71","71",0,[[1280,720,14,"samsung sm-j337"],[1812,1080,53,"huawei mate 9 (mha-xxx)"],[1920,1080,12,"sony amai vp9 (mali-g71)"],[2009,1080,11,"tcl 6062"],[2016,1080,11,"gionee s11"],[2038,1080,10,"ulefone power 3"],[2076,1080,15,"samsung galaxy a8 2018 (sm-a530x)"],[2094,1080,15,"samsung sm-a730x"],[2160,1080,9,"oukitel k6"],[2368,1440,35,"huawei honor v9 (duk-xxx)"],[2560,1440,32,"huawei mate 9 pro (lon-xxx)"],[2678,1440,41,"samsung galaxy s8 (mali-g71, sm-g950x)"],[2960,1440,39,"samsung galaxy s8+ (mali-g71, sm-g955x)"]]],["arm mali-g72","72",0,[[2041,1080,55,"huawei mate 10 pro (bla-xxx)"],[2160,1080,56,"huawei honor view 10 (v10, bkl-xxx)"],[2560,1440,43,"huawei mate 10 (alp-xxx)"],[2768,1440,47,"samsung galaxy s9 (mali-g72, sm-g960)"],[2792,1440,47,"samsung galaxy s9+ (mali-g72, sm-g965)"]]],["arm mali-g76","76",0,[[2020,1080,60,"samsung galaxy s10e (mali-g76, sm-g970x)"],[2029,1080,31,"samsung galaxy s10 plus sm-g975n"],[2064,1080,60,"samsung galaxy note 10 5g (mali-g76, sm-n971x)"],[2159,1080,47,"samsung galaxy a51 5g"],[2232,1080,59,"huawei honor 20 pro yal-l41"],[2328,1128,60,"huawei mate 30 pro (lio-lx9, lio-xl00"],[2723,1440,57,"samsung galaxy s10 (mali-g76, sm-g973x)"],[2730,1440,56,"samsung galaxy s10+ (mali-g76, sm-g975x)"],[2733,1440,56,"samsung galaxy s10 5g (mali-g76, sm-g977x)"],[2759,1440,57,"samsung galaxy note 10+ (mali-g76, sm-n975x)"]]],["arm mali-g77","77",0,[[2178,1080,60,"samsung galaxy s20 5g (sm-g981b)"],[2200,1080,67,"samsung galaxy s20 ultra 5g (sm-g988b)"],[2304,1080,55,"oppo pdcm00"]]],["arm mali-g77 mc9","77",0,[[2293,1080,59,"oppo pdsm00"]]],["arm mali-g78","78",0,[[2646,1288,90,"huawei mate 40 pro 5g"]]],["arm mali-t604 mp4","604",0,[[2560,1504,4,"google nexus 10"]]],["arm mali-t622","622",0,[[1024,564,12,"telechips tcc896x (quad core, development board)"],[1280,720,7,"leadcore l1860 (mali-t622, development board)"]]],["arm mali-t624","624",0,[[1794,1080,7,"huawei grace"],[1812,1080,6,"huawei abc-ul00"],[1830,1080,10,"huawei p8 max (dav-70x)"],[1920,1080,4,"sony amai vp9"],[1920,1104,9,"huawei dtab compact d-02h (docomo)"],[1920,1128,8,"huawei dtab d-01h (docomo)"],[1824,1200,9,"huawei mediapad m2 (m2-80xx)"],[1830,1200,9,"huawei mediapad x2 (gem-701l, gem-702l, gem-703l)"]]],["arm mali-t624 mp2","624",0,[[1280,720,5,"samsung sm-g910f (mali-t624)"]]],["arm mali-t624 mp4","624",0,[[1794,1080,9,"huawei z100"]]],["arm mali-t628","628",0,[[1024,600,30,"thinkware inavi davinci"],[2560,1536,8,"meizu mx4 pro"]]],["arm mali-t628 mp2","628",0,[[1280,720,8,"leadcore l1860 (development board)"]]],["arm mali-t628 mp6","628",0,[[800,480,35,"gen2wave rp1600"],[1280,672,14,"hardkernel odroid-xu3 (development board)"],[1280,720,26,"samsung galaxy alpha (mali-t628, sm-g850)"],[1920,1080,11,"samsung galaxy note iii (mali-t628, sm-n900, sm-n9000q)"],[2560,1600,3,"samsung sm-t520 galaxy tab 10.1"]]],["arm mali-t720","720",0,[[432,240,16,"unihertz jelly pro"],[782,480,8,"mobiistar lai zoro"],[784,480,8,"lg k3 (k100)"],[791,480,6,"i-mobile i-style 812 4g"],[800,480,4,"lava iris 550"],[854,480,3,"verykool sl5009 jet"],[897,540,5,"bluboo xfire"],[960,540,3,"siswoo a5 chocolate"],[1024,552,4,"bb-mobile tq763i techno 7.0 lte"],[1024,714,9,"bluedot bnt-791 (2g)"],[1024,720,3,"zte e8qp"],[1280,624,10,"panasonic p55 novo 4g"],[1280,648,4,"tcl 9025"],[1280,656,7,"acer a1-734 iconia talk s"],[1184,720,4,"lenovo xt1700, xt1706, k10a40"],[1187,720,7,"lg k8 (k350)"],[1189,720,5,"ark impulse p2"],[1193,720,7,"lg x power (k220, f750)"],[1196,720,2,"dtac phone m2"],[1198,720,5,"dtac phone t3"],[1205,720,7,"firefly aurii passion"],[1206,720,4,"archos 50 power"],[1208,720,3,"advan i7 plus"],[1217,720,7,"energy sistem energy phone max 2+"],[1238,720,9,"vnpt technology vivas lotus s3 lte"],[1280,720,2,"archos bush spira c2 5"],[1280,736,2,"digma cs1062ml citi 1903 4g"],[1280,737,3,"waywalkers t805g"],[1280,740,3,"casper via l8"],[1280,746,3,"philips tle821l e line 4g"],[1280,752,3,"4good light at200"],[1280,755,7,"leotec letab1020 supernova qi32"],[1356,720,8,"xiaolajiao la-v11"],[1360,720,7,"tecno in5"],[1368,720,7,"tinno p100"],[1280,800,4,"samsung galaxy tab e 8.0 (sm-t375x, sm-t377x)"],[1920,936,4,"panasonic eluga note"],[1920,996,4,"cube technology u83 iplay10"],[1776,1080,4,"fly fs522 cirrus 14"],[1787,1080,5,"lg x cam (k580, f690)"],[1920,1008,6,"alcatel one touch xess (p17aa)"],[1794,1080,3,"ramos mos 1 max"],[1800,1080,4,"archos sense 55 s"],[1815,1080,4,"archos diamond plus"],[1920,1032,5,"virgin media tellytablet"],[1920,1080,2,"infocus m640"],[1920,1104,4,"vestel v tab 7030"],[1920,1116,4,"jty q101"],[1920,1128,2,"archos 80 oxygen"],[2009,1080,4,"tcl 5099"],[1920,1136,4,"asus zenpad 10 (p028 z301m)"]]],["arm mali-t760","760",0,[[854,480,14,"aux t6200l"],[897,540,13,"sony xperia e4g (e20xx)"],[960,540,12,"gionee v381"],[960,568,24,"asus c100pa chromebook flip"],[1024,552,12,"archos 70 helium"],[1024,720,10,"wiz t-8168"],[1188,720,9,"lg h520 magna, h522 prime plus"],[1196,720,9,"acer s57 liquid jade z"],[1280,720,8,"dunetek vitamin a"],[1280,736,8,"archos 80b helium"],[1280,752,8,"frael m10g 4g"],[1280,768,8,"meizu m1"],[1794,1080,6,"sugar 2 ss136 l8560"],[1920,1032,9,"qbic bxp-300 box pc"],[1920,1080,4,"byxpress mphone xone"],[1920,1104,6,"cube technology t7"],[1920,1128,5,"nec lavietab pc-te510bal"],[2048,1440,3,"teclast p98 4g"],[2560,1440,10,"samsung galaxy note 4 (mali-t760, sm-n910x, sm-n916)"]]],["arm mali-t760 mp6","760",0,[[1920,1080,17,"samsung galaxy a8 (mali-t760, sm-a800x, scv32)"],[2048,1536,12,"samsung galaxy tab s 2 8.0 (sm-t710, sm-t715)"],[2560,1532,10,"samsung galaxy note edge (mali-t760, sm-n915x)"],[2560,1600,10,"samsung galaxy tab s 10.5 (mali-t760, sm-t805s)"]]],["arm mali-t760 mp8","760",0,[[1280,768,42,"samsung sm-w2016"],[1920,1080,25,"meizu niux"],[2160,1200,17,"idealens k2"],[2560,1440,12,"le xiang deepoon m2 vr"],[2560,1504,15,"bungbungame kalos 2"]]],["arm mali-t764","764",0,[[1024,600,19,"gpd q9"],[1280,720,15,"gpd xd"],[1280,752,13,"kruger & matz 1064.1g eagle"],[1280,800,13,"pipo p7"],[1920,1008,6,"rockchip mk809 4k tv stick"],[1920,1010,8,"pipo p7 hd"],[1920,1020,5,"rockchip mk903v mini tv"],[1920,1032,7,"acooo oneboard pro+"],[1872,1080,7,"contextmedia wallboard 32 tablet (p-wal-106-yit-01)"],[1920,1080,7,"rockchip cs4k tv box"],[1920,1128,7,"archos 101 oxygen"],[2048,1437,5,"haier pad 971"],[2048,1440,5,"hisense f5281 vidaa pad"],[2560,1504,4,"teclast p90hd"]]],["arm mali-t820","820",0,[[1344,720,5,"lenovo k320t"],[1776,1080,6,"leagoo t5c"],[1920,1008,7,"probox2 ava tv box"],[1920,1080,4,"skyworth coocaa 5s32 n2"]]],["arm mali-t830","830",0,[[1280,720,9,"samsung galaxy on7 (mali-t830, sm-g600x)"],[1280,800,9,"samsung sm-t536 (mali-t830)"],[1776,1080,9,"huawei p10 lite (was-xxx)"],[1794,1080,9,"huawei honor 6x (bln-xxx)"],[1920,1080,5,"samsung galaxy on7 prime 2018 (sm-g611)"],[2033,1080,8,"huawei p smart (fig-xxx)"],[2040,1080,9,"huawei maimang 6 (rne-xxx)"],[1920,1200,5,"samsung galaxy tab a 10.1 (sm-t580, sm-t585)"]]],["arm mali-t860","860",0,[[1184,720,8,"tcl a626"],[1196,720,8,"green orange go t2"],[1280,720,14,"htc one a9s"],[1920,1024,17,"hardkernel odroid-n1 (development board)"],[1920,1032,16,"contextmedia p-wal-108-elc-02"],[1920,1080,7,"htc u play (u-2u)"],[1920,1116,15,"imuz revolution a8"],[1920,1128,15,"rockchip rk3399 (development board)"],[2400,1440,10,"samsung chromebook plus (kevin)"]]],["arm mali-t860 mp2","860",0,[[598,480,25,"cipherlab 9700a"],[1184,720,11,"vernee m5"],[1193,720,11,"lg x power 2 (u+, x500, m-x320, m320)"],[1196,720,11,"lava z25"],[1199,720,11,"lg stylus 3 (m400)"],[1212,720,11,"meeg 306"],[1280,720,10,"oppo r66"],[1336,720,13,"asus pegasus 4s (x018d zb570tl)"],[1344,720,13,"allview x4 soul infinity n"],[1776,1080,7,"benq f55"],[1794,1080,6,"alcatel 7070"],[1798,1080,7,"energy sistem energy phone pro 3"],[1806,1080,8,"tecno phantom 6"],[1807,1080,7,"covia fleaz cp-j55a g07"],[1810,1080,8,"archos 55 diamond 2 plus"],[1920,1080,4,"advan vandroid i55c"],[2004,1080,7,"asus zenfone max plus m1 (x018d zb570tl)"],[1920,1128,7,"verizon qtaxia1"]]],["arm mali-t880","880",0,[[1184,720,22,"doogee mix"],[1280,720,20,"lenovo k8"],[1344,720,18,"casper via f2"],[1776,1080,11,"alcatel 6060 (mali-t880)"],[1794,1080,20,"huawei mate 8 (nxt-xxx)"],[1824,1080,11,"meiigoo m1"],[1920,1080,10,"letv leeco lex650"],[2016,1080,9,"vernee mix 2"],[2064,1080,10,"umi s2 pro"],[2392,1440,12,"huawei honor v8 (knt-al20)"],[2434,1440,11,"huawei honor note 8 premium edition (edi-al10)"],[2560,1440,24,"meizu pro 6 plus"],[2560,1480,10,"huawei dtab compact d-01j (docomo)"],[2560,1600,10,"huawei mediapad m3 (btv-xxx)"]]],["arm mali-t880 mp12","880",0,[[1920,1080,44,"samsung galaxy s7 (sm-g930f)"],[2560,1440,27,"samsung galaxy note 7 (mali-t880, sm-n930)"]]],["arm mali-t880 mp2","880",0,[[1184,720,19,"sony pikachu"],[1376,720,17,"umi s2"],[1776,1080,10,"coolpad a9s-9"],[1800,1080,11,"infinix x603"],[1920,1080,9,"innjoo pro2"]]],["arm mali-t880 mp4","880",0,[[1280,672,18,"mediatek x20 (development board)"],[1794,1080,13,"infocus tsp"],[1800,1080,16,"infinix x602 zero 4 plus"],[1806,1080,16,"tecno phantom a9"],[1810,1080,8,"mobiistar prime x pro"],[1815,1080,16,"tecno phantom 6 plus"],[1920,1080,7,"elephone r9"],[2048,1440,12,"brown tab 1"],[2392,1440,12,"vernee apollo"],[2416,1440,11,"freetel ftj162b kiwami2"],[2560,1440,10,"ivvi i5"]]],["mali-g71","71",0,[[2220,1080,54,"samsung s8+ sm-g955f"]]],["mali-g72","72",0,[[2220,1080,56,"samsung s9+ sm-g965f"]]],["mali-t830","830",0,[[1480,720,10,"samsung gm-j600fn"]]]]\')},884:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["nvidia tegra","",0,[[2048,1440,23,"google nexus 9"]]],["nvidia tegra k1","1",0,[[1920,1008,32,"nvidia jetson tk1 (pm375, development board)"],[1920,1032,12,"lenovo k1 hd (2014)"],[1920,1080,28,"nvidia tegra gk20a (ardbeg, development board)"],[1920,1104,29,"google project tango"],[2048,1536,21,"xiaomi mi pad"],[3840,2088,8,"lenovo thinkvision 28"]]],["nvidia tegra x1","1",0,[[1920,1080,60,"nvidia shield android tv"],[2560,1688,33,"google pixel c"]]]]\')},214:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["powervr rogue g6110","6110",0,[[1024,600,11,"dasaita mtcd px5 head unit"],[1280,752,8,"visual land prestige prime 10se"],[1366,720,7,"ditecma m1092r"],[1920,1008,6,"vensmile t051 tv box"],[1920,1016,5,"geekbuying geekbox tv box"],[1920,1032,4,"hannspree hsg1351"],[1920,1080,5,"10moons tv box (rogue g6110)"],[1920,1128,5,"teclast p10"]]],["powervr rogue g6200","6200",0,[[1280,720,15,"infocus m530"],[1280,736,12,"amazon kindle fire hd 8 (5th gen, kfmewi)"],[1280,752,12,"amazon kindle fire hd 10 (5th gen, kftbwi)"],[1280,800,9,"amazon kindle fire hd 7 (4th gen, kfaswi)"],[1794,1080,5,"ubik uno"],[1920,1080,6,"cherry mobile x220 cosmos one plus"],[1920,1152,8,"meizu mx4 (m460, m460a, m461)"],[2392,1440,6,"hasee hl9916004"],[2560,1440,6,"condor allure a100 pgn-607"]]],["powervr rogue g6230","6230",0,[[1920,1008,8,"rikomagic mk80 tv box (tronsmart draco aw80, fantasy a80)"],[1920,1016,7,"cubietech cubieboard 4 (cc-a80, hansen-a80, development board)"],[2048,1440,5,"teclast p98air"],[2048,1464,7,"actions gs900a (development board)"]]],["powervr rogue g6400","6400",0,[[1794,1080,8,"lg f490 liger (g6400)"],[1920,1032,8,"renesas lager"]]],["powervr rogue g6430","6430",0,[[1024,552,26,"asus fonepad 7 (k01f fe171mg)"],[1280,720,27,"asus zenfone 2 (z008 ze550ml)"],[1280,736,20,"asus fonepad 7 (k019 fe375cg)"],[1280,752,27,"asus zenpad 10 (p01t z300cl)"],[1788,1080,8,"lg f490 liger (g6430)"],[1920,1080,15,"asus zenfone zoom (intel z3560, z00xsb zx551ml)"],[1920,1104,11,"asus memo pad 8 ast21 (intel z3580, k015 me581cl)"],[2048,1440,11,"asus zenpad s 8.0 (p01m z580c)"],[2560,1504,9,"dell venue 10 7040"]]],["powervr rogue ge8100","8100",0,[[906,480,8,"tinno k600"],[1184,720,5,"mediatek mt6739 (development board, rogue ge8100)"],[1339,720,5,"vodafone vfd 720"],[1344,720,6,"gionee f205"]]],["powervr rogue ge8300","8300",0,[[1280,752,9,"acer b3-a40 iconia one 10"],[1208,800,8,"verizon qtaki1"],[1920,1128,5,"acer b3-a40 fhd iconia one 10"]]],["powervr rogue gx6250","6250",0,[[688,412,16,"lenovo n23 yoga / flex 11 chromebook"],[1280,672,25,"renesas salvator-x-r8a7796"],[1280,736,25,"mediatek mt8173 (development board)"],[1920,980,10,"google chromebook pixel (2015, rogue gx6250)"],[1920,1016,14,"peloton ruby"],[1920,1020,8,"acer chromebook r13"],[1920,1032,13,"renesas salvator-x-m3"],[1920,1080,12,"xiaomi mibox 3 pro tv box"],[1920,1128,10,"amazon kindle fire hd 10 (2017, kfsuwi)"],[2048,1536,7,"alps jdtab j01"],[2560,1504,7,"onda f109"]]],["powervr rogue gx6650","6650",0,[[1280,672,52,"renesas salvator-x"],[1920,1032,24,"renesas salvator-x (octa core)"]]],["powervr rogue han","han",0,[[1794,1080,6,"ireadygo w3d"],[1920,1080,6,"changhong x6"],[2392,1440,5,"alcatel one touch d820"],[2560,1440,4,"alcatel 6071y phantom"]]],["powervr rogue hood","",0,[[1280,736,16,"dell venue 7 3740"],[1920,1080,12,"lenovo p90"],[1920,1104,9,"dell venue 8 3840"]]],["powervr rogue lando","",0,[[1920,1080,13,"spreadtrum sp9861e (development board, rogue lando)"]]],["powervr rogue marlowe","",0,[[1920,1080,39,"meitu v6 mp1605"],[2560,1440,25,"meizu pro 7 plus"]]]]\')},804:(e,t,n)=>{var i={"./d-adreno.json":622,"./d-amd.json":183,"./d-apple.json":732,"./d-geforce.json":405,"./d-intel.json":178,"./d-nvidia.json":217,"./d-radeon.json":145,"./m-adreno.json":921,"./m-apple-ipad.json":535,"./m-apple.json":438,"./m-intel.json":283,"./m-mali-t.json":327,"./m-mali.json":538,"./m-nvidia.json":884,"./m-powervr.json":214};function r(e){var t=o(e);return n(t)}function o(e){if(!n.o(i,e)){var t=new Error("Cannot find module \'"+e+"\'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}r.keys=function(){return Object.keys(i)},r.resolve=o,e.exports=r,r.id=804},354:(e,t,n)=>{var i,r=function(){function e(e,t){if(!r[e]){r[e]={};for(var n=0;ni;i++){var s=t.charCodeAt(i);n[2*i]=s>>>8,n[2*i+1]=s%256}return n},decompressFromUint8Array:function(e){if(null==e)return o.decompress(e);for(var n=new Array(e.length/2),i=0,r=n.length;r>i;i++)n[i]=256*e[2*i]+e[2*i+1];var s=[];return n.forEach((function(e){s.push(t(e))})),o.decompress(s.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":o._compress(e,6,(function(e){return i.charAt(e)}))},decompressFromEncodedURIComponent:function(t){return null==t?"":""==t?null:(t=t.replace(/ /g,"+"),o._decompress(t.length,32,(function(n){return e(i,t.charAt(n))})))},compress:function(e){return o._compress(e,16,(function(e){return t(e)}))},_compress:function(e,t,n){if(null==e)return"";var i,r,o,s={},a={},d="",c="",l="",h=2,u=3,p=2,m=[],g=0,f=0;for(o=0;oi;i++)g<<=1,f==t-1?(f=0,m.push(n(g)),g=0):f++;for(r=l.charCodeAt(0),i=0;8>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1}else{for(r=1,i=0;p>i;i++)g=g<<1|r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r=0;for(r=l.charCodeAt(0),i=0;16>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1}0==--h&&(h=Math.pow(2,p),p++),delete a[l]}else for(r=s[l],i=0;p>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1;0==--h&&(h=Math.pow(2,p),p++),s[c]=u++,l=String(d)}if(""!==l){if(Object.prototype.hasOwnProperty.call(a,l)){if(l.charCodeAt(0)<256){for(i=0;p>i;i++)g<<=1,f==t-1?(f=0,m.push(n(g)),g=0):f++;for(r=l.charCodeAt(0),i=0;8>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1}else{for(r=1,i=0;p>i;i++)g=g<<1|r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r=0;for(r=l.charCodeAt(0),i=0;16>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1}0==--h&&(h=Math.pow(2,p),p++),delete a[l]}else for(r=s[l],i=0;p>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1;0==--h&&(h=Math.pow(2,p),p++)}for(r=2,i=0;p>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1;for(;;){if(g<<=1,f==t-1){m.push(n(g));break}f++}return m.join("")},decompress:function(e){return null==e?"":""==e?null:o._decompress(e.length,32768,(function(t){return e.charCodeAt(t)}))},_decompress:function(e,n,i){var r,o,s,a,d,c,l,h=[],u=4,p=4,m=3,g="",f=[],v={val:i(0),position:n,index:1};for(r=0;3>r;r+=1)h[r]=r;for(s=0,d=Math.pow(2,2),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;switch(s){case 0:for(s=0,d=Math.pow(2,8),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;l=t(s);break;case 1:for(s=0,d=Math.pow(2,16),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;l=t(s);break;case 2:return""}for(h[3]=l,o=l,f.push(l);;){if(v.index>e)return"";for(s=0,d=Math.pow(2,m),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;switch(l=s){case 0:for(s=0,d=Math.pow(2,8),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;h[p++]=t(s),l=p-1,u--;break;case 1:for(s=0,d=Math.pow(2,16),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;h[p++]=t(s),l=p-1,u--;break;case 2:return f.join("")}if(0==u&&(u=Math.pow(2,m),m++),h[l])g=h[l];else{if(l!==p)return null;g=o+o.charAt(0)}f.push(g),h[p++]=o+g.charAt(0),o=g,0==--u&&(u=Math.pow(2,m),m++)}}};return o}();void 0===(i=function(){return r}.call(t,n,t,e))||(e.exports=i)}},t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={exports:{}};return e[i].call(r.exports,r,r.exports,n),r.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n(607)})().default},577:(e,t)=>{"use strict";t.byteLength=function(e){var t=d(e),n=t[0],i=t[1];return 3*(n+i)/4-i},t.toByteArray=function(e){var t,n,o=d(e),s=o[0],a=o[1],c=new r(function(e,t,n){return 3*(t+n)/4-n}(0,s,a)),l=0,h=a>0?s-4:s;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;return 2===a&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,c[l++]=255&t),1===a&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t),c},t.fromByteArray=function(e){for(var t,i=e.length,r=i%3,o=[],s=16383,a=0,d=i-r;ad?d:a+s));return 1===r?(t=e[i-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===r&&(t=(e[i-2]<<8)+e[i-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"=")),o.join("")};for(var n=[],i=[],r="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,a=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,i){for(var r,o,s=[],a=t;a>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},799:function(e,t){var n,i;this||window,void 0===(i="function"==typeof(n=function(){var e=/^(interactive|loaded|complete)$/,t=window.location?window.location.href:null,n=t&&t.replace(/#.*$/,"").replace(/\\?.*$/,"")||null,i=document.getElementsByTagName("script"),r="readyState"in(i[0]||document.createElement("script")),o=!window.opera||"[object Opera]"!==window.opera.toString(),s="currentScript"in document;"stackTraceLimit"in Error&&Error.stackTraceLimit!==1/0&&(Error.stackTraceLimit,Error.stackTraceLimit=1/0);var a=!1,d=!1;function c(e,t){var n,i=null,r="number"==typeof t;return t=r?Math.round(t):0,"string"==typeof e&&e&&(r?n=e.match(/(data:text\\/javascript(?:;[^,]+)?,.+?|(?:|blob:)(?:http[s]?|file):\\/\\/[\\/]?.+?\\/[^:\\)]*?)(?::\\d+)(?::\\d+)?/):(n=e.match(/^(?:|[^:@]*@|.+\\)@(?=data:text\\/javascript|blob|http[s]?|file)|.+?\\s+(?: at |@)(?:[^:\\(]+ )*[\\(]?)(data:text\\/javascript(?:;[^,]+)?,.+?|(?:|blob:)(?:http[s]?|file):\\/\\/[\\/]?.+?\\/[^:\\)]*?)(?::\\d+)(?::\\d+)?/))&&n[1]||(n=e.match(/\\)@(data:text\\/javascript(?:;[^,]+)?,.+?|(?:|blob:)(?:http[s]?|file):\\/\\/[\\/]?.+?\\/[^:\\)]*?)(?::\\d+)(?::\\d+)?/)),n&&n[1]&&(i=t>0?c(e.slice(e.indexOf(n[0])+n[0].length),t-1):n[1])),i}function l(){if(0===i.length)return null;var t,h,u,p,m,g=[],f=l.skipStackDepth||1;for(t=0;t{"use strict";var t,n="object"==typeof Reflect?Reflect:null,i=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function o(){o.init.call(this)}e.exports=o,e.exports.once=function(e,t){return new Promise((function(n,i){function r(n){e.removeListener(t,o),i(n)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",r),n([].slice.call(arguments))}g(e,t,o,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&g(e,"error",t,{once:!0})}(e,r)}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var s=10;function a(e){if("function"!=typeof e)throw new TypeError(\'The "listener" argument must be of type Function. Received type \'+typeof e)}function d(e){return void 0===e._maxListeners?o.defaultMaxListeners:e._maxListeners}function c(e,t,n,i){var r,o,s,c;if(a(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),s=o[t]),void 0===s)s=o[t]=n,++e._eventsCount;else if("function"==typeof s?s=o[t]=i?[n,s]:[s,n]:i?s.unshift(n):s.push(n),(r=d(e))>0&&s.length>r&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,c=l,console&&console.warn&&console.warn(c)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=l.bind(i);return r.listener=n,i.wrapFn=r,r}function u(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var d=o[e];if(void 0===d)return!1;if("function"==typeof d)i(d,this,t);else{var c=d.length,l=m(d,c);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){s=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},o.prototype.listeners=function(e){return u(this,e,!0)},o.prototype.rawListeners=function(e){return u(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},o.prototype.listenerCount=p,o.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},387:function(e,t){var n;!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(i,r){"use strict";var o=[],s=Object.getPrototypeOf,a=o.slice,d=o.flat?function(e){return o.flat.call(e)}:function(e){return o.concat.apply([],e)},c=o.push,l=o.indexOf,h={},u=h.toString,p=h.hasOwnProperty,m=p.toString,g=m.call(Object),f={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},_=function(e){return null!=e&&e===e.window},y=i.document,E={type:!0,src:!0,nonce:!0,noModule:!0};function S(e,t,n){var i,r,o=(n=n||y).createElement("script");if(o.text=e,t)for(i in E)(r=t[i]||t.getAttribute&&t.getAttribute(i))&&o.setAttribute(i,r);n.head.appendChild(o).parentNode.removeChild(o)}function b(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?h[u.call(e)]||"object":typeof e}var T="3.6.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector",C=function(e,t){return new C.fn.init(e,t)};function x(e){var t=!!e&&"length"in e&&e.length,n=b(e);return!v(e)&&!_(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+F+")"+F+"*"),q=new RegExp(F+"|>"),G=new RegExp(U),z=new RegExp("^"+j+"$"),K={ID:new RegExp("^#("+j+")"),CLASS:new RegExp("^\\\\.("+j+")"),TAG:new RegExp("^("+j+"|[*])"),ATTR:new RegExp("^"+V),PSEUDO:new RegExp("^"+U),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\("+F+"*(even|odd|(([+-]|)(\\\\d*)n|)"+F+"*(?:([+-]|)"+F+"*(\\\\d+)|))"+F+"*\\\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+F+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\("+F+"*((?:-\\\\d)?\\\\d*)"+F+"*\\\\)|)(?=[^-]|$)","i")},W=/HTML$/i,X=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\\\\\[\\\\da-fA-F]{1,6}"+F+"?|\\\\\\\\([^\\\\r\\\\n\\\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},ie=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,re=function(e,t){return t?"\\0"===e?"�":e.slice(0,-1)+"\\\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\\\"+e},oe=function(){u()},se=Ee((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{k.apply(P=N.call(S.childNodes),S.childNodes),P[S.childNodes.length].nodeType}catch(t){k={apply:P.length?function(e,t){O.apply(e,N.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function ae(e,t,i,r){var o,a,c,l,h,m,v,_=t&&t.ownerDocument,S=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==S&&9!==S&&11!==S)return i;if(!r&&(u(t),t=t||p,g)){if(11!==S&&(h=Z.exec(e)))if(o=h[1]){if(9===S){if(!(c=t.getElementById(o)))return i;if(c.id===o)return i.push(c),i}else if(_&&(c=_.getElementById(o))&&y(t,c)&&c.id===o)return i.push(c),i}else{if(h[2])return k.apply(i,t.getElementsByTagName(e)),i;if((o=h[3])&&n.getElementsByClassName&&t.getElementsByClassName)return k.apply(i,t.getElementsByClassName(o)),i}if(n.qsa&&!A[e+" "]&&(!f||!f.test(e))&&(1!==S||"object"!==t.nodeName.toLowerCase())){if(v=e,_=t,1===S&&(q.test(e)||B.test(e))){for((_=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((l=t.getAttribute("id"))?l=l.replace(ie,re):t.setAttribute("id",l=E)),a=(m=s(e)).length;a--;)m[a]=(l?"#"+l:":scope")+" "+ye(m[a]);v=m.join(",")}try{return k.apply(i,_.querySelectorAll(v)),i}catch(t){A(e,!0)}finally{l===E&&t.removeAttribute("id")}}}return d(e.replace($,"$1"),t,i,r)}function de(){var e=[];return function t(n,r){return e.push(n+" ")>i.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function ce(e){return e[E]=!0,e}function le(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function he(e,t){for(var n=e.split("|"),r=n.length;r--;)i.attrHandle[n[r]]=t}function ue(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function me(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ge(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&se(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function fe(e){return ce((function(t){return t=+t,ce((function(n,i){for(var r,o=e([],n.length,t),s=o.length;s--;)n[r=o[s]]&&(n[r]=!(i[r]=n[r]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=ae.support={},o=ae.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!W.test(t||n&&n.nodeName||"HTML")},u=ae.setDocument=function(e){var t,r,s=e?e.ownerDocument||e:S;return s!=p&&9===s.nodeType&&s.documentElement&&(m=(p=s).documentElement,g=!o(p),S!=p&&(r=p.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",oe,!1):r.attachEvent&&r.attachEvent("onunload",oe)),n.scope=le((function(e){return m.appendChild(e).appendChild(p.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=le((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=le((function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=Q.test(p.getElementsByClassName),n.getById=le((function(e){return m.appendChild(e).id=E,!p.getElementsByName||!p.getElementsByName(E).length})),n.getById?(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n,i,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),i=0;o=r[i++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),i.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],f=[],(n.qsa=Q.test(p.querySelectorAll))&&(le((function(e){var t;m.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^=\'\']").length&&f.push("[*^$]="+F+"*(?:\'\'|\\"\\")"),e.querySelectorAll("[selected]").length||f.push("\\\\["+F+"*(?:value|"+L+")"),e.querySelectorAll("[id~="+E+"-]").length||f.push("~="),(t=p.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name=\'\']").length||f.push("\\\\["+F+"*name"+F+"*="+F+"*(?:\'\'|\\"\\")"),e.querySelectorAll(":checked").length||f.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||f.push(".#.+[+~]"),e.querySelectorAll("\\\\\\f"),f.push("[\\\\r\\\\n\\\\f]")})),le((function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&f.push("name"+F+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&f.push(":enabled",":disabled"),m.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&f.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),f.push(",.*:")}))),(n.matchesSelector=Q.test(_=m.matches||m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&le((function(e){n.disconnectedMatch=_.call(e,"*"),_.call(e,"[s!=\'\']:x"),v.push("!=",U)})),f=f.length&&new RegExp(f.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(m.compareDocumentPosition),y=t||Q.test(m.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},w=t?function(e,t){if(e===t)return h=!0,0;var i=!e.compareDocumentPosition-!t.compareDocumentPosition;return i||(1&(i=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===i?e==p||e.ownerDocument==S&&y(S,e)?-1:t==p||t.ownerDocument==S&&y(S,t)?1:l?M(l,e)-M(l,t):0:4&i?-1:1)}:function(e,t){if(e===t)return h=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e==p?-1:t==p?1:r?-1:o?1:l?M(l,e)-M(l,t):0;if(r===o)return ue(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?ue(s[i],a[i]):s[i]==S?-1:a[i]==S?1:0}),p},ae.matches=function(e,t){return ae(e,null,null,t)},ae.matchesSelector=function(e,t){if(u(e),n.matchesSelector&&g&&!A[t+" "]&&(!v||!v.test(t))&&(!f||!f.test(t)))try{var i=_.call(e,t);if(i||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ae.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ae.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return K.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&G.test(n)&&(t=s(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=new RegExp("(^|"+F+")"+e+"("+F+"|$)"))&&C(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(i){var r=ae.attr(i,e);return null==r?"!="===t:!t||(r+="","="===t?r===n:"!="===t?r!==n:"^="===t?n&&0===r.indexOf(n):"*="===t?n&&-1:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function O(e,t,n){return v(t)?C.grep(e,(function(e,i){return!!t.call(e,i,e)!==n})):t.nodeType?C.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?C.grep(e,(function(e){return-1)[^>]*|#([\\w-]+))$/;(C.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:N.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:y,!0)),D.test(i[1])&&C.isPlainObject(t))for(i in t)v(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(r=y.getElementById(i[2]))&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(C):C.makeArray(e,this)}).prototype=C.fn,k=C(y);var M=/^(?:parents|prev(?:Until|All))/,L={children:!0,contents:!0,next:!0,prev:!0};function F(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter((function(){for(var e=0;e\\x20\\t\\r\\n\\f]*)/i,fe=/^$|^module$|\\/(?:java|ecma)script/i;ue=y.createDocumentFragment().appendChild(y.createElement("div")),(pe=y.createElement("input")).setAttribute("type","radio"),pe.setAttribute("checked","checked"),pe.setAttribute("name","t"),ue.appendChild(pe),f.checkClone=ue.cloneNode(!0).cloneNode(!0).lastChild.checked,ue.innerHTML="",f.noCloneChecked=!!ue.cloneNode(!0).lastChild.defaultValue,ue.innerHTML="",f.option=!!ue.lastChild;var ve={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function _e(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&P(e,t)?C.merge([e],n):n}function ye(e,t){for(var n=0,i=e.length;n",""]);var Ee=/<|&#?\\w+;/;function Se(e,t,n,i,r){for(var o,s,a,d,c,l,h=t.createDocumentFragment(),u=[],p=0,m=e.length;p\\s*$/g;function De(e,t){return P(e,"table")&&P(11!==t.nodeType?t:t.firstChild,"tr")&&C(e).children("tbody")[0]||e}function Oe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ke(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ne(e,t){var n,i,r,o,s,a;if(1===t.nodeType){if(Q.hasData(e)&&(a=Q.get(e).events))for(r in Q.remove(t,"handle events"),a)for(n=0,i=a[r].length;n
",2===mt.childNodes.length),C.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(f.createHTMLDocument?((i=(t=y.implementation.createHTMLDocument("")).createElement("base")).href=y.location.href,t.head.appendChild(i)):t=y),o=!n&&[],(r=D.exec(e))?[t.createElement(r[1])]:(r=Se([e],t,o),o&&o.length&&C(o).remove(),C.merge([],r.childNodes)));var i,r,o},C.offset={setOffset:function(e,t,n){var i,r,o,s,a,d,c=C.css(e,"position"),l=C(e),h={};"static"===c&&(e.style.position="relative"),a=l.offset(),o=C.css(e,"top"),d=C.css(e,"left"),("absolute"===c||"fixed"===c)&&-1<(o+d).indexOf("auto")?(s=(i=l.position()).top,r=i.left):(s=parseFloat(o)||0,r=parseFloat(d)||0),v(t)&&(t=t.call(e,n,C.extend({},a))),null!=t.top&&(h.top=t.top-a.top+s),null!=t.left&&(h.left=t.left-a.left+r),"using"in t?t.using.call(e,h):l.css(h)}},C.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){C.offset.setOffset(this,e,t)}));var t,n,i=this[0];return i?i.getClientRects().length?(t=i.getBoundingClientRect(),n=i.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,i=this[0],r={top:0,left:0};if("fixed"===C.css(i,"position"))t=i.getBoundingClientRect();else{for(t=this.offset(),n=i.ownerDocument,e=i.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===C.css(e,"position");)e=e.parentNode;e&&e!==i&&1===e.nodeType&&((r=C(e).offset()).top+=C.css(e,"borderTopWidth",!0),r.left+=C.css(e,"borderLeftWidth",!0))}return{top:t.top-r.top-C.css(i,"marginTop",!0),left:t.left-r.left-C.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===C.css(e,"position");)e=e.offsetParent;return e||se}))}}),C.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;C.fn[e]=function(i){return q(this,(function(e,i,r){var o;if(_(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===r)return o?o[t]:e[i];o?o.scrollTo(n?o.pageXOffset:r,n?r:o.pageYOffset):e[i]=r}),e,i,arguments.length)}})),C.each(["top","left"],(function(e,t){C.cssHooks[t]=qe(f.pixelPosition,(function(e,n){if(n)return n=Be(e,t),Fe.test(n)?C(e).position()[t]+"px":n}))})),C.each({Height:"height",Width:"width"},(function(e,t){C.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,i){C.fn[i]=function(r,o){var s=arguments.length&&(n||"boolean"!=typeof r),a=n||(!0===r||!0===o?"margin":"border");return q(this,(function(t,n,r){var o;return _(t)?0===i.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===r?C.css(t,n,a):C.style(t,n,r,a)}),t,s?r:void 0,s)}}))})),C.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),C.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),(function(e,t){C.fn[t]=function(e,n){return 0{var __WEBPACK_AMD_DEFINE_RESULT__;(function(){"use strict";var ERROR="input is invalid type",WINDOW="object"==typeof window,root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"==typeof self,NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS?root=__webpack_require__.g:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&module.exports,AMD=__webpack_require__.amdO,ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t){return new Md5(!0).update(t)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>2]|=e[o]<>6,d[r++]=128|63&i):i<55296||i>=57344?(d[r++]=224|i>>12,d[r++]=128|i>>6&63,d[r++]=128|63&i):(i=65536+((1023&i)<<10|1023&e.charCodeAt(++o)),d[r++]=240|i>>18,d[r++]=128|i>>12&63,d[r++]=128|i>>6&63,d[r++]=128|63&i);else for(r=this.start;o>2]|=i<>2]|=(192|i>>6)<>2]|=(128|63&i)<=57344?(a[r>>2]|=(224|i>>12)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<>2]|=(240|i>>18)<>2]|=(128|i>>12&63)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<=64?(this.start=r-64,this.hash(),this.hashed=!0):this.start=r}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,i,r,o,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(i=((i=(-1732584194^2004318071&e)+s[1]-117830708)<<12|i>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+i<<0)&(i^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((i=this.h3)^t&(n^i))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(i=((i+=(n^e&(t^n))+s[1]-389564586)<<12|i>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+i<<0)&(i^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(i^t&(n^i))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(i=((i+=(n^e&(t^n))+s[5]+1200080426)<<12|i>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+i<<0)&(i^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(i^t&(n^i))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(i=((i+=(n^e&(t^n))+s[9]-1958414417)<<12|i>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+i<<0)&(i^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(i^t&(n^i))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(i=((i+=(n^e&(t^n))+s[13]-40341101)<<12|i>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+i<<0)&(i^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((i=((i+=(t^n&((e=((e+=(n^i&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|i>>>23)+e<<0)^e&((n=((n+=(e^t&(i^e))+s[11]+643717713)<<14|n>>>18)+i<<0)^i))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((i=((i+=(t^n&((e=((e+=(n^i&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|i>>>23)+e<<0)^e&((n=((n+=(e^t&(i^e))+s[15]-660478335)<<14|n>>>18)+i<<0)^i))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((i=((i+=(t^n&((e=((e+=(n^i&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|i>>>23)+e<<0)^e&((n=((n+=(e^t&(i^e))+s[3]-187363961)<<14|n>>>18)+i<<0)^i))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((i=((i+=(t^n&((e=((e+=(n^i&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|i>>>23)+e<<0)^e&((n=((n+=(e^t&(i^e))+s[7]+1735328473)<<14|n>>>18)+i<<0)^i))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((o=(i=((i+=((r=t^n)^(e=((e+=(r^i)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|i>>>21)+e<<0)^e)^(n=((n+=(o^t)+s[11]+1839030562)<<16|n>>>16)+i<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((o=(i=((i+=((r=t^n)^(e=((e+=(r^i)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|i>>>21)+e<<0)^e)^(n=((n+=(o^t)+s[7]-155497632)<<16|n>>>16)+i<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((o=(i=((i+=((r=t^n)^(e=((e+=(r^i)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|i>>>21)+e<<0)^e)^(n=((n+=(o^t)+s[3]-722521979)<<16|n>>>16)+i<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((o=(i=((i+=((r=t^n)^(e=((e+=(r^i)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|i>>>21)+e<<0)^e)^(n=((n+=(o^t)+s[15]+530742520)<<16|n>>>16)+i<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((i=((i+=(t^((e=((e+=(n^(t|~i))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|i>>>22)+e<<0)^((n=((n+=(e^(i|~t))+s[14]-1416354905)<<15|n>>>17)+i<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((i=((i+=(t^((e=((e+=(n^(t|~i))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|i>>>22)+e<<0)^((n=((n+=(e^(i|~t))+s[10]-1051523)<<15|n>>>17)+i<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((i=((i+=(t^((e=((e+=(n^(t|~i))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|i>>>22)+e<<0)^((n=((n+=(e^(i|~t))+s[6]-1560198380)<<15|n>>>17)+i<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((i=((i+=(t^((e=((e+=(n^(t|~i))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|i>>>22)+e<<0)^((n=((n+=(e^(i|~t))+s[2]+718787259)<<15|n>>>17)+i<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=i+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+i<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,i=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[15&i]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,i=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&i,i>>8&255,i>>16&255,i>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,i="",r=this.array(),o=0;o<15;)e=r[o++],t=r[o++],n=r[o++],i+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=r[o],i+(BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"==")};var exports=createMethod();COMMON_JS?module.exports=exports:(root.md5=exports,AMD&&(__WEBPACK_AMD_DEFINE_RESULT__=function(){return exports}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)))})()},138:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",r=9007199254740991,o="[object Arguments]",s="[object Boolean]",a="[object Date]",d="[object Function]",c="[object GeneratorFunction]",l="[object Map]",h="[object Number]",u="[object Object]",p="[object Promise]",m="[object RegExp]",g="[object Set]",f="[object String]",v="[object Symbol]",_="[object WeakMap]",y="[object ArrayBuffer]",E="[object DataView]",S="[object Float32Array]",b="[object Float64Array]",T="[object Int8Array]",C="[object Int16Array]",x="[object Int32Array]",R="[object Uint8Array]",A="[object Uint8ClampedArray]",w="[object Uint16Array]",I="[object Uint32Array]",P=/\\w*$/,D=/^\\[object .+?Constructor\\]$/,O=/^(?:0|[1-9]\\d*)$/,k={};k[o]=k["[object Array]"]=k[y]=k[E]=k[s]=k[a]=k[S]=k[b]=k[T]=k[C]=k[x]=k[l]=k[h]=k[u]=k[m]=k[g]=k[f]=k[v]=k[R]=k[A]=k[w]=k[I]=!0,k["[object Error]"]=k[d]=k[_]=!1;var N="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,M="object"==typeof self&&self&&self.Object===Object&&self,L=N||M||Function("return this")(),F=t&&!t.nodeType&&t,j=F&&e&&!e.nodeType&&e,V=j&&j.exports===F;function U(e,t){return e.set(t[0],t[1]),e}function H(e,t){return e.add(t),e}function $(e,t,n,i){var r=-1,o=e?e.length:0;for(i&&o&&(n=e[++r]);++r-1},Ae.prototype.set=function(e,t){var n=this.__data__,i=De(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},we.prototype.clear=function(){this.__data__={hash:new Re,map:new(me||Ae),string:new Re}},we.prototype.delete=function(e){return Me(this,e).delete(e)},we.prototype.get=function(e){return Me(this,e).get(e)},we.prototype.has=function(e){return Me(this,e).has(e)},we.prototype.set=function(e,t){return Me(this,e).set(e,t),this},Ie.prototype.clear=function(){this.__data__=new Ae},Ie.prototype.delete=function(e){return this.__data__.delete(e)},Ie.prototype.get=function(e){return this.__data__.get(e)},Ie.prototype.has=function(e){return this.__data__.has(e)},Ie.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Ae){var i=n.__data__;if(!me||i.length<199)return i.push([e,t]),this;n=this.__data__=new we(i)}return n.set(e,t),this};var Fe=le?q(le,Object):function(){return[]},je=function(e){return te.call(e)};function Ve(e,t){return!!(t=null==t?r:t)&&("number"==typeof e||O.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=r}(e.length)&&!Ge(e)}var qe=he||function(){return!1};function Ge(e){var t=ze(e)?te.call(e):"";return t==d||t==c}function ze(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ke(e){return Be(e)?function(e,t){var n=Je(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&Be(e)}(e)&&ee.call(e,"callee")&&(!de.call(e,"callee")||te.call(e)==o)}(e)?function(e,t){for(var n=-1,i=Array(e);++n{var i=NaN,r="[object Symbol]",o=/^\\s+|\\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,d=/^0o[0-7]+$/i,c=parseInt,l="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,h="object"==typeof self&&self&&self.Object===Object&&self,u=l||h||Function("return this")(),p=Object.prototype.toString,m=Math.max,g=Math.min,f=function(){return u.Date.now()};function v(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function _(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&p.call(e)==r}(e))return i;if(v(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=v(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=a.test(e);return n||d.test(e)?c(e.slice(2),n?2:8):s.test(e)?i:+e}e.exports=function(e,t,n){var i,r,o,s,a,d,c=0,l=!1,h=!1,u=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function p(t){var n=i,o=r;return i=r=void 0,c=t,s=e.apply(o,n)}function y(e){var n=e-d;return void 0===d||n>=t||n<0||h&&e-c>=o}function E(){var e=f();if(y(e))return S(e);a=setTimeout(E,function(e){var n=t-(e-d);return h?g(n,o-(e-c)):n}(e))}function S(e){return a=void 0,u&&i?p(e):(i=r=void 0,s)}function b(){var e=f(),n=y(e);if(i=arguments,r=this,d=e,n){if(void 0===a)return function(e){return c=e,a=setTimeout(E,t),l?p(e):s}(d);if(h)return a=setTimeout(E,t),p(d)}return void 0===a&&(a=setTimeout(E,t)),s}return t=_(t)||0,v(n)&&(l=!!n.leading,o=(h="maxWait"in n)?m(_(n.maxWait)||0,t):o,u="trailing"in n?!!n.trailing:u),b.cancel=function(){void 0!==a&&clearTimeout(a),c=0,i=d=r=a=void 0},b.flush=function(){return void 0===a?s:S(f())},b}},47:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",r=1,o=2,s=9007199254740991,a="[object Arguments]",d="[object Array]",c="[object AsyncFunction]",l="[object Boolean]",h="[object Date]",u="[object Error]",p="[object Function]",m="[object GeneratorFunction]",g="[object Map]",f="[object Number]",v="[object Null]",_="[object Object]",y="[object Promise]",E="[object Proxy]",S="[object RegExp]",b="[object Set]",T="[object String]",C="[object Symbol]",x="[object Undefined]",R="[object WeakMap]",A="[object ArrayBuffer]",w="[object DataView]",I=/^\\[object .+?Constructor\\]$/,P=/^(?:0|[1-9]\\d*)$/,D={};D["[object Float32Array]"]=D["[object Float64Array]"]=D["[object Int8Array]"]=D["[object Int16Array]"]=D["[object Int32Array]"]=D["[object Uint8Array]"]=D["[object Uint8ClampedArray]"]=D["[object Uint16Array]"]=D["[object Uint32Array]"]=!0,D[a]=D[d]=D[A]=D[l]=D[w]=D[h]=D[u]=D[p]=D[g]=D[f]=D[_]=D[S]=D[b]=D[T]=D[R]=!1;var O="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,k="object"==typeof self&&self&&self.Object===Object&&self,N=O||k||Function("return this")(),M=t&&!t.nodeType&&t,L=M&&e&&!e.nodeType&&e,F=L&&L.exports===M,j=F&&O.process,V=function(){try{return j&&j.binding&&j.binding("util")}catch(e){}}(),U=V&&V.isTypedArray;function H(e,t){for(var n=-1,i=null==e?0:e.length;++nc))return!1;var h=a.get(e);if(h&&a.get(t))return h==t;var u=-1,p=!0,m=n&o?new Ae:void 0;for(a.set(e,t),a.set(t,e);++u-1},xe.prototype.set=function(e,t){var n=this.__data__,i=Ie(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},Re.prototype.clear=function(){this.size=0,this.__data__={hash:new Ce,map:new(ue||xe),string:new Ce}},Re.prototype.delete=function(e){var t=Me(this,e).delete(e);return this.size-=t?1:0,t},Re.prototype.get=function(e){return Me(this,e).get(e)},Re.prototype.has=function(e){return Me(this,e).has(e)},Re.prototype.set=function(e,t){var n=Me(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},Ae.prototype.add=Ae.prototype.push=function(e){return this.__data__.set(e,i),this},Ae.prototype.has=function(e){return this.__data__.has(e)},we.prototype.clear=function(){this.__data__=new xe,this.size=0},we.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},we.prototype.get=function(e){return this.__data__.get(e)},we.prototype.has=function(e){return this.__data__.has(e)},we.prototype.set=function(e,t){var n=this.__data__;if(n instanceof xe){var i=n.__data__;if(!ue||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new Re(i)}return n.set(e,t),this.size=n.size,this};var Fe=de?function(e){return null==e?[]:(e=Object(e),function(t,n){for(var i=-1,r=null==t?0:t.length,o=0,s=[];++i-1&&e%1==0&&e-1&&e%1==0&&e<=s}function ze(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Ke(e){return null!=e&&"object"==typeof e}var We=U?function(e){return function(t){return e(t)}}(U):function(e){return Ke(e)&&Ge(e.length)&&!!D[Pe(e)]};function Xe(e){return null!=(t=e)&&Ge(t.length)&&!qe(t)?function(e,t){var n=Je(e),i=!n&&$e(e),r=!n&&!i&&Be(e),o=!n&&!i&&!r&&We(e),s=n||i||r||o,a=s?function(e,t){for(var n=-1,i=Array(e);++n{var t=e.exports={v:[{name:"version",reg:/^(\\d*)$/}],o:[{name:"origin",reg:/^(\\S*) (\\d*) (\\d*) (\\S*) IP(\\d) (\\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\\d*) (\\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\\d) (\\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\\w*) (\\d*) ([\\w\\/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\\d*) ([\\w\\-\\.]*)(?:\\s*\\/(\\d*)(?:\\s*\\/(\\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\\d*) ([\\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\\d*)(?: (\\S*) IP(\\d) (\\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\\*|\\d*) trr-int (\\d*)/,names:["payload","value"],format:"rtcp-fb:%d trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\\*|\\d*) ([\\w-_]*)(?: ([\\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\\d+)(?:\\/(\\w+))? (\\S*)(?: (\\S*))?/,names:["value","direction","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+" %s"+(e.config?" %s":"")}},{push:"crypto",reg:/^crypto:(\\d*) ([\\w_]*) (\\S*)(?: (\\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\\w*)/,format:"setup:%s"},{name:"mid",reg:/^mid:([^\\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\\d*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\\d*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\\S*) (\\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\\S*) (\\d*) (\\S*) (\\d*) (\\S*) (\\d*) typ (\\S*)(?: raddr (\\S*) rport (\\d*))?(?: tcptype (\\S*))?(?: generation (\\d*))?(?: network-id (\\d*))?(?: network-cost (\\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),(t+=null!=e["network-id"]?" network-id %d":"%v")+(null!=e["network-cost"]?" network-cost %d":"%v")}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\\d*) ([\\w_]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\\x21\\x23\\x24\\x25\\x26\\x27\\x2A\\x2B\\x2D\\x2E\\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\\s?(\\w*) (\\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\\w_\\/]*) (\\S*)(?: (\\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\\d\\w]+) (\\w+)(?: ([\\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\\\d+|\\\\*)[\\\\s\\\\t]+(send|recv)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*)(?:[\\\\s\\\\t]+(recv|send)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\\\-_~;,]+)(?:\\\\s?(send|recv) ([a-zA-Z0-9\\\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\\s\\t]+([\\S+\\s\\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\\d+(?:$|\\.\\d+))/,format:"framerate:%s"},{push:"invalid",names:["value"]}]};Object.keys(t).forEach((function(e){t[e].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))}))},310:(e,t,n)=>{var i=n(415),r=n(159);t.write=r,t.parse=i.parse,t.parseFmtpConfig=i.parseFmtpConfig,t.parseParams=i.parseParams,t.parsePayloads=i.parsePayloads,t.parseRemoteCandidates=i.parseRemoteCandidates,t.parseImageAttributes=i.parseImageAttributes,t.parseSimulcastStreamList=i.parseSimulcastStreamList},415:(e,t,n)=>{var i=function(e){return String(Number(e))===e?Number(e):e},r=function(e,t,n){var r=e.name&&e.names;e.push&&!t[e.push]?t[e.push]=[]:r&&!t[e.name]&&(t[e.name]={});var o=e.push?{}:r?t[e.name]:t;!function(e,t,n,r){if(r&&!n)t[r]=i(e[1]);else for(var o=0;o{var i=n(296),r=/%[sdv%]/g,o=function(e){var t=1,n=arguments,i=n.length;return e.replace(r,(function(e){if(t>=i)return e;var r=n[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(r);case"%d":return Number(r);case"%v":return""}}))},s=function(e,t,n){var i=[e+"="+(t.format instanceof Function?t.format(t.push?n:n[t.name]):t.format)];if(t.names)for(var r=0;r{"use strict";const t={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\\n").map((e=>e.trim()))},t.splitSections=function(e){return e.split("\\nm=").map(((e,t)=>(t>0?"m="+e:e).trim()+"\\r\\n"))},t.getDescription=function(e){const n=t.splitSections(e);return n&&n[0]},t.getMediaSections=function(e){const n=t.splitSections(e);return n.shift(),n},t.matchPrefix=function(e,n){return t.splitLines(e).filter((e=>0===e.indexOf(n)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const n={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let e=8;e0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\\r\\n"},t.parseFmtp=function(e){const t={};let n;const i=e.substr(e.indexOf(" ")+1).split(";");for(let e=0;e{void 0!==e.parameters[t]?i.push(t+"="+e.parameters[t]):i.push(t)})),t+="a=fmtp:"+n+" "+i.join(";")+"\\r\\n"}return t},t.parseRtcpFb=function(e){const t=e.substr(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",n=e.payloadType;return void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+n+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\\r\\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),n={ssrc:parseInt(e.substr(7,t-7),10)},i=e.indexOf(":",t);return i>-1?(n.attribute=e.substr(t+1,i-t-1),n.value=e.substr(i+1)):n.attribute=e.substr(t+1),n},t.parseSsrcGroup=function(e){const t=e.substr(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((e=>parseInt(e,10)))}},t.getMid=function(e){const n=t.matchPrefix(e,"a=mid:")[0];if(n)return n.substr(6)},t.parseFingerprint=function(e){const t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,n){return{role:"auto",fingerprints:t.matchPrefix(e+n,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let n="a=setup:"+t+"\\r\\n";return e.fingerprints.forEach((e=>{n+="a=fingerprint:"+e.algorithm+" "+e.value+"\\r\\n"})),n},t.parseCryptoLine=function(e){const t=e.substr(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\\r\\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substr(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,n){return t.matchPrefix(e+n,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,n){const i=t.matchPrefix(e+n,"a=ice-ufrag:")[0],r=t.matchPrefix(e+n,"a=ice-pwd:")[0];return i&&r?{usernameFragment:i.substr(12),password:r.substr(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\\r\\na=ice-pwd:"+e.password+"\\r\\n";return e.iceLite&&(t+="a=ice-lite\\r\\n"),t},t.parseRtpParameters=function(e){const n={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},i=t.splitLines(e)[0].split(" ");for(let r=3;r{n.headerExtensions.push(t.parseExtmap(e))})),n},t.writeRtpDescription=function(e,n){let i="";i+="m="+e+" ",i+=n.codecs.length>0?"9":"0",i+=" UDP/TLS/RTP/SAVPF ",i+=n.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\\r\\n",i+="c=IN IP4 0.0.0.0\\r\\n",i+="a=rtcp:9 IN IP4 0.0.0.0\\r\\n",n.codecs.forEach((e=>{i+=t.writeRtpMap(e),i+=t.writeFmtp(e),i+=t.writeRtcpFb(e)}));let r=0;return n.codecs.forEach((e=>{e.maxptime>r&&(r=e.maxptime)})),r>0&&(i+="a=maxptime:"+r+"\\r\\n"),n.headerExtensions&&n.headerExtensions.forEach((e=>{i+=t.writeExtmap(e)})),i},t.parseRtpEncodingParameters=function(e){const n=[],i=t.parseRtpParameters(e),r=-1!==i.fecMechanisms.indexOf("RED"),o=-1!==i.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=s.length>0&&s[0].ssrc;let d;const c=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substr(17).split(" ").map((e=>parseInt(e,10)))));c.length>0&&c[0].length>1&&c[0][0]===a&&(d=c[0][1]),i.codecs.forEach((e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&d&&(t.rtx={ssrc:d}),n.push(t),r&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:o?"red+ulpfec":"red"},n.push(t))}})),0===n.length&&a&&n.push({ssrc:a});let l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substr(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substr(5),10)*.95-16e3:void 0,n.forEach((e=>{e.maxBitrate=l}))),n},t.parseRtcpParameters=function(e){const n={},i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];i&&(n.cname=i.value,n.ssrc=i.ssrc);const r=t.matchPrefix(e,"a=rtcp-rsize");n.reducedSize=r.length>0,n.compound=0===r.length;const o=t.matchPrefix(e,"a=rtcp-mux");return n.mux=o.length>0,n},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\\r\\n"),e.mux&&(t+="a=rtcp-mux\\r\\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\\r\\n"),t},t.parseMsid=function(e){let n;const i=t.matchPrefix(e,"a=msid:");if(1===i.length)return n=i[0].substr(7).split(" "),{stream:n[0],track:n[1]};const r=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return r.length>0?(n=r[0].value.split(" "),{stream:n[0],track:n[1]}):void 0},t.parseSctpDescription=function(e){const n=t.parseMLine(e),i=t.matchPrefix(e,"a=max-message-size:");let r;i.length>0&&(r=parseInt(i[0].substr(19),10)),isNaN(r)&&(r=65536);const o=t.matchPrefix(e,"a=sctp-port:");if(o.length>0)return{port:parseInt(o[0].substr(12),10),protocol:n.fmt,maxMessageSize:r};const s=t.matchPrefix(e,"a=sctpmap:");if(s.length>0){const e=s[0].substr(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:r}}},t.writeSctpDescription=function(e,t){let n=[];return n="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\\r\\n","c=IN IP4 0.0.0.0\\r\\n","a=sctp-port:"+t.port+"\\r\\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\\r\\n","c=IN IP4 0.0.0.0\\r\\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\\r\\n"],void 0!==t.maxMessageSize&&n.push("a=max-message-size:"+t.maxMessageSize+"\\r\\n"),n.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,21)},t.writeSessionBoilerplate=function(e,n,i){let r;const o=void 0!==n?n:2;return r=e||t.generateSessionId(),"v=0\\r\\no="+(i||"thisisadapterortc")+" "+r+" "+o+" IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\n"},t.getDirection=function(e,n){const i=t.splitLines(e);for(let e=0;e>16)+(t>>16)+(n>>16)<<16|65535&n},a=function(e){if("string"!=typeof e)throw new Error("str2binl was passed a non-string");const t=[];for(let n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<>>32-d,n);var a,d},c=function(e,t,n,i,r,o,s){return d(t&n|~t&i,e,t,r,o,s)},l=function(e,t,n,i,r,o,s){return d(t&i|n&~i,e,t,r,o,s)},h=function(e,t,n,i,r,o,s){return d(t^n^i,e,t,r,o,s)},u=function(e,t,n,i,r,o,s){return d(n^(t|~i),e,t,r,o,s)},p=function(e,t){e[t>>5]|=128<>>9<<4)]=t;let n,i,r,o,a=1732584193,d=-271733879,p=-1732584194,m=271733878;for(let t=0;t>2]>>i%4*8+4&15)+t.charAt(e[i>>2]>>i%4*8&15);return n}(p(a(e),8*e.length))},hash:function(e){return function(e){let t="";for(let n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>n%32&255);return t}(p(a(e),8*e.length))}};class g{constructor(e,t,n){this.mechname=e,this.isClientFirst=t,this.priority=n}test(){return!0}onStart(e){this._connection=e}onChallenge(e,t){throw new Error("You should implement challenge handling!")}clientChallenge(e){if(!this.isClientFirst)throw new Error("clientChallenge should not be called if isClientFirst is false!");return this.onChallenge(e)}onFailure(){this._connection=null}onSuccess(){this._connection=null}}const f=function(e){var t,n,i="",r=e.length;for(t=0;t=0&&n<=127?i+=e.charAt(t):n>2047?(i+=String.fromCharCode(224|n>>12&15),i+=String.fromCharCode(128|n>>6&63),i+=String.fromCharCode(128|n>>0&63)):(i+=String.fromCharCode(192|n>>6&31),i+=String.fromCharCode(128|n>>0&63));return i},v=function(e){e=e||{};for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n="",i="",r="";const o=e[t],s="object"==typeof o,a=escape(unescape(s?o.value:o));s&&(n=o.expires?";expires="+o.expires:"",i=o.domain?";domain="+o.domain:"",r=o.path?";path="+o.path:""),document.cookie=t+"="+a+n+i+r}};function _(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var n,i,r,o,s,a,d,c,l=new Array(80),h=1732584193,u=-271733879,p=-1732584194,m=271733878,g=-1009589776;for(n=0;n16&&(n=_(n,8*e.length));for(var i=new Array(16),r=new Array(16),o=0;o<16;o++)i[o]=909522486^n[o],r[o]=1549556828^n[o];var s=_(i.concat(C(t)),512+8*t.length);return _(r.concat(s),672)}function b(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function T(e,t){return e<>>32-t}function C(e){for(var t=[],n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<24-n%32;return t}function x(e){for(var t,n,i="",r=0;r<4*e.length;r+=3)for(t=(e[r>>2]>>8*(3-r%4)&255)<<16|(e[r+1>>2]>>8*(3-(r+1)%4)&255)<<8|e[r+2>>2]>>8*(3-(r+2)%4)&255,n=0;n<4;n++)8*r+6*n>32*e.length?i+="=":i+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-n)&63);return i}function R(e){for(var t="",n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>24-n%32&255);return t}const A={b64_hmac_sha1:function(e,t){return x(S(e,t))},b64_sha1:function(e){return x(_(C(e),8*e.length))},binb2str:R,core_hmac_sha1:S,str_hmac_sha1:function(e,t){return R(S(e,t))},str_sha1:function(e){return R(_(C(e),8*e.length))}};const w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function I(e){const t=w.indexOf(e);return t<0?void 0:t}const P="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function D(e){if(e>=0&&e<64)return P[e]}var O={atob:function(e){if(0===arguments.length)throw new TypeError("1 argument required, but only 0 present.");if((e=(e=`${e}`).replace(/[ \\t\\n\\f\\r]/g,"")).length%4==0&&(e=e.replace(/==?$/,"")),e.length%4==1||/[^+/0-9A-Za-z]/.test(e))return null;let t="",n=0,i=0;for(let r=0;r>16),t+=String.fromCharCode((65280&n)>>8),t+=String.fromCharCode(255&n),n=i=0);return 12===i?(n>>=4,t+=String.fromCharCode(n)):18===i&&(n>>=2,t+=String.fromCharCode((65280&n)>>8),t+=String.fromCharCode(255&n)),t},btoa:function(e){if(0===arguments.length)throw new TypeError("1 argument required, but only 0 present.");let t;for(e=`${e}`,t=0;t255)return null;let n="";for(t=0;t>2,i[1]=(3&e.charCodeAt(t))<<4,e.length>t+1&&(i[1]|=e.charCodeAt(t+1)>>4,i[2]=(15&e.charCodeAt(t+1))<<2),e.length>t+2&&(i[2]|=e.charCodeAt(t+2)>>6,i[3]=63&e.charCodeAt(t+2));for(let e=0;e0)for(let n=0;ne.tagName===t,_xmlGenerator:null,xmlGenerator:()=>(F._xmlGenerator||(F._xmlGenerator=o()),F._xmlGenerator),xmlElement(e){if(!e)return null;const t=F.xmlGenerator().createElement(e);for(let e=1;e(e=(e=(e=(e=e.replace(/\\&/g,"&")).replace(//g,">")).replace(/\'/g,"'")).replace(/"/g,"""),xmlunescape:e=>(e=(e=(e=(e=e.replace(/\\&/g,"&")).replace(/</g,"<")).replace(/>/g,">")).replace(/'/g,"\'")).replace(/"/g,\'"\'),xmlTextNode:e=>F.xmlGenerator().createTextNode(e),xmlHtmlNode(e){let t;return r?t=(new r).parseFromString(e,"text/xml"):(t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e)),t},getText(e){if(!e)return null;let t="";0===e.childNodes.length&&e.nodeType===F.ElementType.TEXT&&(t+=e.nodeValue);for(let n=0;n0&&(o=e.join("; "),t.setAttribute(r,o))}else t.setAttribute(r,o)}for(let n=0;n"string"!=typeof e?e:e.replace(/^\\s+|\\s+$/g,"").replace(/\\\\/g,"\\\\5c").replace(/ /g,"\\\\20").replace(/\\"/g,"\\\\22").replace(/\\&/g,"\\\\26").replace(/\\\'/g,"\\\\27").replace(/\\//g,"\\\\2f").replace(/:/g,"\\\\3a").replace(//g,"\\\\3e").replace(/@/g,"\\\\40"),unescapeNode:e=>"string"!=typeof e?e:e.replace(/\\\\20/g," ").replace(/\\\\22/g,\'"\').replace(/\\\\26/g,"&").replace(/\\\\27/g,"\'").replace(/\\\\2f/g,"/").replace(/\\\\3a/g,":").replace(/\\\\3c/g,"<").replace(/\\\\3e/g,">").replace(/\\\\40/g,"@").replace(/\\\\5c/g,"\\\\"),getNodeFromJid:e=>e.indexOf("@")<0?null:e.split("@")[0],getDomainFromJid(e){const t=F.getBareJidFromJid(e);if(t.indexOf("@")<0)return t;{const e=t.split("@");return e.splice(0,1),e.join("@")}},getResourceFromJid(e){if(!e)return null;const t=e.split("/");return t.length<2?null:(t.splice(0,1),t.join("/"))},getBareJidFromJid:e=>e?e.split("/")[0]:null,_handleError(e){void 0!==e.stack&&F.fatal(e.stack),e.sourceURL?F.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?F.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message):F.fatal("error: "+e.message)},log(e,t){var n;e===this.LogLevel.FATAL&&(null===(n=console)||void 0===n||n.error(t))},debug(e){this.log(this.LogLevel.DEBUG,e)},info(e){this.log(this.LogLevel.INFO,e)},warn(e){this.log(this.LogLevel.WARN,e)},error(e){this.log(this.LogLevel.ERROR,e)},fatal(e){this.log(this.LogLevel.FATAL,e)},serialize(e){if(!e)return null;"function"==typeof e.tree&&(e=e.tree());const t=[...Array(e.attributes.length).keys()].map((t=>e.attributes[t].nodeName));t.sort();let n=t.reduce(((t,n)=>`${t} ${n}="${F.xmlescape(e.attributes.getNamedItem(n).value)}"`),`<${e.nodeName}`);if(e.childNodes.length>0){n+=">";for(let t=0;t"}}n+=""}else n+="/>";return n},_requestId:0,_connectionPlugins:{},addConnectionPlugin(e,t){F._connectionPlugins[e]=t},Builder:class{constructor(e,t){"presence"!==e&&"message"!==e&&"iq"!==e||(t&&!t.xmlns?t.xmlns=F.NS.CLIENT:t||(t={xmlns:F.NS.CLIENT})),this.nodeTree=F.xmlElement(e,t),this.node=this.nodeTree}tree(){return this.nodeTree}toString(){return F.serialize(this.nodeTree)}up(){return this.node=this.node.parentNode,this}root(){return this.node=this.nodeTree,this}attrs(e){for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===e[t]?this.node.removeAttribute(t):this.node.setAttribute(t,e[t]));return this}c(e,t,n){const i=F.xmlElement(e,t,n);return this.node.appendChild(i),"string"!=typeof n&&"number"!=typeof n&&(this.node=i),this}cnode(e){let t;const n=F.xmlGenerator();try{t=void 0!==n.importNode}catch(e){t=!1}const i=t?n.importNode(e,!0):F.copyElement(e);return this.node.appendChild(i),this.node=i,this}t(e){const t=F.xmlTextNode(e);return this.node.appendChild(t),this}h(e){const t=F.xmlGenerator().createElement("body");t.innerHTML=e;const n=F.createHtml(t);for(;n.childNodes.length>0;)this.node.appendChild(n.childNodes[0]);return this}},Handler:function(e,t,n,i,r,o,s){this.handler=e,this.ns=t,this.name=n,this.type=i,this.id=r,this.options=s||{matchBareFromJid:!1,ignoreNamespaceFragment:!1},this.options.matchBare&&(F.warn(\'The "matchBare" option is deprecated, use "matchBareFromJid" instead.\'),this.options.matchBareFromJid=this.options.matchBare,delete this.options.matchBare),this.options.matchBareFromJid?this.from=o?F.getBareJidFromJid(o):null:this.from=o,this.user=!0}};F.Handler.prototype={getNamespace(e){let t=e.getAttribute("xmlns");return t&&this.options.ignoreNamespaceFragment&&(t=t.split("#")[0]),t},namespaceMatch(e){let t=!1;return!this.ns||(F.forEachChild(e,null,(e=>{this.getNamespace(e)===this.ns&&(t=!0)})),t||this.getNamespace(e)===this.ns)},isMatch(e){let t=e.getAttribute("from");this.options.matchBareFromJid&&(t=F.getBareJidFromJid(t));const n=e.getAttribute("type");return!(!this.namespaceMatch(e)||this.name&&!F.isTagEqual(e,this.name)||this.type&&(Array.isArray(this.type)?-1===this.type.indexOf(n):n!==this.type)||this.id&&e.getAttribute("id")!==this.id||this.from&&t!==this.from)},run(e){let t=null;try{t=this.handler(e)}catch(e){throw F._handleError(e),e}return t},toString(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},F.TimedHandler=class{constructor(e,t){this.period=e,this.handler=t,this.lastCalled=(new Date).getTime(),this.user=!0}run(){return this.lastCalled=(new Date).getTime(),this.handler()}reset(){this.lastCalled=(new Date).getTime()}toString(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},F.Connection=class{constructor(e,t){this.service=e,this.options=t||{},this.setProtocol(),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_bind=!1,this.do_session=!1,this.mechanisms={},this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.protocolErrorHandlers={HTTP:{},websocket:{}},this._idleTimeout=null,this._disconnectTimeout=null,this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.do_authentication=!0,this.paused=!1,this.restored=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout((()=>this._onIdle()),100),v(this.options.cookies),this.registerSASLMechanisms(this.options.mechanisms),this.iqFallbackHandler=new F.Handler((e=>this.send(M({type:"error",id:e.getAttribute("id")}).c("error",{type:"cancel"}).c("service-unavailable",{xmlns:F.NS.STANZAS}))),null,"iq",["get","set"]);for(const e in F._connectionPlugins)if(Object.prototype.hasOwnProperty.call(F._connectionPlugins,e)){const t=function(){};t.prototype=F._connectionPlugins[e],this[e]=new t,this[e].init(this)}}setProtocol(){const e=this.options.protocol||"";this.options.worker?this._proto=new F.WorkerWebsocket(this):0===this.service.indexOf("ws:")||0===this.service.indexOf("wss:")||0===e.indexOf("ws")?this._proto=new F.Websocket(this):this._proto=new F.Bosh(this)}reset(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.restored=!1,this._data=[],this._requests=[],this._uniqueId=0}pause(){this.paused=!0}resume(){this.paused=!1}getUniqueId(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t+""}addProtocolErrorHandler(e,t,n){this.protocolErrorHandlers[e][t]=n}connect(e,t,n,i,r,o,s){let a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:3e3;this.jid=e,this.authzid=F.getBareJidFromJid(this.jid),this.authcid=s||F.getNodeFromJid(this.jid),this.pass=t,this.connect_callback=n,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.disconnection_timeout=a,this.domain=F.getDomainFromJid(this.jid),this._changeConnectStatus(F.Status.CONNECTING,null),this._proto._connect(i,r,o)}attach(e,t,n,i,r,o,s){if(this._proto._attach)return this._proto._attach(e,t,n,i,r,o,s);{const e=new Error(\'The "attach" method is not available for your connection protocol\');throw e.name="StropheSessionError",e}}restore(e,t,n,i,r){if(!this._sessionCachingSupported()){const e=new Error(\'The "restore" method can only be used with a BOSH connection.\');throw e.name="StropheSessionError",e}this._proto._restore(e,t,n,i,r)}_sessionCachingSupported(){if(this._proto instanceof F.Bosh){if(!JSON)return!1;try{sessionStorage.setItem("_strophe_","_strophe_"),sessionStorage.removeItem("_strophe_")}catch(e){return!1}return!0}return!1}xmlInput(e){}xmlOutput(e){}rawInput(e){}rawOutput(e){}nextValidRid(e){}send(e){if(null!==e){if("function"==typeof e.sort)for(let t=0;t{r&&this.deleteTimedHandler(r),"error"===e.getAttribute("type")?n&&n(e):t&&t(e)}),null,"presence",null,o);i&&(r=this.addTimedHandler(i,(()=>(this.deleteHandler(e),n&&n(null),!1))))}return this.send(e),o}sendIQ(e,t,n,i){let r=null;"function"==typeof e.tree&&(e=e.tree());let o=e.getAttribute("id");if(o||(o=this.getUniqueId("sendIQ"),e.setAttribute("id",o)),"function"==typeof t||"function"==typeof n){const e=this.addHandler((e=>{r&&this.deleteTimedHandler(r);const i=e.getAttribute("type");if("result"===i)t&&t(e);else{if("error"!==i){const e=new Error(`Got bad IQ type of ${i}`);throw e.name="StropheError",e}n&&n(e)}}),null,"iq",["error","result"],o);i&&(r=this.addTimedHandler(i,(()=>(this.deleteHandler(e),n&&n(null),!1))))}return this.send(e),o}_queueData(e){if(null===e||!e.tagName||!e.childNodes){const e=new Error("Cannot queue non-DOMElement.");throw e.name="StropheError",e}this._data.push(e)}_sendRestart(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout((()=>this._onIdle()),100)}addTimedHandler(e,t){const n=new F.TimedHandler(e,t);return this.addTimeds.push(n),n}deleteTimedHandler(e){this.removeTimeds.push(e)}addHandler(e,t,n,i,r,o,s){const a=new F.Handler(e,t,n,i,r,o,s);return this.addHandlers.push(a),a}deleteHandler(e){this.removeHandlers.push(e);const t=this.addHandlers.indexOf(e);t>=0&&this.addHandlers.splice(t,1)}registerSASLMechanisms(e){this.mechanisms={},(e=e||[F.SASLAnonymous,F.SASLExternal,F.SASLOAuthBearer,F.SASLXOAuth2,F.SASLPlain,F.SASLSHA1]).forEach((e=>this.registerSASLMechanism(e)))}registerSASLMechanism(e){const t=new e;this.mechanisms[t.mechname]=t}disconnect(e){if(this._changeConnectStatus(F.Status.DISCONNECTING,e),e?F.warn("Disconnect was called because: "+e):F.info("Disconnect was called"),this.connected){let e=!1;this.disconnecting=!0,this.authenticated&&(e=L({xmlns:F.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(this.disconnection_timeout,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(e)}else F.warn("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests(),this._doDisconnect()}_changeConnectStatus(e,t,n){for(const n in F._connectionPlugins)if(Object.prototype.hasOwnProperty.call(F._connectionPlugins,n)){const i=this[n];if(i.statusChanged)try{i.statusChanged(e,t)}catch(e){F.error(`${n} plugin caused an exception changing status: ${e}`)}}if(this.connect_callback)try{this.connect_callback(e,t,n)}catch(e){F._handleError(e),F.error(`User connection callback caused an exception: ${e}`)}}_doDisconnect(e){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),F.debug("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.restored=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(F.Status.DISCONNECTED,e),this.connected=!1}_dataRecv(e,t){const n=this._proto._reqToData(e);if(null===n)return;for(this.xmlInput!==F.Connection.prototype.xmlInput&&(n.nodeName===this._proto.strip&&n.childNodes.length?this.xmlInput(n.childNodes[0]):this.xmlInput(n)),this.rawInput!==F.Connection.prototype.rawInput&&(t?this.rawInput(t):this.rawInput(F.serialize(n)));this.removeHandlers.length>0;){const e=this.removeHandlers.pop(),t=this.handlers.indexOf(e);t>=0&&this.handlers.splice(t,1)}for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();const i=n.getAttribute("type");if(null!==i&&"terminate"===i){if(this.disconnecting)return;let e=n.getAttribute("condition");const t=n.getElementsByTagName("conflict");return null!==e?("remote-stream-error"===e&&t.length>0&&(e="conflict"),this._changeConnectStatus(F.Status.CONNFAIL,e)):this._changeConnectStatus(F.Status.CONNFAIL,F.ErrorCondition.UNKOWN_REASON),void this._doDisconnect(e)}F.forEachChild(n,null,(e=>{const t=[];this.handlers=this.handlers.reduce(((n,i)=>{try{!i.isMatch(e)||!this.authenticated&&i.user?n.push(i):(i.run(e)&&n.push(i),t.push(i))}catch(e){F.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}return n}),[]),!t.length&&this.iqFallbackHandler.isMatch(e)&&this.iqFallbackHandler.run(e)}))}_connect_cb(e,t,n){let i,r;F.debug("_connect_cb was called"),this.connected=!0;try{i=this._proto._reqToData(e)}catch(e){if(e.name!==F.ErrorCondition.BAD_FORMAT)throw e;this._changeConnectStatus(F.Status.CONNFAIL,F.ErrorCondition.BAD_FORMAT),this._doDisconnect(F.ErrorCondition.BAD_FORMAT)}if(!i)return;if(this.xmlInput!==F.Connection.prototype.xmlInput&&(i.nodeName===this._proto.strip&&i.childNodes.length?this.xmlInput(i.childNodes[0]):this.xmlInput(i)),this.rawInput!==F.Connection.prototype.rawInput&&(n?this.rawInput(n):this.rawInput(F.serialize(i))),this._proto._connect_cb(i)===F.Status.CONNFAIL)return;if(r=i.getElementsByTagNameNS?i.getElementsByTagNameNS(F.NS.STREAM,"features").length>0:i.getElementsByTagName("stream:features").length>0||i.getElementsByTagName("features").length>0,!r)return void this._proto._no_auth_received(t);const o=Array.from(i.getElementsByTagName("mechanism")).map((e=>this.mechanisms[e.textContent])).filter((e=>e));0!==o.length||0!==i.getElementsByTagName("auth").length?!1!==this.do_authentication&&this.authenticate(o):this._proto._no_auth_received(t)}sortMechanismsByPriority(e){for(let t=0;te[n].priority&&(n=i);if(n!==t){const i=e[t];e[t]=e[n],e[n]=i}}return e}authenticate(e){this._attemptSASLAuth(e)||this._attemptLegacyAuth()}_attemptSASLAuth(e){e=this.sortMechanismsByPriority(e||[]);let t=!1;for(let n=0;n{for(;e.length;)this.deleteHandler(e.pop());return this._onStreamFeaturesAfterSASL(t),!1};return t.push(this._addSysHandler((e=>n(t,e)),null,"stream:features",null,null)),t.push(this._addSysHandler((e=>n(t,e)),F.NS.STREAM,"features",null,null)),this._sendRestart(),!1}_onStreamFeaturesAfterSASL(e){this.features=e;for(let t=0;t0&&(t=F.ErrorCondition.CONFLICT),this._changeConnectStatus(F.Status.AUTHFAIL,t,e),!1}const t=e.getElementsByTagName("bind");if(!(t.length>0))return F.warn("Resource binding failed."),this._changeConnectStatus(F.Status.AUTHFAIL,null,e),!1;{const e=t[0].getElementsByTagName("jid");e.length>0&&(this.authenticated=!0,this.jid=F.getText(e[0]),this.do_session?this._establishSession():this._changeConnectStatus(F.Status.CONNECTED,null))}}_establishSession(){if(!this.do_session)throw new Error(`Strophe.Connection.prototype._establishSession called but apparently ${F.NS.SESSION} wasn\'t advertised by the server`);this._addSysHandler(this._onSessionResultIQ.bind(this),null,null,null,"_session_auth_2"),this.send(M({type:"set",id:"_session_auth_2"}).c("session",{xmlns:F.NS.SESSION}).tree())}_onSessionResultIQ(e){if("result"===e.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(F.Status.CONNECTED,null);else if("error"===e.getAttribute("type"))return this.authenticated=!1,F.warn("Session creation failed."),this._changeConnectStatus(F.Status.AUTHFAIL,null,e),!1;return!1}_sasl_failure_cb(e){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(F.Status.AUTHFAIL,null,e),!1}_auth2_cb(e){return"result"===e.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(F.Status.CONNECTED,null)):"error"===e.getAttribute("type")&&(this._changeConnectStatus(F.Status.AUTHFAIL,null,e),this.disconnect("authentication failed")),!1}_addSysTimedHandler(e,t){const n=new F.TimedHandler(e,t);return n.user=!1,this.addTimeds.push(n),n}_addSysHandler(e,t,n,i,r){const o=new F.Handler(e,t,n,i,r);return o.user=!1,this.addHandlers.push(o),o}_onDisconnectTimeout(){return F.debug("_onDisconnectTimeout was called"),this._changeConnectStatus(F.Status.CONNTIMEOUT,null),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1}_onIdle(){for(;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;){const e=this.removeTimeds.pop(),t=this.timedHandlers.indexOf(e);t>=0&&this.timedHandlers.splice(t,1)}const e=(new Date).getTime(),t=[];for(let n=0;nthis._onIdle()),100))}},F.SASLMechanism=g,F.SASLAnonymous=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"ANONYMOUS",arguments.length>1&&void 0!==arguments[1]&&arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:20)}test(e){return null===e.authcid}},F.SASLPlain=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"PLAIN",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:50)}test(e){return null!==e.authcid}onChallenge(e){const{authcid:t,authzid:n,domain:i,pass:r}=e;if(!i)throw new Error("SASLPlain onChallenge: domain is not defined!");let o=n!==`${t}@${i}`?n:"";return o+="\\0",o+=t,o+="\\0",o+=r,f(o)}},F.SASLSHA1=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"SCRAM-SHA-1",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:60)}test(e){return null!==e.authcid}onChallenge(e,t){let n,i,r,o,s,a,d,c,l="c=biws,",h=`${e._sasl_data["client-first-message-bare"]},${t},`;const u=e._sasl_data.cnonce,p=/([a-z]+)=([^,]+)(,|$)/;for(;t.match(p);){const e=t.match(p);switch(t=t.replace(e[0],""),e[1]){case"r":n=e[2];break;case"s":i=e[2];break;case"i":r=e[2]}}if(n.slice(0,u.length)!==u)return e._sasl_data={},e._sasl_failure_cb();l+="r="+n,h+=l,i=atob(i),i+="\\0\\0\\0";const m=f(e.pass);for(o=a=A.core_hmac_sha1(m,i),d=1;d0&&void 0!==arguments[0]?arguments[0]:"OAUTHBEARER",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:40)}test(e){return null!==e.pass}onChallenge(e){let t="n,";return null!==e.authcid&&(t=t+"a="+e.authzid),t+=",",t+="",t+="auth=Bearer ",t+=e.pass,t+="",t+="",f(t)}},F.SASLExternal=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"EXTERNAL",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:10)}onChallenge(e){return e.authcid===e.authzid?"":e.authzid}},F.SASLXOAuth2=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"X-OAUTH2",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:30)}test(e){return null!==e.pass}onChallenge(e){let t="\\0";return null!==e.authcid&&(t+=e.authzid),t+="\\0",t+=e.pass,f(t)}};var j={Strophe:F,$build:k,$iq:M,$msg:N,$pres:L,SHA1:A,MD5:m,b64_hmac_sha1:A.b64_hmac_sha1,b64_sha1:A.b64_sha1,str_hmac_sha1:A.str_hmac_sha1,str_sha1:A.str_sha1};F.Request=class{constructor(e,t,n,i){this.id=++F._requestId,this.xmlData=e,this.data=F.serialize(e),this.origFunc=t,this.func=t,this.rid=n,this.date=NaN,this.sends=i||0,this.abort=!1,this.dead=null,this.age=function(){return this.date?(new Date-this.date)/1e3:0},this.timeDead=function(){return this.dead?(new Date-this.dead)/1e3:0},this.xhr=this._newXHR()}getResponse(){let e=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(e=this.xhr.responseXML.documentElement,"parsererror"===e.tagName)throw F.error("invalid response received"),F.error("responseText: "+this.xhr.responseText),F.error("responseXML: "+F.serialize(this.xhr.responseXML)),new Error("parsererror")}else if(this.xhr.responseText){if(F.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."),e=(new r).parseFromString(this.xhr.responseText,"application/xml").documentElement,!e)throw new Error("Parsing produced null node");if(e.querySelector("parsererror")){F.error("invalid response received: "+e.querySelector("parsererror").textContent),F.error("responseText: "+this.xhr.responseText);const t=new Error;throw t.name=F.ErrorCondition.BAD_FORMAT,t}}return e}_newXHR(){let e=null;return window.XMLHttpRequest?(e=new XMLHttpRequest,e.overrideMimeType&&e.overrideMimeType("text/xml; charset=utf-8")):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP")),e.onreadystatechange=this.func.bind(null,this),e}},F.Bosh=class e{constructor(e){this._conn=e,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this.errors=0,this.inactivity=null,this.lastResponseHeaders=null,this._requests=[]}_buildBody(){const e=k("body",{rid:this.rid++,xmlns:F.NS.HTTPBIND});return null!==this.sid&&e.attrs({sid:this.sid}),this._conn.options.keepalive&&this._conn._sessionCachingSupported()&&this._cacheSession(),e}_reset(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.errors=0,this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_connect(e,t,n){this.wait=e||this.wait,this.hold=t||this.hold,this.errors=0;const i=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":F.NS.BOSH});n&&i.attrs({route:n});const r=this._conn._connect_cb;this._requests.push(new F.Request(i.tree(),this._onRequestStateChange.bind(this,r.bind(this._conn)),i.tree().getAttribute("rid"))),this._throttledRequestHandler()}_attach(e,t,n,i,r,o,s){this._conn.jid=e,this.sid=t,this.rid=n,this._conn.connect_callback=i,this._conn.domain=F.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=r||this.wait,this.hold=o||this.hold,this.window=s||this.window,this._conn._changeConnectStatus(F.Status.ATTACHED,null)}_restore(e,t,n,i,r){const o=JSON.parse(window.sessionStorage.getItem("strophe-bosh-session"));if(!(null!=o&&o.rid&&o.sid&&o.jid&&(null==e||F.getBareJidFromJid(o.jid)===F.getBareJidFromJid(e)||null===F.getNodeFromJid(e)&&F.getDomainFromJid(o.jid)===e))){const e=new Error("_restore: no restoreable session.");throw e.name="StropheSessionError",e}this._conn.restored=!0,this._attach(o.jid,o.sid,o.rid,t,n,i,r)}_cacheSession(){this._conn.authenticated?this._conn.jid&&this.rid&&this.sid&&window.sessionStorage.setItem("strophe-bosh-session",JSON.stringify({jid:this._conn.jid,rid:this.rid,sid:this.sid})):window.sessionStorage.removeItem("strophe-bosh-session")}_connect_cb(e){const t=e.getAttribute("type");if(null!==t&&"terminate"===t){let t=e.getAttribute("condition");F.error("BOSH-Connection failed: "+t);const n=e.getElementsByTagName("conflict");return null!==t?("remote-stream-error"===t&&n.length>0&&(t="conflict"),this._conn._changeConnectStatus(F.Status.CONNFAIL,t)):this._conn._changeConnectStatus(F.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(t),F.Status.CONNFAIL}this.sid||(this.sid=e.getAttribute("sid"));const n=e.getAttribute("requests");n&&(this.window=parseInt(n,10));const i=e.getAttribute("hold");i&&(this.hold=parseInt(i,10));const r=e.getAttribute("wait");r&&(this.wait=parseInt(r,10));const o=e.getAttribute("inactivity");o&&(this.inactivity=parseInt(o,10))}_disconnect(e){this._sendTerminate(e)}_doDisconnect(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_emptyQueue(){return 0===this._requests.length}_callProtocolErrorHandlers(t){const n=e._getRequestStatus(t),i=this._conn.protocolErrorHandlers.HTTP[n];i&&i.call(this,n)}_hitError(e){this.errors++,F.warn("request errored, status: "+e+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()}_no_auth_received(e){F.warn("Server did not yet offer a supported authentication mechanism. Sending a blank poll request."),e=e?e.bind(this._conn):this._conn._connect_cb.bind(this._conn);const t=this._buildBody();this._requests.push(new F.Request(t.tree(),this._onRequestStateChange.bind(this,e),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}_onDisconnectTimeout(){this._abortAllRequests()}_abortAllRequests(){for(;this._requests.length>0;){const e=this._requests.pop();e.abort=!0,e.xhr.abort(),e.xhr.onreadystatechange=function(){}}}_onIdle(){const e=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===e.length&&!this._conn.disconnecting&&(F.debug("no requests during idle cycle, sending blank request"),e.push(null)),!this._conn.paused){if(this._requests.length<2&&e.length>0){const t=this._buildBody();for(let n=0;n0){const e=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(F.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),e>Math.floor(F.TIMEOUT*this.wait)&&(F.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(F.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}}static _getRequestStatus(e,t){let n;if(4===e.xhr.readyState)try{n=e.xhr.status}catch(e){F.error("Caught an error while retrieving a request\'s status, reqStatus: "+n)}return void 0===n&&(n="number"==typeof t?t:0),n}_onRequestStateChange(t,n){if(F.debug("request id "+n.id+"."+n.sends+" state changed to "+n.xhr.readyState),n.abort)return void(n.abort=!1);if(4!==n.xhr.readyState)return;const i=e._getRequestStatus(n);if(this.lastResponseHeaders=n.xhr.getAllResponseHeaders(),this._conn.disconnecting&&i>=400)return this._hitError(i),void this._callProtocolErrorHandlers(n);const r=this._requests[0]===n,o=this._requests[1]===n,s=i>0&&i<500,a=n.sends>this._conn.maxRetries;(s||a)&&(this._removeRequest(n),F.debug("request id "+n.id+" should now be removed")),200===i?((o||r&&this._requests.length>0&&this._requests[0].age()>Math.floor(F.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(n.rid)+1),F.debug("request id "+n.id+"."+n.sends+" got 200"),t(n),this.errors=0):0===i||i>=400&&i<600||i>=12e3?(F.error("request id "+n.id+"."+n.sends+" error "+i+" happened"),this._hitError(i),this._callProtocolErrorHandlers(n),i>=400&&i<500&&(this._conn._changeConnectStatus(F.Status.DISCONNECTING,null),this._conn._doDisconnect())):F.error("request id "+n.id+"."+n.sends+" error "+i+" happened"),s||a?a&&!this._conn.connected&&this._conn._changeConnectStatus(F.Status.CONNFAIL,"giving-up"):this._throttledRequestHandler()}_processRequest(t){let n=this._requests[t];const i=e._getRequestStatus(n,-1);if(n.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();const r=n.age(),o=!isNaN(r)&&r>Math.floor(F.TIMEOUT*this.wait),s=null!==n.dead&&n.timeDead()>Math.floor(F.SECONDARY_TIMEOUT*this.wait),a=4===n.xhr.readyState&&(i<1||i>=500);if((o||s||a)&&(s&&F.error(`Request ${this._requests[t].id} timed out (secondary), restarting`),n.abort=!0,n.xhr.abort(),n.xhr.onreadystatechange=function(){},this._requests[t]=new F.Request(n.xmlData,n.origFunc,n.rid,n.sends),n=this._requests[t]),0===n.xhr.readyState){F.debug("request id "+n.id+"."+n.sends+" posting");try{const e=this._conn.options.contentType||"text/xml; charset=utf-8";n.xhr.open("POST",this._conn.service,!this._conn.options.sync),void 0!==n.xhr.setRequestHeader&&n.xhr.setRequestHeader("Content-Type",e),this._conn.options.withCredentials&&(n.xhr.withCredentials=!0)}catch(e){return F.error("XHR open failed: "+e.toString()),this._conn.connected||this._conn._changeConnectStatus(F.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}const e=()=>{if(n.date=new Date,this._conn.options.customHeaders){const e=this._conn.options.customHeaders;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.xhr.setRequestHeader(t,e[t])}n.xhr.send(n.data)};if(n.sends>1){const t=1e3*Math.min(Math.floor(F.TIMEOUT*this.wait),Math.pow(n.sends,3));setTimeout((function(){e()}),t)}else e();n.sends++,this._conn.xmlOutput!==F.Connection.prototype.xmlOutput&&(n.xmlData.nodeName===this.strip&&n.xmlData.childNodes.length?this._conn.xmlOutput(n.xmlData.childNodes[0]):this._conn.xmlOutput(n.xmlData)),this._conn.rawOutput!==F.Connection.prototype.rawOutput&&this._conn.rawOutput(n.data)}else F.debug("_processRequest: "+(0===t?"first":"second")+" request has readyState of "+n.xhr.readyState)}_removeRequest(e){F.debug("removing request");for(let t=this._requests.length-1;t>=0;t--)e===this._requests[t]&&this._requests.splice(t,1);e.xhr.onreadystatechange=function(){},this._throttledRequestHandler()}_restartRequest(e){const t=this._requests[e];null===t.dead&&(t.dead=new Date),this._processRequest(e)}_reqToData(e){try{return e.getResponse()}catch(e){if("parsererror"!==e.message)throw e;this._conn.disconnect("strophe-parsererror")}}_sendTerminate(e){F.debug("_sendTerminate was called");const t=this._buildBody().attrs({type:"terminate"});e&&t.cnode(e.tree());const n=new F.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"));this._requests.push(n),this._throttledRequestHandler()}_send(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout((()=>this._conn._onIdle()),100)}_sendRestart(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)}_throttledRequestHandler(){this._requests?F.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):F.debug("_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)this._onOpen(),this.socket.onerror=e=>this._onError(e),this.socket.onclose=e=>this._onClose(e),this.socket.onmessage=e=>this._onInitialMessage(e)}_connect_cb(e){if(this._checkStreamError(e,F.Status.CONNFAIL))return F.Status.CONNFAIL}_handleStreamStart(e){let t=!1;const n=e.getAttribute("xmlns");"string"!=typeof n?t="Missing xmlns in ":n!==F.NS.FRAMING&&(t="Wrong xmlns in : "+n);const i=e.getAttribute("version");return"string"!=typeof i?t="Missing version in ":"1.0"!==i&&(t="Wrong version in : "+i),!t||(this._conn._changeConnectStatus(F.Status.CONNFAIL,t),this._conn._doDisconnect(),!1)}_onInitialMessage(e){if(0===e.data.indexOf("\\s*)*/,"");if(""===t)return;const n=(new r).parseFromString(t,"text/xml").documentElement;this._conn.xmlInput(n),this._conn.rawInput(e.data),this._handleStreamStart(n)&&this._connect_cb(n)}else if(0===e.data.indexOf("=0&&n.indexOf("wss:")>=0||e.indexOf("ws:")>=0)&&(this._conn._changeConnectStatus(F.Status.REDIRECT,"Received see-other-uri, resetting connection"),this._conn.reset(),this._conn.service=n,this._connect())}else this._conn._changeConnectStatus(F.Status.CONNFAIL,"Received closing stream"),this._conn._doDisconnect()}else{this._replaceMessageHandler();const t=this._streamWrap(e.data),n=(new r).parseFromString(t,"text/xml").documentElement;this._conn._connect_cb(n,null,e.data)}}_replaceMessageHandler(){this.socket.onmessage=e=>this._onMessage(e)}_disconnect(e){if(this.socket&&this.socket.readyState!==i.CLOSED){e&&this._conn.send(e);const t=k("close",{xmlns:F.NS.FRAMING});this._conn.xmlOutput(t.tree());const n=F.serialize(t);this._conn.rawOutput(n);try{this.socket.send(n)}catch(e){F.warn("Couldn\'t send tag.")}}setTimeout((()=>this._conn._doDisconnect()),0)}_doDisconnect(){F.debug("WebSockets _doDisconnect was called"),this._closeSocket()}_streamWrap(e){return""+e+""}_closeSocket(){if(this.socket)try{this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,this.socket.close()}catch(e){F.debug(e.message)}this.socket=null}_emptyQueue(){return!0}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(F.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected&&this.socket?(F.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(F.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):F.debug("Websocket closed")}_no_auth_received(e){F.error("Server did not offer a supported authentication mechanism"),this._conn._changeConnectStatus(F.Status.CONNFAIL,F.ErrorCondition.NO_AUTH_MECH),e&&e.call(this._conn),this._conn._doDisconnect()}_onDisconnectTimeout(){}_abortAllRequests(){}_onError(e){F.error("Websocket error "+JSON.stringify(e)),this._conn._changeConnectStatus(F.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._disconnect()}_onIdle(){const e=this._conn._data;if(e.length>0&&!this._conn.paused){for(let t=0;t\';if(e.data===n)return this._conn.rawInput(n),this._conn.xmlInput(e),void(this._conn.disconnecting||this._conn._doDisconnect());if(0===e.data.search("{var t;null===(t=console)||void 0===t||t.error(e),F.log(F.LogLevel.ERROR,`Shared Worker Error: ${e}`)}}get socket(){return{send:e=>this.worker.port.postMessage(["send",e])}}_connect(){this._messageHandler=e=>this._onInitialMessage(e),this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_connect",this._conn.service,this._conn.jid])}_attach(e){this._messageHandler=e=>this._onMessage(e),this._conn.connect_callback=e,this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_attach",this._conn.service])}_attachCallback(e,t){e===F.Status.ATTACHED?(this._conn.jid=t,this._conn.authenticated=!0,this._conn.connected=!0,this._conn.restored=!0,this._conn._changeConnectStatus(F.Status.ATTACHED)):e===F.Status.ATTACHFAIL&&(this._conn.authenticated=!1,this._conn.connected=!1,this._conn.restored=!1,this._conn._changeConnectStatus(F.Status.ATTACHFAIL))}_disconnect(e,t){t&&this._conn.send(t);const n=k("close",{xmlns:F.NS.FRAMING});this._conn.xmlOutput(n.tree());const i=F.serialize(n);this._conn.rawOutput(i),this.worker.port.postMessage(["send",i]),this._conn._doDisconnect()}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(F.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected?(F.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(F.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):F.debug("Websocket closed")}_closeSocket(){this.worker.port.postMessage(["_closeSocket"])}_replaceMessageHandler(){this._messageHandler=e=>this._onMessage(e)}_onWorkerMessage(e){const{data:t}=e,n=t[0];if("_onMessage"===n)this._messageHandler(t[1]);else if(n in this)try{this[n].apply(this,e.data.slice(1))}catch(e){F.log(F.LogLevel.ERROR,e)}else if("log"===n){const e=t[1],n=t[2];F.log(V[e],n)}else F.log(F.LogLevel.ERROR,`Found unhandled service worker message: ${t}`)}},t.$build=j.$build,t.$iq=j.$iq,t.$msg=j.$msg,t.$pres=j.$pres,t.Strophe=j.Strophe;const{b64_sha1:U}=A;e.$build=k,e.$iq=M,e.$msg=N,e.$pres=L,e.Strophe=F,e.b64_sha1=U,Object.defineProperty(e,"__esModule",{value:!0})}(t)},352:function(e,t,n){!function(e){"use strict";e.Strophe.addConnectionPlugin("disco",{_connection:null,_identities:[],_features:[],_items:[],init:function(t){this._connection=t,this._identities=[],this._features=[],this._items=[],t.addHandler(this._onDiscoInfo.bind(this),e.Strophe.NS.DISCO_INFO,"iq","get",null,null),t.addHandler(this._onDiscoItems.bind(this),e.Strophe.NS.DISCO_ITEMS,"iq","get",null,null)},addIdentity:function(e,t,n,i){for(var r=0;r0,this._originalOnStreamFeaturesAfterSASL.apply(this._c,arguments)},statusChanged:function(t){if(this._connectionStatus=t,this.getResumeToken()||t!==e.Strophe.Status.CONNECTED&&t!==e.Strophe.Status.DISCONNECTED)if(t===e.Strophe.Status.BINDREQUIRED){this._c.jid=this._storedJid;for(const e of(this._resumeState.handlers||[]).concat(this._resumeState.addHandlers||[]))this._c._addSysHandler(e.handler,e.ns,e.name,e.type,e.id);for(const e of(this._resumeState.timedHandlers||[]).concat(this._resumeState.addTimeds))this._c.addTimedHandler(e.period,e.handler);for(const e of(this._resumeState.removeTimeds||[]).concat(this._resumeState.removeHandlers||[]))this._c.deleteTimedHandler(e);this._c.send(e.$build("resume",{xmlns:this._NS,h:this._clientProcessedStanzasCounter,previd:this._resumeToken})),this._c.flush()}else t===e.Strophe.Status.ERROR&&(this.logging&&e.Strophe.debug("SM cleared resume token on error"),this._resumeToken=void 0);else this.logging&&e.Strophe.debug("SM reset state"),this._serverProcesssedStanzasCounter=0,this._clientProcessedStanzasCounter=0,this._clientSentStanzasCounter=0,this._isStreamManagementEnabled=!1,this._requestResponseIntervalCount=0,this._resuming=!1,t===e.Strophe.Status.DISCONNECTED&&(this._isSupported=!1),this._unacknowledgedStanzas=[],this._requestHandler&&this._c.deleteHandler(this._requestHandler),this._incomingHandler&&this._c.deleteHandler(this._incomingHandler),this._requestHandler=this._c.addHandler(this._handleServerRequestHandler.bind(this),this._NS,"r"),this._ackHandler=this._c.addHandler(this._handleServerAck.bind(this),this._NS,"a"),this._incomingHandler=this._c.addHandler(this._incomingStanzaHandler.bind(this)),this._enabledHandler=this._c._addSysHandler(this._handleEnabled.bind(this),this._NS,"enabled"),this._resumeFailedHandler=this._c._addSysHandler(this._handleResumeFailed.bind(this),this._NS,"failed"),this._resumedHandler=this._c._addSysHandler(this._handleResumed.bind(this),this._NS,"resumed")},xmlOutput:function(t){return(e.Strophe.isTagEqual(t,"iq")||e.Strophe.isTagEqual(t,"presence")||e.Strophe.isTagEqual(t,"message"))&&this._increaseSentStanzasCounter(t),this._originalXMLOutput.call(this._c,t)},_handleEnabled:function(e){return this._isStreamManagementEnabled=!0,this._resumeToken="true"===e.getAttribute("resume")&&e.getAttribute("id"),this._c.resume(),!0},_handleResumeFailed:function(t){const n=t&&(t.firstElementChild&&t.firstElementChild.tagName||t.firstChild&&t.firstChild.tagName);return this._c._changeConnectStatus(e.Strophe.Status.ERROR,n,t),this._c._doDisconnect(),!0},_handleResumed:function(t){var n=parseInt(t.getAttribute("h"));if(this._handleAcknowledgedStanzas(n,this._serverProcesssedStanzasCounter),this._resuming=!1,this._c.do_bind=!1,this._c.authenticated=!0,this._c.restored=!0,this._unacknowledgedStanzas.length>0){this.logging&&e.Strophe.debug("SM Sending unacknowledged stanzas",this._unacknowledgedStanzas);for(const e of this._unacknowledgedStanzas)this._c.send(e)}else this.logging&&e.Strophe.debug("SM No unacknowledged stanzas",this._unacknowledgedStanzas);return this._c._changeConnectStatus(e.Strophe.Status.CONNECTED,null),!0},_incomingStanzaHandler:function(t){return(e.Strophe.isTagEqual(t,"iq")||e.Strophe.isTagEqual(t,"presence")||e.Strophe.isTagEqual(t,"message"))&&(this._increaseReceivedStanzasCounter(),this.autoSendCountOnEveryIncomingStanza&&this._answerProcessedStanzas()),!0},_handleAcknowledgedStanzas:function(t,n){var i=t-n;i<0&&this._throwError("New reported stanza count lower than previous. New: "+t+" - Previous: "+n),i>this._unacknowledgedStanzas.length&&this._throwError("Higher reported acknowledge count than unacknowledged stanzas. Reported Acknowledge Count: "+i+" - Unacknowledge Stanza Count: "+this._unacknowledgedStanzas.length+" - New: "+t+" - Previous: "+n);for(var r=0;r0&&e.Strophe.warn("SM Unacknowledged stanzas",this._unacknowledgedStanzas),this._serverProcesssedStanzasCounter=t,this.requestResponseInterval>0&&(this._requestResponseIntervalCount=0)},_handleServerRequestHandler:function(){return this._answerProcessedStanzas(),!0},_handleServerAck:function(e){var t=parseInt(e.getAttribute("h"));return this._handleAcknowledgedStanzas(t,this._serverProcesssedStanzasCounter),!0},_answerProcessedStanzas:function(){this._isStreamManagementEnabled&&this._c.send(e.$build("a",{xmlns:this._NS,h:this._clientProcessedStanzasCounter}))},_increaseSentStanzasCounter:function(t){if(this._isStreamManagementEnabled){if(-1!==this._unacknowledgedStanzas.indexOf(t))return;this._unacknowledgedStanzas.push(t),this._clientSentStanzasCounter++,this.requestResponseInterval>0&&(this._requestResponseIntervalCount++,this._requestResponseIntervalCount===this.requestResponseInterval&&setTimeout((()=>{this._connectionStatus===e.Strophe.Status.CONNECTED&&this.requestAcknowledgement()}),1))}},_increaseReceivedStanzasCounter:function(){this._isStreamManagementEnabled&&this._clientProcessedStanzasCounter++},_throwError:function(t){throw e.Strophe.error(t),new Error(t)}})}(n(33))},144:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const n=[];for(let e=0;e<256;++e)n.push((e+256).toString(16).substr(1));t.default=function(e,t){const i=t||0,r=n;return(r[e[i+0]]+r[e[i+1]]+r[e[i+2]]+r[e[i+3]]+"-"+r[e[i+4]]+r[e[i+5]]+"-"+r[e[i+6]]+r[e[i+7]]+"-"+r[e[i+8]]+r[e[i+9]]+"-"+r[e[i+10]]+r[e[i+11]]+r[e[i+12]]+r[e[i+13]]+r[e[i+14]]+r[e[i+15]]).toLowerCase()}},433:(e,t,n)=>{"use strict";Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return s.default}});var i=a(n(423)),r=a(n(89)),o=a(n(600)),s=a(n(400));function a(e){return e&&e.__esModule?e:{default:e}}},862:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function i(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function r(e,t,n,r,o,s){return i((a=i(i(t,e),i(r,s)))<<(d=o)|a>>>32-d,n);var a,d}function o(e,t,n,i,o,s,a){return r(t&n|~t&i,e,t,o,s,a)}function s(e,t,n,i,o,s,a){return r(t&i|n&~i,e,t,o,s,a)}function a(e,t,n,i,o,s,a){return r(t^n^i,e,t,o,s,a)}function d(e,t,n,i,o,s,a){return r(n^(t|~i),e,t,o,s,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n>5]>>>r%32&255,o=parseInt(i.charAt(n>>>4&15)+i.charAt(15&n),16);t.push(o)}return t}(function(e,t){e[t>>5]|=128<>5]|=(255&e[n/8])<{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(i)};const n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto),i=new Uint8Array(16)},585:(e,t)=>{"use strict";function n(e,t,n,i){switch(e){case 0:return t&n^~t&i;case 1:case 3:return t^n^i;case 2:return t&n^t&i^n&i}}function i(e,t){return e<>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n>>0;h=l,l=c,c=i(d,30)>>>0,d=s,s=a}r[0]=r[0]+s>>>0,r[1]=r[1]+d>>>0,r[2]=r[2]+c>>>0,r[3]=r[3]+l>>>0,r[4]=r[4]+h>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}},423:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n(294)),r=o(n(144));function o(e){return e&&e.__esModule?e:{default:e}}let s,a,d=0,c=0;t.default=function(e,t,n){let o=t&&n||0;const l=t||[];let h=(e=e||{}).node||s,u=void 0!==e.clockseq?e.clockseq:a;if(null==h||null==u){const t=e.random||(e.rng||i.default)();null==h&&(h=s=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==u&&(u=a=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:c+1;const g=p-d+(m-c)/1e4;if(g<0&&void 0===e.clockseq&&(u=u+1&16383),(g<0||p>d)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can\'t create more than 10M uuids/sec");d=p,c=m,a=u,p+=122192928e5;const f=(1e4*(268435455&p)+m)%4294967296;l[o++]=f>>>24&255,l[o++]=f>>>16&255,l[o++]=f>>>8&255,l[o++]=255&f;const v=p/4294967296*1e4&268435455;l[o++]=v>>>8&255,l[o++]=255&v,l[o++]=v>>>24&15|16,l[o++]=v>>>16&255,l[o++]=u>>>8|128,l[o++]=255&u;for(let e=0;e<6;++e)l[o+e]=h[e];return t||(0,r.default)(l)}},89:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n(929)),r=o(n(862));function o(e){return e&&e.__esModule?e:{default:e}}var s=(0,i.default)("v3",48,r.default);t.default=s},929:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){function i(e,i,o,s){const a=o&&s||0;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n(294)),r=o(n(144));function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){"string"==typeof e&&(t="binary"===e?new Uint8Array(16):null,e=null);const o=(e=e||{}).random||(e.rng||i.default)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){const e=n||0;for(let n=0;n<16;++n)t[e+n]=o[n];return t}return(0,r.default)(o)}},400:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n(929)),r=o(n(585));function o(e){return e&&e.__esModule?e:{default:e}}var s=(0,i.default)("v5",80,r.default);t.default=s},987:(e,t,n)=>{"use strict";let i;n.r(t),n.d(t,{AUDIO_OUTPUT_DEVICE_CHANGED:()=>T,AUDIO_SSRCS_REMAPPED:()=>O,CREATE_ANSWER_FAILED:()=>r,CREATE_OFFER_FAILED:()=>o,DATA_CHANNEL_CLOSED:()=>a,DATA_CHANNEL_OPEN:()=>s,DEVICE_LIST_AVAILABLE:()=>R,DEVICE_LIST_CHANGED:()=>C,DEVICE_LIST_WILL_CHANGE:()=>x,DOMINANT_SPEAKER_CHANGED:()=>c,ENDPOINT_CONN_STATUS_CHANGED:()=>d,ENDPOINT_MESSAGE_RECEIVED:()=>A,ENDPOINT_STATS_RECEIVED:()=>w,FORWARDED_SOURCES_CHANGED:()=>l,LASTN_VALUE_CHANGED:()=>p,LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED:()=>g,LOCAL_TRACK_SSRC_UPDATED:()=>m,LOCAL_UFRAG_CHANGED:()=>I,PERMISSIONS_CHANGED:()=>h,REMOTE_TRACK_ADDED:()=>v,REMOTE_TRACK_MUTE:()=>_,REMOTE_TRACK_REMOVED:()=>y,REMOTE_TRACK_UNMUTE:()=>E,REMOTE_UFRAG_CHANGED:()=>P,RTCEvents:()=>i,SENDER_VIDEO_CONSTRAINTS_CHANGED:()=>u,SET_LOCAL_DESCRIPTION_FAILED:()=>S,SET_REMOTE_DESCRIPTION_FAILED:()=>b,TRACK_ATTACHED:()=>f,VIDEO_SSRCS_REMAPPED:()=>D,default:()=>k}),function(e){e.CREATE_ANSWER_FAILED="rtc.create_answer_failed",e.CREATE_OFFER_FAILED="rtc.create_offer_failed",e.DATA_CHANNEL_OPEN="rtc.data_channel_open",e.DATA_CHANNEL_CLOSED="rtc.data_channel_closed",e.ENDPOINT_CONN_STATUS_CHANGED="rtc.endpoint_conn_status_changed",e.DOMINANT_SPEAKER_CHANGED="rtc.dominant_speaker_changed",e.FORWARDED_SOURCES_CHANGED="rtc.forwarded_sources_changed",e.PERMISSIONS_CHANGED="rtc.permissions_changed",e.SENDER_VIDEO_CONSTRAINTS_CHANGED="rtc.sender_video_constraints_changed",e.LASTN_VALUE_CHANGED="rtc.lastn_value_changed",e.LOCAL_TRACK_SSRC_UPDATED="rtc.local_track_ssrc_updated",e.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED="rtc.local_track_max_enabled_resolution_changed",e.TRACK_ATTACHED="rtc.track_attached",e.REMOTE_TRACK_ADDED="rtc.remote_track_added",e.REMOTE_TRACK_MUTE="rtc.remote_track_mute",e.REMOTE_TRACK_REMOVED="rtc.remote_track_removed",e.REMOTE_TRACK_UNMUTE="rtc.remote_track_unmute",e.SET_LOCAL_DESCRIPTION_FAILED="rtc.set_local_description_failed",e.SET_REMOTE_DESCRIPTION_FAILED="rtc.set_remote_description_failed",e.AUDIO_OUTPUT_DEVICE_CHANGED="rtc.audio_output_device_changed",e.DEVICE_LIST_CHANGED="rtc.device_list_changed",e.DEVICE_LIST_WILL_CHANGE="rtc.device_list_will_change",e.DEVICE_LIST_AVAILABLE="rtc.device_list_available",e.ENDPOINT_MESSAGE_RECEIVED="rtc.endpoint_message_received",e.ENDPOINT_STATS_RECEIVED="rtc.endpoint_stats_received",e.LOCAL_UFRAG_CHANGED="rtc.local_ufrag_changed",e.REMOTE_UFRAG_CHANGED="rtc.remote_ufrag_changed",e.VIDEO_SSRCS_REMAPPED="rtc.video_ssrcs_remapped",e.AUDIO_SSRCS_REMAPPED="rtc.audio_ssrcs_remapped"}(i||(i={}));const r=i.CREATE_ANSWER_FAILED,o=i.CREATE_OFFER_FAILED,s=i.DATA_CHANNEL_OPEN,a=i.DATA_CHANNEL_CLOSED,d=i.ENDPOINT_CONN_STATUS_CHANGED,c=i.DOMINANT_SPEAKER_CHANGED,l=i.FORWARDED_SOURCES_CHANGED,h=i.PERMISSIONS_CHANGED,u=i.SENDER_VIDEO_CONSTRAINTS_CHANGED,p=i.LASTN_VALUE_CHANGED,m=i.LOCAL_TRACK_SSRC_UPDATED,g=i.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED,f=i.TRACK_ATTACHED,v=i.REMOTE_TRACK_ADDED,_=i.REMOTE_TRACK_MUTE,y=i.REMOTE_TRACK_REMOVED,E=i.REMOTE_TRACK_UNMUTE,S=i.SET_LOCAL_DESCRIPTION_FAILED,b=i.SET_REMOTE_DESCRIPTION_FAILED,T=i.AUDIO_OUTPUT_DEVICE_CHANGED,C=i.DEVICE_LIST_CHANGED,x=i.DEVICE_LIST_WILL_CHANGE,R=i.DEVICE_LIST_AVAILABLE,A=i.ENDPOINT_MESSAGE_RECEIVED,w=i.ENDPOINT_STATS_RECEIVED,I=i.LOCAL_UFRAG_CHANGED,P=i.REMOTE_UFRAG_CHANGED,D=i.VIDEO_SSRCS_REMAPPED,O=i.AUDIO_SSRCS_REMAPPED,k=i},125:e=>{e.exports={2160:{width:3840,height:2160},"4k":{width:3840,height:2160},1080:{width:1920,height:1080},fullhd:{width:1920,height:1080},720:{width:1280,height:720},hd:{width:1280,height:720},540:{width:960,height:540},qhd:{width:960,height:540},480:{width:640,height:480},vga:{width:640,height:480},360:{width:640,height:360},240:{width:320,height:240},180:{width:320,height:180}}},408:(e,t,n)=>{"use strict";let i;n.r(t),n.d(t,{VideoType:()=>i}),function(e){e.CAMERA="camera",e.DESKTOP="desktop"}(i||(i={}))},514:e=>{e.exports={IDENTITY_UPDATED:"authentication.identity_updated"}},680:(e,t,n)=>{"use strict";n.d(t,{D:()=>i});const i="local"},609:(e,t,n)=>{"use strict";let i;n.r(t),n.d(t,{XMPPEvents:()=>i}),function(e){e.ADD_ICE_CANDIDATE_FAILED="xmpp.add_ice_candidate_failed",e.AUDIO_MUTED_BY_FOCUS="xmpp.audio_muted_by_focus",e.VIDEO_MUTED_BY_FOCUS="xmpp.video_muted_by_focus",e.AUTHENTICATION_REQUIRED="xmpp.authentication_required",e.BRIDGE_DOWN="xmpp.bridge_down",e.CALL_ACCEPTED="xmpp.callaccepted.jingle",e.CALL_INCOMING="xmpp.callincoming.jingle",e.CALL_ENDED="xmpp.callended.jingle",e.CHAT_ERROR_RECEIVED="xmpp.chat_error_received",e.SETTINGS_ERROR_RECEIVED="xmpp.settings_error_received",e.CONFERENCE_PROPERTIES_CHANGED="xmpp.conference_properties_changed",e.CONNECTION_ESTABLISHED="xmpp.connection.connected",e.CONNECTION_FAILED="xmpp.connection.failed",e.CONNECTION_INTERRUPTED="xmpp.connection.interrupted",e.CONNECTION_RESTORED="xmpp.connection.restored",e.CONNECTION_ICE_FAILED="xmpp.connection.ice.failed",e.CONNECTION_RESTARTED="xmpp.connection.restart",e.CONNECTION_STATUS_CHANGED="xmpp.connection.status.changed",e.DISPLAY_NAME_CHANGED="xmpp.display_name_changed",e.DISPLAY_NAME_REQUIRED="xmpp.display_name_required",e.EMUC_ROOM_ADDED="xmpp.emuc_room_added",e.EMUC_ROOM_REMOVED="xmpp.emuc_room_removed",e.ETHERPAD="xmpp.etherpad",e.FOCUS_DISCONNECTED="xmpp.focus_disconnected",e.FOCUS_LEFT="xmpp.focus_left",e.GRACEFUL_SHUTDOWN="xmpp.graceful_shutdown",e.ICE_RESTARTING="rtc.ice_restarting",e.ICE_RESTART_SUCCESS="rtc.ice_restart_success",e.KICKED="xmpp.kicked",e.LOCAL_ROLE_CHANGED="xmpp.localrole_changed",e.MEETING_ID_SET="xmpp.meeting_id_set",e.MESSAGE_RECEIVED="xmpp.message_received",e.INVITE_MESSAGE_RECEIVED="xmpp.invite_message_received",e.PRIVATE_MESSAGE_RECEIVED="xmpp.private_message_received",e.MUC_MEMBER_BOT_TYPE_CHANGED="xmpp.muc_member_bot_type_changed",e.MUC_DESTROYED="xmpp.muc_destroyed",e.MUC_JOIN_IN_PROGRESS="xmpp.muc_join_in_progress",e.MUC_JOINED="xmpp.muc_joined",e.MUC_MEMBER_JOINED="xmpp.muc_member_joined",e.MUC_MEMBER_LEFT="xmpp.muc_member_left",e.MUC_LOBBY_MEMBER_JOINED="xmpp.muc_lobby_member_joined",e.MUC_LOBBY_MEMBER_UPDATED="xmpp.muc_lobby_member_updated",e.MUC_LOBBY_MEMBER_LEFT="xmpp.muc_lobby_member_left",e.MUC_DENIED_ACCESS="xmpp.muc_denied access",e.MUC_LEFT="xmpp.muc_left",e.MUC_ROLE_CHANGED="xmpp.muc_role_changed",e.MUC_LOCK_CHANGED="xmpp.muc_lock_changed",e.MUC_MEMBERS_ONLY_CHANGED="xmpp.muc_members_only_changed",e.MUC_VISITORS_SUPPORTED_CHANGED="xmpp.muc_visitors_supported_changed",e.PARTICIPANT_AUDIO_MUTED="xmpp.audio_muted",e.PARTICIPANT_VIDEO_MUTED="xmpp.video_muted",e.PARTICIPANT_VIDEO_TYPE_CHANGED="xmpp.video_type",e.PARTICIPANT_FEATURES_CHANGED="xmpp.participant_features_changed",e.PASSWORD_REQUIRED="xmpp.password_required",e.PHONE_NUMBER_CHANGED="conference.phoneNumberChanged",e.PRESENCE_RECEIVED="xmpp.presence_received",e.PRESENCE_STATUS="xmpp.presence_status",e.PROMPT_FOR_LOGIN="xmpp.prompt_for_login",e.READY_TO_JOIN="xmpp.ready_to_join",e.RECORDER_STATE_CHANGED="xmpp.recorderStateChanged",e.REMOTE_STATS="xmpp.remote_stats",e.RENEGOTIATION_FAILED="xmpp.renegotiation_failed",e.RESERVATION_ERROR="xmpp.room_reservation_error",e.ROOM_CONNECT_ERROR="xmpp.room_connect_error",e.ROOM_CONNECT_NOT_ALLOWED_ERROR="xmpp.room_connect_error.not_allowed",e.ROOM_JOIN_ERROR="xmpp.room_join_error",e.ROOM_CONNECT_MEMBERS_ONLY_ERROR="xmpp.room_connect_error.members_only",e.ROOM_DISCO_INFO_UPDATED="xmpp.room_disco_info_updated",e.ROOM_DISCO_INFO_FAILED="xmpp.room_disco_info_failed",e.ROOM_MAX_USERS_ERROR="xmpp.room_max_users_error",e.SENDING_CHAT_MESSAGE="xmpp.sending_chat_message",e.SENDING_PRIVATE_CHAT_MESSAGE="xmpp.sending_private_chat_message",e.SESSION_ACCEPT="xmpp.session_accept",e.SESSION_ACCEPT_ERROR="xmpp.session_accept_error",e.SESSION_ACCEPT_TIMEOUT="xmpp.session_accept_timeout",e.SOURCE_ADD="xmpp.source_add",e.SOURCE_ADD_ERROR="xmpp.source_add_error",e.SOURCE_REMOVE="xmpp.source_remove",e.SOURCE_REMOVE_ERROR="xmpp.source_remove_error",e.SPEAKER_STATS_RECEIVED="xmpp.speaker_stats_received",e.CONFERENCE_TIMESTAMP_RECEIVED="xmpp.conference_timestamp_received",e.AV_MODERATION_APPROVED="xmpp.av_moderation.approved",e.AV_MODERATION_REJECTED="xmpp.av_moderation.rejected",e.AV_MODERATION_RECEIVED="xmpp.av_moderation.received",e.AV_MODERATION_CHANGED="xmpp.av_moderation.changed",e.AV_MODERATION_PARTICIPANT_APPROVED="xmpp.av_moderation.participant.approved",e.AV_MODERATION_PARTICIPANT_REJECTED="xmpp.av_moderation.participant.rejected",e.BREAKOUT_ROOMS_MOVE_TO_ROOM="xmpp.breakout-rooms.move-to-room",e.BREAKOUT_ROOMS_EVENT="xmpp.breakout-rooms.event",e.BREAKOUT_ROOMS_UPDATED="xmpp.breakout-rooms.updated",e.ROOM_METADATA_EVENT="xmpp.room-metadata.event",e.ROOM_METADATA_UPDATED="xmpp.room-metadata.updated",e.START_MUTED_FROM_FOCUS="xmpp.start_muted_from_focus",e.SUBJECT_CHANGED="xmpp.subject_changed",e.SUSPEND_DETECTED="xmpp.suspend_detected",e.TRANSCRIPTION_STATUS_CHANGED="xmpp.transcription_status_changed",e.TRANSPORT_INFO="xmpp.transportinfo.jingle",e.VIDEO_SIP_GW_AVAILABILITY_CHANGED="xmpp.videoSIPGWAvailabilityChanged",e.VIDEO_SIP_GW_SESSION_STATE_CHANGED="xmpp.videoSIPGWSessionStateChanged",e.VISITORS_MESSAGE="xmpp.visitors_message",e.VISITORS_REJECTION="xmpp.visitors_rejection",e.ICE_CONNECTION_STATE_CHANGED="xmpp.ice_connection_state_changed",e.JSON_MESSAGE_RECEIVED="xmmp.json_message_received"}(i||(i={}))},526:(e,t,n)=>{"use strict";n.d(t,{Z:()=>mu});var i={};n.r(i),n.d(i,{AUTHENTICATION_REQUIRED:()=>T,CHAT_ERROR:()=>C,CONFERENCE_ACCESS_DENIED:()=>O,CONFERENCE_DESTROYED:()=>R,CONFERENCE_MAX_USERS:()=>A,CONFERENCE_RESTARTED:()=>I,CONNECTION_ERROR:()=>w,DISPLAY_NAME_REQUIRED:()=>k,FOCUS_DISCONNECTED:()=>N,FOCUS_LEFT:()=>M,GRACEFUL_SHUTDOWN:()=>L,ICE_FAILED:()=>F,INCOMPATIBLE_SERVER_VERSIONS:()=>j,JitsiConferenceErrors:()=>b,MEMBERS_ONLY_ERROR:()=>D,NOT_ALLOWED_ERROR:()=>P,OFFER_ANSWER_FAILED:()=>V,PASSWORD_NOT_SUPPORTED:()=>U,PASSWORD_REQUIRED:()=>H,RESERVATION_ERROR:()=>$,SETTINGS_ERROR:()=>x,VIDEOBRIDGE_NOT_AVAILABLE:()=>J});var r={};n.r(r),n.d(r,{AUDIO_INPUT_STATE_CHANGE:()=>z,AUDIO_UNMUTE_PERMISSIONS_CHANGED:()=>K,AUTH_STATUS_CHANGED:()=>W,AV_MODERATION_APPROVED:()=>X,AV_MODERATION_CHANGED:()=>Y,AV_MODERATION_PARTICIPANT_APPROVED:()=>Q,AV_MODERATION_PARTICIPANT_REJECTED:()=>Z,AV_MODERATION_REJECTED:()=>ee,BEFORE_STATISTICS_DISPOSED:()=>te,BOT_TYPE_CHANGED:()=>ne,BREAKOUT_ROOMS_MOVE_TO_ROOM:()=>ie,BREAKOUT_ROOMS_UPDATED:()=>re,CONFERENCE_CREATED_TIMESTAMP:()=>oe,CONFERENCE_ERROR:()=>se,CONFERENCE_FAILED:()=>ae,CONFERENCE_JOINED:()=>ce,CONFERENCE_JOIN_IN_PROGRESS:()=>de,CONFERENCE_LEFT:()=>le,CONFERENCE_UNIQUE_ID_SET:()=>he,CONFERENCE_VISITOR_CODECS_CHANGED:()=>ue,CONNECTION_ESTABLISHED:()=>pe,CONNECTION_INTERRUPTED:()=>me,CONNECTION_RESTORED:()=>ge,DATA_CHANNEL_CLOSED:()=>fe,DATA_CHANNEL_OPENED:()=>ve,DISPLAY_NAME_CHANGED:()=>_e,DOMINANT_SPEAKER_CHANGED:()=>ye,DTMF_SUPPORT_CHANGED:()=>Ee,E2EE_VERIFICATION_AVAILABLE:()=>Se,E2EE_VERIFICATION_COMPLETED:()=>be,E2EE_VERIFICATION_READY:()=>Te,ENDPOINT_MESSAGE_RECEIVED:()=>Ce,ENDPOINT_STATS_RECEIVED:()=>xe,FORWARDED_SOURCES_CHANGED:()=>Re,JVB121_STATUS:()=>Ae,JitsiConferenceEvents:()=>B,KICKED:()=>we,LAST_N_ENDPOINTS_CHANGED:()=>Ie,LOBBY_USER_JOINED:()=>Pe,LOBBY_USER_LEFT:()=>De,LOBBY_USER_UPDATED:()=>Oe,LOCK_STATE_CHANGED:()=>ke,MEMBERS_ONLY_CHANGED:()=>Ne,MESSAGE_RECEIVED:()=>Me,METADATA_UPDATED:()=>Le,NOISY_MIC:()=>je,NON_PARTICIPANT_MESSAGE_RECEIVED:()=>Ve,NO_AUDIO_INPUT:()=>Fe,P2P_STATUS:()=>Ue,PARTCIPANT_FEATURES_CHANGED:()=>Be,PARTICIPANT_KICKED:()=>He,PARTICIPANT_PROPERTY_CHANGED:()=>qe,PARTICIPANT_SOURCE_UPDATED:()=>$e,PHONE_NUMBER_CHANGED:()=>Ge,PRIVATE_MESSAGE_RECEIVED:()=>Je,PROPERTIES_CHANGED:()=>ze,RECORDER_STATE_CHANGED:()=>Ke,SERVER_REGION_CHANGED:()=>We,STARTED_MUTED:()=>Ye,START_MUTED_POLICY_CHANGED:()=>Xe,SUBJECT_CHANGED:()=>Qe,SUSPEND_DETECTED:()=>Ze,TALK_WHILE_MUTED:()=>et,TRACK_ADDED:()=>tt,TRACK_AUDIO_LEVEL_CHANGED:()=>nt,TRACK_MUTE_CHANGED:()=>it,TRACK_REMOVED:()=>rt,TRACK_UNMUTE_REJECTED:()=>ot,TRANSCRIPTION_STATUS_CHANGED:()=>st,USER_JOINED:()=>at,USER_LEFT:()=>dt,USER_ROLE_CHANGED:()=>ct,USER_STATUS_CHANGED:()=>lt,VIDEO_SIP_GW_AVAILABILITY_CHANGED:()=>ht,VIDEO_SIP_GW_SESSION_STATE_CHANGED:()=>ut,VIDEO_UNMUTE_PERMISSIONS_CHANGED:()=>pt,VISITORS_MESSAGE:()=>gt,VISITORS_REJECTION:()=>ft,VISITORS_SUPPORTED_CHANGED:()=>mt,_MEDIA_SESSION_ACTIVE_CHANGED:()=>G,_MEDIA_SESSION_STARTED:()=>q});var o={};n.r(o),n.d(o,{JitsiTrackEvents:()=>bt,LOCAL_TRACK_STOPPED:()=>Tt,NO_AUDIO_INPUT:()=>It,NO_DATA_FROM_SOURCE:()=>wt,TRACK_AUDIO_LEVEL_CHANGED:()=>Ct,TRACK_AUDIO_OUTPUT_CHANGED:()=>xt,TRACK_MUTE_CHANGED:()=>Rt,TRACK_OWNER_CHANGED:()=>Dt,TRACK_REMOVED:()=>Ot,TRACK_STREAMING_STATUS_CHANGED:()=>Pt,TRACK_VIDEOTYPE_CHANGED:()=>At});var s={};n.r(s),n.d(s,{RTCStatsEvents:()=>Zn,RTC_STATS_PC_EVENT:()=>ti,RTC_STATS_WC_DISCONNECTED:()=>ei});var a={};n.r(a),n.d(a,{CONSTRAINT_FAILED:()=>Gi,ELECTRON_DESKTOP_PICKER_ERROR:()=>zi,ELECTRON_DESKTOP_PICKER_NOT_FOUND:()=>Ki,GENERAL:()=>Wi,JitsiTrackErrors:()=>qi,NOT_FOUND:()=>Xi,PERMISSION_DENIED:()=>Yi,SCREENSHARING_GENERIC_ERROR:()=>Qi,SCREENSHARING_USER_CANCELED:()=>Zi,TIMEOUT:()=>er,TRACK_IS_DISPOSED:()=>tr,TRACK_NO_STREAM_FOUND:()=>nr,TRACK_NO_STREAM_TRACKS_FOUND:()=>or,TRACK_TOO_MANY_TRACKS_IN_STREAM:()=>rr,UNSUPPORTED_RESOLUTION:()=>ir});var d={};n.r(d),n.d(d,{CONNECTION_DISCONNECTED:()=>lr,CONNECTION_ESTABLISHED:()=>hr,CONNECTION_FAILED:()=>ur,CONNECTION_REDIRECTED:()=>pr,DISPLAY_NAME_REQUIRED:()=>gr,JitsiConnectionEvents:()=>cr,PROPERTIES_UPDATED:()=>fr,WRONG_STATE:()=>mr});var c={};n.r(c),n.d(c,{CONNECTION_DROPPED_ERROR:()=>Er,JitsiConnectionErrors:()=>yr,OTHER_ERROR:()=>Sr,PASSWORD_REQUIRED:()=>br,SERVER_ERROR:()=>Tr});var l={};n.r(l),n.d(l,{JitsiTranscriptionStatus:()=>Wo,OFF:()=>Yo,ON:()=>Xo});var h={};n.r(h),n.d(h,{fixNegotiationNeeded:()=>cd,shimAddTrackRemoveTrack:()=>ad,shimAddTrackRemoveTrackWithNative:()=>sd,shimGetDisplayMedia:()=>ed,shimGetSendersWithDtmf:()=>id,shimGetStats:()=>rd,shimGetUserMedia:()=>Za,shimMediaStream:()=>td,shimOnTrack:()=>nd,shimPeerConnection:()=>dd,shimSenderReceiverGetStats:()=>od});var u={};n.r(u),n.d(u,{shimAddTransceiver:()=>_d,shimCreateAnswer:()=>Sd,shimCreateOffer:()=>Ed,shimGetDisplayMedia:()=>hd,shimGetParameters:()=>yd,shimGetUserMedia:()=>ld,shimOnTrack:()=>ud,shimPeerConnection:()=>pd,shimRTCDataChannel:()=>vd,shimReceiverGetStats:()=>gd,shimRemoveStream:()=>fd,shimSenderGetStats:()=>md});var p={};n.r(p),n.d(p,{shimAudioContext:()=>Pd,shimCallbacksAPI:()=>Cd,shimConstraints:()=>Rd,shimCreateOfferLegacy:()=>Id,shimGetUserMedia:()=>xd,shimLocalStreamsAPI:()=>bd,shimRTCIceServerUrls:()=>Ad,shimRemoteStreamsAPI:()=>Td,shimTrackEventTransceiver:()=>wd});var m={};n.r(m),n.d(m,{removeExtmapAllowMixed:()=>Md,shimAddIceCandidateNullOrEmpty:()=>Ld,shimConnectionState:()=>Nd,shimMaxMessageSize:()=>Od,shimParameterlessSetLocalDescription:()=>Fd,shimRTCIceCandidate:()=>Dd,shimSendThrowTypeError:()=>kd});var g={};n.r(g),n.d(g,{ConnectionQualityEvents:()=>cl,LOCAL_STATS_UPDATED:()=>ml,REMOTE_STATS_UPDATED:()=>gl});var f={};n.r(f),n.d(f,{AUDIO_INPUT_STATE_CHANGE:()=>Rl,DETECTOR_STATE_CHANGE:()=>xl,DetectionEvents:()=>Cl,NO_AUDIO_INPUT:()=>Al,VAD_NOISY_DEVICE:()=>wl,VAD_REPORT_PUBLISHED:()=>Il,VAD_SCORE_PUBLISHED:()=>Pl,VAD_TALK_WHILE_MUTED:()=>Dl});var v={};n.r(v),n.d(v,{E2E_RTT_CHANGED:()=>Hl,E2ePingEvents:()=>Ul});var _={};n.r(_),n.d(_,{ERROR_NO_CONNECTION:()=>Ph,ERROR_SESSION_EXISTS:()=>Dh,STATE_FAILED:()=>Ih,STATE_OFF:()=>Rh,STATE_ON:()=>xh,STATE_PENDING:()=>Ah,STATE_RETRYING:()=>wh,STATUS_AVAILABLE:()=>bh,STATUS_BUSY:()=>Ch,STATUS_UNDEFINED:()=>Th,VideoSIPGWErrorConstants:()=>Sh,VideoSIPGWStateConstants:()=>Eh,VideoSIPGWStatusConstants:()=>yh});var y={};n.r(y),n.d(y,{DEVICE_LIST_CHANGED:()=>Gh,JitsiMediaDevicesEvents:()=>qh,PERMISSIONS_CHANGED:()=>zh,PERMISSION_PROMPT_IS_SHOWN:()=>Kh,SLOW_GET_USER_MEDIA:()=>Wh});var E=n(810),S=n.n(E);let b;!function(e){e.AUTHENTICATION_REQUIRED="conference.authenticationRequired",e.CHAT_ERROR="conference.chatError",e.SETTINGS_ERROR="conference.settingsError",e.CONFERENCE_DESTROYED="conference.destroyed",e.CONFERENCE_MAX_USERS="conference.max_users",e.CONNECTION_ERROR="conference.connectionError",e.CONFERENCE_RESTARTED="conference.restarted",e.NOT_ALLOWED_ERROR="conference.connectionError.notAllowed",e.MEMBERS_ONLY_ERROR="conference.connectionError.membersOnly",e.CONFERENCE_ACCESS_DENIED="conference.connectionError.accessDenied",e.DISPLAY_NAME_REQUIRED="conference.display_name_required",e.FOCUS_DISCONNECTED="conference.focusDisconnected",e.FOCUS_LEFT="conference.focusLeft",e.GRACEFUL_SHUTDOWN="conference.gracefulShutdown",e.ICE_FAILED="conference.iceFailed",e.INCOMPATIBLE_SERVER_VERSIONS="conference.incompatible_server_versions",e.OFFER_ANSWER_FAILED="conference.offerAnswerFailed",e.PASSWORD_NOT_SUPPORTED="conference.passwordNotSupported",e.PASSWORD_REQUIRED="conference.passwordRequired",e.RESERVATION_ERROR="conference.reservationError",e.VIDEOBRIDGE_NOT_AVAILABLE="conference.videobridgeNotAvailable"}(b||(b={}));const T=b.AUTHENTICATION_REQUIRED,C=b.CHAT_ERROR,x=b.SETTINGS_ERROR,R=b.CONFERENCE_DESTROYED,A=b.CONFERENCE_MAX_USERS,w=b.CONNECTION_ERROR,I=b.CONFERENCE_RESTARTED,P=b.NOT_ALLOWED_ERROR,D=b.MEMBERS_ONLY_ERROR,O=b.CONFERENCE_ACCESS_DENIED,k=b.DISPLAY_NAME_REQUIRED,N=b.FOCUS_DISCONNECTED,M=b.FOCUS_LEFT,L=b.GRACEFUL_SHUTDOWN,F=b.ICE_FAILED,j=b.INCOMPATIBLE_SERVER_VERSIONS,V=b.OFFER_ANSWER_FAILED,U=b.PASSWORD_NOT_SUPPORTED,H=b.PASSWORD_REQUIRED,$=b.RESERVATION_ERROR,J=b.VIDEOBRIDGE_NOT_AVAILABLE;let B;!function(e){e._MEDIA_SESSION_ACTIVE_CHANGED="conference.media_session.active_changed",e._MEDIA_SESSION_STARTED="conference.media_session.started",e.AUDIO_INPUT_STATE_CHANGE="conference.audio_input_state_changed",e.AUDIO_UNMUTE_PERMISSIONS_CHANGED="conference.audio_unmute_permissions_changed",e.AUTH_STATUS_CHANGED="conference.auth_status_changed",e.AV_MODERATION_APPROVED="conference.av_moderation.approved",e.AV_MODERATION_CHANGED="conference.av_moderation.changed",e.AV_MODERATION_PARTICIPANT_APPROVED="conference.av_moderation.participant.approved",e.AV_MODERATION_PARTICIPANT_REJECTED="conference.av_moderation.participant.rejected",e.AV_MODERATION_REJECTED="conference.av_moderation.rejected",e.BEFORE_STATISTICS_DISPOSED="conference.beforeStatisticsDisposed",e.BOT_TYPE_CHANGED="conference.bot_type_changed",e.BREAKOUT_ROOMS_MOVE_TO_ROOM="conference.breakout-rooms.move-to-room",e.BREAKOUT_ROOMS_UPDATED="conference.breakout-rooms.updated",e.CONFERENCE_CREATED_TIMESTAMP="conference.createdTimestamp",e.CONFERENCE_ERROR="conference.error",e.CONFERENCE_FAILED="conference.failed",e.CONFERENCE_JOIN_IN_PROGRESS="conference.join_in_progress",e.CONFERENCE_JOINED="conference.joined",e.CONFERENCE_LEFT="conference.left",e.CONFERENCE_UNIQUE_ID_SET="conference.unique_id_set",e.CONFERENCE_VISITOR_CODECS_CHANGED="conference.visitor_codecs_changed",e.CONNECTION_ESTABLISHED="conference.connectionEstablished",e.CONNECTION_INTERRUPTED="conference.connectionInterrupted",e.CONNECTION_RESTORED="conference.connectionRestored",e.DATA_CHANNEL_CLOSED="conference.dataChannelClosed",e.DATA_CHANNEL_OPENED="conference.dataChannelOpened",e.DISPLAY_NAME_CHANGED="conference.displayNameChanged",e.DOMINANT_SPEAKER_CHANGED="conference.dominantSpeaker",e.DTMF_SUPPORT_CHANGED="conference.dtmfSupportChanged",e.E2EE_VERIFICATION_AVAILABLE="conference.e2ee.verification.available",e.E2EE_VERIFICATION_COMPLETED="conference.e2ee.verification.completed",e.E2EE_VERIFICATION_READY="conference.e2ee.verification.ready",e.ENDPOINT_MESSAGE_RECEIVED="conference.endpoint_message_received",e.ENDPOINT_STATS_RECEIVED="conference.endpoint_stats_received",e.FORWARDED_SOURCES_CHANGED="conference.forwardedSourcesChanged",e.JVB121_STATUS="conference.jvb121Status",e.KICKED="conference.kicked",e.LAST_N_ENDPOINTS_CHANGED="conference.lastNEndpointsChanged",e.LOBBY_USER_JOINED="conference.lobby.userJoined",e.LOBBY_USER_LEFT="conference.lobby.userLeft",e.LOBBY_USER_UPDATED="conference.lobby.userUpdated",e.LOCK_STATE_CHANGED="conference.lock_state_changed",e.MEMBERS_ONLY_CHANGED="conference.membersOnlyChanged",e.MESSAGE_RECEIVED="conference.messageReceived",e.METADATA_UPDATED="conference.metadata.updated",e.NO_AUDIO_INPUT="conference.no_audio_input",e.NOISY_MIC="conference.noisy_mic",e.NON_PARTICIPANT_MESSAGE_RECEIVED="conference.non_participant_message_received",e.P2P_STATUS="conference.p2pStatus",e.PARTCIPANT_FEATURES_CHANGED="conference.partcipant_features_changed",e.PARTICIPANT_KICKED="conference.participant_kicked",e.PARTICIPANT_PROPERTY_CHANGED="conference.participant_property_changed",e.PARTICIPANT_SOURCE_UPDATED="conference.participant_source_updated",e.PHONE_NUMBER_CHANGED="conference.phoneNumberChanged",e.PRIVATE_MESSAGE_RECEIVED="conference.privateMessageReceived",e.PROPERTIES_CHANGED="conference.propertiesChanged",e.RECORDER_STATE_CHANGED="conference.recorderStateChanged",e.SERVER_REGION_CHANGED="conference.server_region_changed",e.START_MUTED_POLICY_CHANGED="conference.start_muted_policy_changed",e.STARTED_MUTED="conference.started_muted",e.SUBJECT_CHANGED="conference.subjectChanged",e.SUSPEND_DETECTED="conference.suspendDetected",e.TALK_WHILE_MUTED="conference.talk_while_muted",e.TRACK_ADDED="conference.trackAdded",e.TRACK_AUDIO_LEVEL_CHANGED="conference.audioLevelsChanged",e.TRACK_MUTE_CHANGED="conference.trackMuteChanged",e.TRACK_REMOVED="conference.trackRemoved",e.TRACK_UNMUTE_REJECTED="conference.trackUnmuteRejected",e.TRANSCRIPTION_STATUS_CHANGED="conference.transcriptionStatusChanged",e.USER_JOINED="conference.userJoined",e.USER_LEFT="conference.userLeft",e.USER_ROLE_CHANGED="conference.roleChanged",e.USER_STATUS_CHANGED="conference.statusChanged",e.VIDEO_SIP_GW_AVAILABILITY_CHANGED="conference.videoSIPGWAvailabilityChanged",e.VIDEO_SIP_GW_SESSION_STATE_CHANGED="conference.videoSIPGWSessionStateChanged",e.VIDEO_UNMUTE_PERMISSIONS_CHANGED="conference.video_unmute_permissions_changed",e.VISITORS_SUPPORTED_CHANGED="conference.visitorsSupported",e.VISITORS_MESSAGE="conference.visitors_message",e.VISITORS_REJECTION="conference.visitors_rejection"}(B||(B={}));const q=B._MEDIA_SESSION_STARTED,G=B._MEDIA_SESSION_ACTIVE_CHANGED,z=B.AUDIO_INPUT_STATE_CHANGE,K=B.AUDIO_UNMUTE_PERMISSIONS_CHANGED,W=B.AUTH_STATUS_CHANGED,X=B.AV_MODERATION_APPROVED,Y=B.AV_MODERATION_CHANGED,Q=B.AV_MODERATION_PARTICIPANT_APPROVED,Z=B.AV_MODERATION_PARTICIPANT_REJECTED,ee=B.AV_MODERATION_REJECTED,te=B.BEFORE_STATISTICS_DISPOSED,ne=B.BOT_TYPE_CHANGED,ie=B.BREAKOUT_ROOMS_MOVE_TO_ROOM,re=B.BREAKOUT_ROOMS_UPDATED,oe=B.CONFERENCE_CREATED_TIMESTAMP,se=B.CONFERENCE_ERROR,ae=B.CONFERENCE_FAILED,de=B.CONFERENCE_JOIN_IN_PROGRESS,ce=B.CONFERENCE_JOINED,le=B.CONFERENCE_LEFT,he=B.CONFERENCE_UNIQUE_ID_SET,ue=B.CONFERENCE_VISITOR_CODECS_CHANGED,pe=B.CONNECTION_ESTABLISHED,me=B.CONNECTION_INTERRUPTED,ge=B.CONNECTION_RESTORED,fe=B.DATA_CHANNEL_CLOSED,ve=B.DATA_CHANNEL_OPENED,_e=B.DISPLAY_NAME_CHANGED,ye=B.DOMINANT_SPEAKER_CHANGED,Ee=B.DTMF_SUPPORT_CHANGED,Se=B.E2EE_VERIFICATION_AVAILABLE,be=B.E2EE_VERIFICATION_COMPLETED,Te=B.E2EE_VERIFICATION_READY,Ce=B.ENDPOINT_MESSAGE_RECEIVED,xe=B.ENDPOINT_STATS_RECEIVED,Re=B.FORWARDED_SOURCES_CHANGED,Ae=B.JVB121_STATUS,we=B.KICKED,Ie=B.LAST_N_ENDPOINTS_CHANGED,Pe=B.LOBBY_USER_JOINED,De=B.LOBBY_USER_LEFT,Oe=B.LOBBY_USER_UPDATED,ke=B.LOCK_STATE_CHANGED,Ne=B.MEMBERS_ONLY_CHANGED,Me=B.MESSAGE_RECEIVED,Le=B.METADATA_UPDATED,Fe=B.NO_AUDIO_INPUT,je=B.NOISY_MIC,Ve=B.NON_PARTICIPANT_MESSAGE_RECEIVED,Ue=B.P2P_STATUS,He=B.PARTICIPANT_KICKED,$e=B.PARTICIPANT_SOURCE_UPDATED,Je=B.PRIVATE_MESSAGE_RECEIVED,Be=B.PARTCIPANT_FEATURES_CHANGED,qe=B.PARTICIPANT_PROPERTY_CHANGED,Ge=B.PHONE_NUMBER_CHANGED,ze=B.PROPERTIES_CHANGED,Ke=B.RECORDER_STATE_CHANGED,We=B.SERVER_REGION_CHANGED,Xe=B.START_MUTED_POLICY_CHANGED,Ye=B.STARTED_MUTED,Qe=B.SUBJECT_CHANGED,Ze=B.SUSPEND_DETECTED,et=B.TALK_WHILE_MUTED,tt=B.TRACK_ADDED,nt=B.TRACK_AUDIO_LEVEL_CHANGED,it=B.TRACK_MUTE_CHANGED,rt=B.TRACK_REMOVED,ot=B.TRACK_UNMUTE_REJECTED,st=B.TRANSCRIPTION_STATUS_CHANGED,at=B.USER_JOINED,dt=B.USER_LEFT,ct=B.USER_ROLE_CHANGED,lt=B.USER_STATUS_CHANGED,ht=B.VIDEO_SIP_GW_AVAILABILITY_CHANGED,ut=B.VIDEO_SIP_GW_SESSION_STATE_CHANGED,pt=B.VIDEO_UNMUTE_PERMISSIONS_CHANGED,mt=B.VISITORS_SUPPORTED_CHANGED,gt=B.VISITORS_MESSAGE,ft=B.VISITORS_REJECTION;var vt=n(387),_t=n.n(vt),yt=n(47),Et=n.n(yt),St=n(33);let bt;!function(e){e.LOCAL_TRACK_STOPPED="track.stopped",e.TRACK_AUDIO_LEVEL_CHANGED="track.audioLevelsChanged",e.TRACK_AUDIO_OUTPUT_CHANGED="track.audioOutputChanged",e.TRACK_MUTE_CHANGED="track.trackMuteChanged",e.TRACK_VIDEOTYPE_CHANGED="track.videoTypeChanged",e.NO_DATA_FROM_SOURCE="track.no_data_from_source",e.NO_AUDIO_INPUT="track.no_audio_input",e.TRACK_STREAMING_STATUS_CHANGED="track.streaming_status_changed",e.TRACK_OWNER_CHANGED="track.owner_changed",e.TRACK_REMOVED="track.removed"}(bt||(bt={}));const Tt=bt.LOCAL_TRACK_STOPPED,Ct=bt.TRACK_AUDIO_LEVEL_CHANGED,xt=bt.TRACK_AUDIO_OUTPUT_CHANGED,Rt=bt.TRACK_MUTE_CHANGED,At=bt.TRACK_VIDEOTYPE_CHANGED,wt=bt.NO_DATA_FROM_SOURCE,It=bt.NO_AUDIO_INPUT,Pt=bt.TRACK_STREAMING_STATUS_CHANGED,Dt=bt.TRACK_OWNER_CHANGED,Ot=bt.TRACK_REMOVED;let kt;!function(e){e.TYPE_OPERATIONAL="operational",e.TYPE_PAGE="page",e.TYPE_TRACK="track",e.TYPE_UI="ui",e.ACTION_JINGLE_RESTART="restart",e.ACTION_JINGLE_SA_TIMEOUT="session-accept.timeout",e.ACTION_JINGLE_SI_RECEIVED="session-initiate.received",e.ACTION_JINGLE_SI_TIMEOUT="session-initiate.timeout",e.ACTION_JINGLE_TERMINATE="terminate",e.ACTION_JINGLE_TR_RECEIVED="transport-replace.received",e.ACTION_JINGLE_TR_SUCCESS="transport-replace.success",e.ACTION_P2P_DECLINED="decline",e.ACTION_P2P_ESTABLISHED="established",e.ACTION_P2P_FAILED="failed",e.ACTION_P2P_SWITCH_TO_JVB="switch.to.jvb",e.AVAILABLE_DEVICE="available.device",e.CONNECTION_DISCONNECTED="connection.disconnected",e.FEEDBACK="feedback",e.ICE_DURATION="ice.duration",e.ICE_ESTABLISHMENT_DURATION_DIFF="ice.establishment.duration.diff",e.ICE_STATE_CHANGED="ice.state.changed",e.NO_BYTES_SENT="track.no-bytes-sent",e.TRACK_UNMUTED="track.unmuted"}(kt||(kt={}));const Nt=kt.TYPE_OPERATIONAL,Mt=kt.TYPE_PAGE,Lt=kt.TYPE_TRACK,Ft=kt.TYPE_UI,jt=kt.ACTION_JINGLE_RESTART,Vt=kt.ACTION_JINGLE_SA_TIMEOUT,Ut=kt.ACTION_JINGLE_SI_RECEIVED,Ht=kt.ACTION_JINGLE_SI_TIMEOUT,$t=kt.ACTION_JINGLE_TERMINATE,Jt=kt.ACTION_JINGLE_TR_RECEIVED,Bt=kt.ACTION_JINGLE_TR_SUCCESS,qt=kt.ACTION_P2P_DECLINED,Gt=kt.ACTION_P2P_ESTABLISHED,zt=kt.ACTION_P2P_FAILED,Kt=kt.ACTION_P2P_SWITCH_TO_JVB,Wt=kt.AVAILABLE_DEVICE,Xt=kt.CONNECTION_DISCONNECTED,Yt=kt.FEEDBACK,Qt=kt.ICE_DURATION,Zt=kt.ICE_ESTABLISHMENT_DURATION_DIFF,en=kt.ICE_STATE_CHANGED,tn=kt.NO_BYTES_SENT,nn=kt.TRACK_UNMUTED,rn=(e,t,n)=>({type:kt.TYPE_OPERATIONAL,action:"connection.failed",attributes:{error_type:e,error_message:t,...n}}),on=(e,t)=>({action:e,attributes:t,source:"conference",type:kt.TYPE_OPERATIONAL}),sn=(e,t)=>({action:"connection.stage.reached",actionSubject:e,attributes:t,source:"connection.stage.reached",type:kt.TYPE_OPERATIONAL}),an=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{type:kt.TYPE_OPERATIONAL,source:"get.user.media",action:e,attributes:t}},dn=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{type:kt.TYPE_OPERATIONAL,action:e,source:"jingle",attributes:t}},cn=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{type:kt.TYPE_OPERATIONAL,action:e,source:"p2p",attributes:t}},ln=e=>({type:kt.TYPE_OPERATIONAL,action:"remotely.muted",mediaType:e}),hn=e=>({type:kt.TYPE_OPERATIONAL,action:"rtp.stats",attributes:e});let un;!function(e){e.AUDIO_LEVEL="statistics.audioLevel",e.BEFORE_DISPOSED="statistics.before_disposed",e.BYTE_SENT_STATS="statistics.byte_sent_stats",e.CONNECTION_STATS="statistics.connectionstats",e.LONG_TASKS_STATS="statistics.long_tasks_stats"}(un||(un={}));const pn=un.AUDIO_LEVEL,mn=un.BEFORE_DISPOSED,gn=un.BYTE_SENT_STATS,fn=un.CONNECTION_STATS,vn=un.LONG_TASKS_STATS;var _n=n(122);const yn="chrome",En="safari",Sn="electron",bn="react-native",Tn={Chrome:yn,Firefox:"firefox",Safari:En,Electron:Sn},Cn="blink",xn="webkit",Rn="gecko",An={Blink:Cn,WebKit:xn,Gecko:Rn};function wn(e){return{name:Tn[e.name],version:e.version,engine:An[e.engine],engineVersion:e.engineVersion}}class In{constructor(e){this._parser=new _n.UAParser(navigator.userAgent);const{name:t,version:n,engine:i,engineVersion:r}=e?wn(e):function(e){const t=function(){const e=navigator.userAgent.match(/\\b(react[ \\t_-]*native)(?:\\/(\\S+))?/i);let t;if(e||"ReactNative"===navigator.product){let n;return e&&e.length>2&&(n=e[1],t=e[2]),n||(n="react-native"),t||(t="unknown"),{name:bn,version:t}}}();if(t)return t;const{name:n,version:i}=e.getBrowser(),{name:r,version:o}=e.getEngine();return wn({name:n,version:i,engine:r,engineVersion:o})}(this._parser);this._name=t,this._version=n,this._engine=i,this._engineVersion=r}isChrome(){return this._name===yn||this._engine===Cn}isFirefox(){return this._engine===Rn}isSafari(){return this._name===En}isElectron(){return this._name===Sn}isReactNative(){return this._name===bn}isChromiumBased(){return this._engine===Cn}isWebKitBased(){return this._engine===xn}getName(){return this._name?this._name:this._parser.getBrowser().name}getVersion(){return this._version?this._version:this._parser.getBrowser().version}getEngine(){return this._engine}getEngineVersion(){return this._engineVersion}getOS(){return this._parser.getOS().name}getOSVersion(){return this._parser.getOS().version}isVersionGreaterThan(e){if(this._version)return parseInt(this._version,10)>parseInt(e,10)}isVersionLessThan(e){if(this._version)return parseInt(this._version,10)parseInt(e,10)}isEngineVersionLessThan(e){if(this._engineVersion)return parseInt(this._engineVersion,10){const i=n[t];delete i.id,e[t]&&Object.keys(i).forEach((r=>{i[r]===e[t][r]&&delete n[t][r]}))}));let i=-1/0;return Object.keys(n).forEach((e=>{const t=n[e];t.timestamp>i&&(i=t.timestamp)})),Object.keys(n).forEach((e=>{const t=n[e];t.timestamp===i&&(t.timestamp=0)})),n.timestamp=i,n}function On(e){return{id:e.id,tracks:e.getTracks().map((e=>({id:e.id,kind:e.kind,label:e.label,enabled:e.enabled,muted:e.muted,readyState:e.readyState})))}}var kn,Nn=new Uint8Array(16);function Mn(){if(!kn&&!(kn="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return kn(Nn)}const Ln=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var Fn=[],jn=0;jn<256;++jn)Fn.push((jn+256).toString(16).substr(1));const Vn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(Fn[e[t+0]]+Fn[e[t+1]]+Fn[e[t+2]]+Fn[e[t+3]]+"-"+Fn[e[t+4]]+Fn[e[t+5]]+"-"+Fn[e[t+6]]+Fn[e[t+7]]+"-"+Fn[e[t+8]]+Fn[e[t+9]]+"-"+Fn[e[t+10]]+Fn[e[t+11]]+Fn[e[t+12]]+Fn[e[t+13]]+Fn[e[t+14]]+Fn[e[t+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&Ln.test(e)}(n))throw TypeError("Stringified UUID is invalid");return n},Un=function(e,t,n){var i=(e=e||{}).random||(e.rng||Mn)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(var r=0;r<16;++r)t[n+r]=i[r];return t}return Vn(i)},Hn="3.1",$n=6e5,Jn={SequenceNumber:"sn"},Bn=3001,qn=3002,Gn=[Bn,qn],zn=1e3;var Kn=n(483),Wn=n.n(Kn);function Xn(e){return 0===e.indexOf("[")||-1!==e.indexOf(":")?"x:x:x:x:x:x:x:x":"x.x.x.x"}function Yn(e){const t=Wn().parseCandidate(e);return"relay"!==t.type&&"ssltcp"!==t.protocol&&(t.ip=Xn(t.ip),t.address=Xn(t.address)),t.relatedAddress&&(t.relatedAddress=Xn(t.relatedAddress)),Wn().writeCandidate(t)}function Qn(e){let t,n,i,r,{endpoint:o,meetingFqn:s,onCloseCallback:a,useLegacy:d,obfuscate:c=!0,pingInterval:l=3e4}=e,h=[],u=Un(),p=0,m=!1,g=1;const f=d?`${Hn}_LEGACY`:`${Hn}_STANDARD`,v=e=>{e.push((new Date).getTime()),e.push(g++)},_=e=>{const t=Object.assign({},e);"identity"!==t.type&&t.data&&(t.data=JSON.stringify(t.data)),n&&n.readyState===WebSocket.OPEN&&m&&n.send(JSON.stringify(t))},y=function(e){_(e),h.length0===e.indexOf("a=candidate:")?`a=${Yn(e)}`:0===e.indexOf("c=")?"c=IN IP4 0.0.0.0":0===e.indexOf("a=rtcp:")?"a=rtcp:9 IN IP4 0.0.0.0":e)).join("\\r\\n").trim()}\\r\\n`));break;case"getStats":case"getstats":e[2]&&(t=e[2],Object.keys(t).forEach((e=>{const n=t[e];n&&(["ipAddress","ip","address"].forEach((e=>{n[e]&&"relay"!==n.candidateType&&(n[e]=Xn(n[e]))})),["googLocalAddress","googRemoteAddress"].forEach((e=>{let t,i,r;n[e]&&(r="["===n[e][0]?"]:":":",[i,t]=n[e].split(r),n[e]=`${Xn(i)}:${t}`)})))})))}var t,n}(i)}v(i),y({statsSessionId:u,type:"stats-entry",data:i})},y.keepAlive=function(){y({statsSessionId:u,type:"keepalive"})},y.close=function(){n&&n.close(Bn)},y.connect=function(e){let d=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e&&!t&&(t=u),t&&(u=Un(),h.forEach((e=>{e.statsSessionId=u}))),n&&n.close(),n=new WebSocket(`${o}/${s}?statsSessionId=${u}&isReconnect=${d}`,f,{headers:{"User-Agent":navigator.userAgent}}),n.onclose=function(t){if(i&&clearInterval(i),m&&(m=!1),a({code:t.code,reason:t.reason}),!Gn.includes(t.code)&&p<$n){const t=2**p*1e3+Math.floor(1e4*Math.random()),n=p+t<$n?t:$n-p;p+=n,r=setTimeout((()=>y.connect(e,!0)),n)}},n.onopen=function(){i=setInterval(y.keepAlive,l)},n.onmessage=async function(e){const{type:t,body:i}=JSON.parse(e.data);if(t===Jn.SequenceNumber){const{value:e,state:t}=i;if(h.length){const t=h[0].data[4],i=h[h.length-1].data[4];if(ei)return void(n&&n.close(qn));const r=h.findIndex((t=>t.data[4]===e));h=h.slice(r+1)}if("initial"===t){r&&clearTimeout(r),p=0,m=!0;for(let e=0;e{if(!window[`${e}RTCPeerConnection`])return;const t=window[`${e}RTCPeerConnection`],a=function(e){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a={...e},{optional:l=[]}=s;let g=!1;try{l.some((e=>!0===e.rtcStatsSFUP2P))&&(g=!0);const a=new t(e,s);if(i&&i(e))return a;const f="PC_"+c++;a.__rtcStatsId=f,e||(e={nullConfig:!0}),((e=JSON.parse(JSON.stringify(e)))&&e.iceServers||[]).forEach((e=>{delete e.credential})),e.browserType=h?"moz":"webkit",n("create",f,e),a.__dtlsTransport=null,n("constraints",f,s),a.addEventListener("icecandidate",(e=>{n("onicecandidate",f,e.candidate)})),a.addEventListener("addstream",(e=>{n("onaddstream",f,`${e.stream.id} ${e.stream.getTracks().map((e=>`${e.kind}:${e.id}`))}`)})),a.addEventListener("track",(e=>{n("ontrack",f,`${e.track.kind}:${e.track.id} ${e.streams.map((e=>`stream:${e.id}`))}`)})),a.addEventListener("removestream",(e=>{n("onremovestream",f,`${e.stream.id} ${e.stream.getTracks().map((e=>`${e.kind}:${e.id}`))}`)})),a.addEventListener("signalingstatechange",(()=>{n("onsignalingstatechange",f,a.signalingState)})),a.addEventListener("iceconnectionstatechange",(()=>{const{iceConnectionState:e}=a;n("oniceconnectionstatechange",f,e),null==d||d({type:"iceconnectionstatechange",body:{pcId:f,isP2P:g,state:e}})})),a.addEventListener("icegatheringstatechange",(()=>{n("onicegatheringstatechange",f,a.iceGatheringState)})),a.addEventListener("connectionstatechange",(()=>{const{connectionState:e}=a;n("onconnectionstatechange",f,a.connectionState),null==d||d({type:"connectionstatechange",body:{pcId:f,isP2P:g,state:e}})})),a.addEventListener("negotiationneeded",(()=>{n("onnegotiationneeded",f,void 0)})),a.addEventListener("datachannel",(e=>{n("ondatachannel",f,[e.channel.id,e.channel.label])}));let v={};const _=function(){h||p||m||u&&!o?a.getStats(null).then((e=>{const t=function(e){if(!e.entries)return e;const t={};return e.forEach(((e,n)=>{t[n]=e})),t}(e),i=JSON.parse(JSON.stringify(t));n("getstats",f,Dn(v,t)),v=i})):u&&a.getStats((e=>{const t=function(e,t){const n={};return t.result().forEach((e=>{const t={id:e.id,timestamp:e.timestamp.getTime(),type:e.type};e.names().forEach((n=>{t[n]=e.stat(n)})),n[t.id]=t})),n}(0,e),i=JSON.parse(JSON.stringify(t));n("getstats",f,Dn(v,t)),v=i}))};if(r){const e=window.setInterval((()=>{"closed"!==a.signalingState&&"closed"!==a.iceConnectionState?_():window.clearInterval(e)}),r)}return a.addEventListener("connectionstatechange",(()=>{["connected","failed"].includes(a.connectionState)&&_()})),a}catch(e){return console.error("RTCStats PeerConnection bind failed: ",e),new t(a,s)}};["createDataChannel","close"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{n(e,this.__rtcStatsId,arguments)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["addStream","removeStream"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{const t=arguments[0],i=t.getTracks().map((e=>`${e.kind}:${e.id}`)).join(",");n(e,this.__rtcStatsId,`${t.id} ${i}`)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["addTrack"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{const t=arguments[0],i=[].slice.call(arguments,1);n(e,this.__rtcStatsId,`${t.kind}:${t.id} ${i.map((e=>`stream:${e.id}`)).join(";")||"-"}`)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["removeTrack"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{const t=arguments[0].track;n(e,this.__rtcStatsId,t?`${t.kind}:${t.id}`:"null")}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["addTransceiver"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{const t=arguments[0];let i;i="string"==typeof t?t:`${t.kind}:${t.id}`,2===arguments.length&&"object"==typeof arguments[1]&&(i+=` ${JSON.stringify(arguments[1])}`),n(e,this.__rtcStatsId,i)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["createOffer","createAnswer"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){const t=this.__rtcStatsId,r=arguments;let o;1===arguments.length&&"object"==typeof arguments[0]?o=arguments[0]:3===arguments.length&&"object"==typeof arguments[2]&&(o=arguments[2]);try{n(e,this.__rtcStatsId,o)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,o?[o]:void 0).then((i=>{try{n(`${e}OnSuccess`,t,s?i:"")}catch(t){console.error(`RTCStats ${e} promise success bind failed: `,t)}if(!(r.length>0&&"function"==typeof r[0]))return i;r[0].apply(null,[i])}),(i=>{try{n(`${e}OnFailure`,t,i.toString())}catch(t){console.error(`RTCStats ${e} promise failure bind failed: `,t)}if(!(r.length>1&&"function"==typeof r[1]))throw i;r[1].apply(null,[i])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){const t=this.__rtcStatsId,r=arguments;try{const t=s?r[0]:"";n(e,this.__rtcStatsId,t)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,[r[0]]).then((()=>{try{n(`${e}OnSuccess`,t,void 0)}catch(t){console.error(`RTCStats ${e} promise success bind failed: `,t)}this.__dtlsTransport||!e.endsWith("Description")||m||this.getSenders().forEach((e=>{!this.__dtlsTransport&&e.transport&&(this.__dtlsTransport=e.transport,e.transport.addEventListener("error",(e=>{n("ondtlserror",t,e)})),e.transport.addEventListener("statechange",(()=>{const i=e.transport.state;n("ondtlsstatechange",t,i)})))})),r.length>=2&&"function"==typeof r[1]&&r[1].apply(null,[])}),(i=>{try{n(`${e}OnFailure`,t,i.toString())}catch(t){console.error(`RTCStats ${e} promise failure bind failed: `,t)}if(!(r.length>=3&&"function"==typeof r[2]))throw i;r[2].apply(null,[i])}))})})),t.generateCertificate&&Object.defineProperty(a,"generateCertificate",{get(){return arguments.length?t.generateCertificate.apply(null,arguments):t.generateCertificate}}),window[`${e}RTCPeerConnection`]=a,window[`${e}RTCPeerConnection`].prototype=t.prototype})),a.forEach((e=>{const t=e+(e.length?"GetUserMedia":"getUserMedia");if(!navigator[t])return;const i=navigator[t].bind(navigator);navigator[t]=function(){try{n("getUserMedia",null,arguments[0])}catch(e){console.error("RTCStats getUserMedia bind failed: ",e)}const e=arguments[1],t=arguments[2];i(arguments[0],(t=>{try{n("getUserMediaOnSuccess",null,On(t))}catch(e){console.error("RTCStats getUserMediaOnSuccess bind failed: ",e)}e&&e(t)}),(e=>{try{n("getUserMediaOnFailure",null,e.name)}catch(e){console.error("RTCStats getUserMediaOnFailure bind failed: ",e)}t&&t(e)}))}.bind(navigator)})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){const e=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices),t=function(){try{n("navigator.mediaDevices.getUserMedia",null,arguments[0])}catch(e){console.error("RTCStats navigator.mediaDevices.getUserMedia bind failed: ",e)}return e.apply(navigator.mediaDevices,arguments).then((e=>{try{n("navigator.mediaDevices.getUserMediaOnSuccess",null,On(e))}catch(e){console.error("RTCStats navigator.mediaDevices.getUserMediaOnSuccess bind failed: ",e)}return e}),(e=>{try{n("navigator.mediaDevices.getUserMediaOnFailure",null,e.name)}catch(e){console.error("RTCStats navigator.mediaDevices.getUserMediaOnFailure bind failed: ",e)}return Promise.reject(e)}))};navigator.mediaDevices.getUserMedia=t.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){const e=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices),t=function(){try{n("navigator.mediaDevices.getDisplayMedia",null,arguments[0])}catch(e){console.error("RTCStats navigator.mediaDevices.getDisplayMedia bind failed: ",e)}return e.apply(navigator.mediaDevices,arguments).then((e=>{try{n("navigator.mediaDevices.getDisplayMediaOnSuccess",null,On(e))}catch(e){console.error("RTCStats navigator.mediaDevices.getDisplayMediaOnSuccess bind failed: ",e)}return e}),(e=>{try{n("navigator.mediaDevices.getDisplayMediaOnFailure",null,e.name)}catch(e){console.error("RTCStats navigator.mediaDevices.getDisplayMediaOnFailure bind failed: ",e)}return Promise.reject(e)}))};navigator.mediaDevices.getDisplayMedia=t.bind(navigator.mediaDevices)}}else Pn.warn("RTCStats unsupported browser.")}({statsEntry:this.sendStatsEntry.bind(this)},{pollInterval:n,useLegacy:t,sendSdp:i,eventCallback:e=>this.events.emit(ti,e)}),this._initialized=!0)}start(e){const{options:{config:t={},name:n=""}={},_statsCurrentId:i=""}=e,{analytics:{rtcstatsEnabled:r=!1,rtcstatsEndpoint:o="",rtcstatsUseLegacy:s=!1}={}}=t;this.reset(),r&&(this._initialized?(e.once(ce,(()=>{var r;const a={endpoint:o,meetingFqn:n,onCloseCallback:e=>this.events.emit(ei,e),useLegacy:s},d=Boolean(null===(r=e.getBreakoutRooms())||void 0===r?void 0:r.isBreakoutRoom()),c=e.myUserId(),l=e.getMeetingUniqueId();this._trace=Qn(a),this._trace.connect(d);const h={...t,endpointId:c,confName:n,displayName:i,meetingUniqueId:l,isBreakoutRoom:d};this.sendIdentity(h)})),e.once(he,(e=>{this.sendIdentity({meetingUniqueId:e})})),e.once(le,(()=>{this.reset()}))):oi.error("Calling start before RTCStats proxy module is initialized."))}sendIdentity(e){var t;null===(t=this._trace)||void 0===t||t.identity("identity",null,e)}reset(){var e;null===(e=this._trace)||void 0===e||e.close(),this._trace=null}sendStatsEntry(e,t,n){var i;null===(i=this._trace)||void 0===i||i.statsEntry(e,t,n)}};n(478);class ai extends ni{constructor(){var e,t;super(...arguments),t={},(e="_storage")in this?Object.defineProperty(this,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):this[e]=t}clear(){this._storage={}}get length(){return Object.keys(this._storage).length}getItem(e){return this._storage[e]}setItem(e,t){this._storage[e]=t}removeItem(e){delete this._storage[e]}key(e){const t=Object.keys(this._storage);if(!(t.length<=e))return t[e]}serialize(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(0===e.length)return JSON.stringify(this._storage);const t={...this._storage};return e.forEach((e=>{delete t[e]})),JSON.stringify(t)}}const di=new class extends ni{constructor(){super();try{this._storage=window.localStorage,this._localStorageDisabled=!1}catch(e){}this._storage||(console.warn("Local storage is disabled."),this._storage=new ai,this._localStorageDisabled=!0)}isLocalStorageDisabled(){return this._localStorageDisabled}setLocalStorageDisabled(e){this._localStorageDisabled=e;try{this._storage=e?new ai:window.localStorage}catch(e){}this._storage||(this._storage=new ai)}clear(){this._storage.clear(),this.emit("changed")}get length(){return this._storage.length}getItem(e){return this._storage.getItem(e)}setItem(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this._storage.setItem(e,t),n||this.emit("changed")}removeItem(e){this._storage.removeItem(e),this.emit("changed")}key(e){return this._storage.key(e)}serialize(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(this.isLocalStorageDisabled())return this._storage.serialize(e);const t=this._storage.length,n={};for(let i=0;i=14||this._getIOSVersion()>=14}isUserInteractionRequiredForUnmute(){return this.isFirefox()&&this.isVersionLessThan("68")}supportsVideoMuteOnConnInterrupted(){return this.isChromiumBased()&&this.isVersionLessThan("144")||this.isReactNative()}supportsBandwidthStatistics(){return!this.isFirefox()&&!this.isWebKitBased()}supportsCodecPreferences(){return Boolean(window.RTCRtpTransceiver&&"setCodecPreferences"in window.RTCRtpTransceiver.prototype&&window.RTCRtpReceiver&&void 0!==window.RTCRtpReceiver.getCapabilities)&&!this.isWebKitBased()}supportsDDExtHeaders(){return!this.isFirefox()}supportsDeviceChangeEvent(){return navigator.mediaDevices&&void 0!==navigator.mediaDevices.ondevicechange&&void 0!==navigator.mediaDevices.addEventListener}supportsPerformanceObserver(){return void 0!==window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes.indexOf("longtask")>-1}supportsReceiverStats(){return void 0!==window.RTCRtpReceiver&&Object.keys(RTCRtpReceiver.prototype).indexOf("getSynchronizationSources")>-1}supportsRTTStatistics(){return!this.isFirefox()}supportsScalabilityModeAPI(){return this.isChromiumBased()&&this.isEngineVersionGreaterThan(112)}supportsTrackBasedStats(){return this.isChromiumBased()&&this.isEngineVersionLessThan(112)}supportsVP9(){return this.isChromiumBased()||this.isReactNative()}usesSdpMungingForSimulcast(){return this.isChromiumBased()||this.isReactNative()||this.isWebKitBased()}usesRidsForSimulcast(){return!1}supportsGetDisplayMedia(){return void 0!==navigator.getDisplayMedia||void 0!==navigator.mediaDevices&&void 0!==navigator.mediaDevices.getDisplayMedia}supportsEncodedTransform(){return Boolean(window.RTCRtpScriptTransform)}supportsInsertableStreams(){if(void 0===window.RTCRtpSender||!window.RTCRtpSender.prototype.createEncodedStreams)return!1;const e=new ReadableStream;try{return window.postMessage(e,"*",[e]),!0}catch{return!1}}supportsAudioRed(){return Boolean(window.RTCRtpSender&&window.RTCRtpSender.getCapabilities&&window.RTCRtpSender.getCapabilities("audio").codecs.some((e=>"audio/red"===e.mimeType))&&window.RTCRtpReceiver&&window.RTCRtpReceiver.getCapabilities&&window.RTCRtpReceiver.getCapabilities("audio").codecs.some((e=>"audio/red"===e.mimeType)))}supportsVADDetection(){return this.isChromiumBased()}supportsRTX(){return!(this.isFirefox()&&this.isVersionLessThan("96"))}_getSafariVersion(){return this.isSafari()?Number.parseInt(this.getVersion(),10):-1}_getIOSVersion(){return this.isWebKitBased()?Number.parseInt(this.getOSVersion(),10):-1}};var li=n(803),hi=n.n(li);const ui=S().getLogger("modules/watchRTC/WatchRTC.ts"),pi=new class{init(e){if(function(e){var t;const{analytics:n}=e;return null!==(t=null==n?void 0:n.watchRTCEnabled)&&void 0!==t&&t}(e)){if(ci.isReactNative())return void ui.warn("Cannot initialize WatchRTC in a react native environment!");if(!function(e){const{analytics:t,disableThirdPartyRequests:n}=e;return!(null!=t&&t.disabled||n)}(e))return void ui.error("Cannot initialize WatchRTC when analytics or third party requests are disabled.");try{var t;null!=e&&null!==(t=e.watchRTCConfigParams)&&void 0!==t&&t.rtcApiKey?(hi().init({rtcApiKey:e.watchRTCConfigParams.rtcApiKey}),this.options=e.watchRTCConfigParams,ui.info("WatchRTC initialized.")):ui.error("WatchRTC is enabled but missing API key.")}catch(e){ui.error("Failed to initialize WatchRTC: ",e)}}}start(e,t){try{this.options&&(this.options.rtcRoomId=this.options.rtcRoomId?this.options.rtcRoomId:e,this.options.rtcPeerId=this.options.rtcPeerId?this.options.rtcPeerId:t,hi().setConfig(this.options),ui.info("WatchRTC setConfig."))}catch(e){ui.error("Failed to start WatchRTC session: ",e)}}},mi=(0,E.getLogger)("modules/statistics/AnalyticsAdapter.js"),gi=new class{constructor(){this.reset()}reset(){this.disposed=!1,this.analyticsHandlers=new Set,this.cache=[],this.permanentProperties={},this.conferenceName="",this.addPermanentProperties({user_agent:navigator.userAgent,browser_name:ci.getName()})}dispose(){mi.debug("Disposing of analytics adapter."),this.analyticsHandlers&&this.analyticsHandlers.size>0&&this.analyticsHandlers.forEach((e=>{"function"==typeof e.dispose&&e.dispose()})),this.setAnalyticsHandlers([]),this.disposed=!0}setAnalyticsHandlers(e){if(this.disposed)return;this.analyticsHandlers=new Set(e),this._setUserProperties();const t=this.cache;this.cache=null,t&&t.forEach((e=>this._sendEvent(e)))}_setUserProperties(){this.analyticsHandlers.forEach((e=>{try{e.setUserProperties(this.permanentProperties)}catch(e){mi.warn(`Error in setUserProperties method of one of the analytics handlers: ${e}`)}}))}addPermanentProperties(e){this.permanentProperties={...this.permanentProperties,...e},this._setUserProperties()}setConferenceName(e){this.conferenceName=e,this.addPermanentProperties({conference_name:e})}sendEvent(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.disposed)return;let n=null;"string"==typeof e?n={type:Nt,action:e,actionSubject:e,source:e,attributes:t}:"object"==typeof e&&(n=e),this._verifyRequiredFields(n)?this._sendEvent(n):mi.error(`Dropping a mis-formatted event: ${JSON.stringify(n)}`)}_verifyRequiredFields(e){if(!e)return!1;e.type||(e.type=Nt);const t=e.type;return t!==Nt&&t!==Mt&&t!==Ft&&t!==Lt?(mi.error(`Unknown event type: ${t}`),!1):t===Mt?Boolean(e.name):(e.action=e.action||e.name||e.actionSubject,e.actionSubject=e.actionSubject||e.name||e.action,e.source=e.source||e.name||e.action||e.actionSubject,e.action&&e.actionSubject&&e.source?!!(t!==Lt||(e.objectType=e.objectType||"generic-object-type",e.containerType=e.containerType||"conference","conference"!==e.containerType||e.containerId||(e.containerId=this.conferenceName),e.objectType&&e.objectId&&e.containerType&&e.containerId))||(mi.error("Required field missing (containerId, containerType, objectId or objectType)"),!1):(mi.error("Required field missing (action, actionSubject or source)"),!1))}_maybeCacheEvent(e){return!!this.cache&&(this.cache.push(e),this.cache.length>100&&this.cache.splice(0,1),!0)}_sendEvent(e){this._maybeCacheEvent(e)||this.analyticsHandlers.forEach((t=>{try{t.sendEvent(e)}catch(e){mi.warn(`Error sending analytics event: ${e}`)}}))}},fi=n(810).getLogger("modules/statistics/LocalStatsCollector.js");window.AudioContext=window.AudioContext||window.webkitAudioContext;let vi=null;function _i(e,t,n){this.stream=e,this.intervalId=null,this.intervalMilis=t,this.audioLevel=0,this.callback=n,this.source=null,this.analyser=null}function yi(e){let t=e;return e>=Number.MAX_SAFE_INTEGER&&(t=0),t+1}function Ei(e){return e.length>0?e.reduce(((e,t)=>e+t))/e.length:0}function Si(e){return e.filter((e=>e>=0))}_i.prototype.start=function(){_i.isLocalStatsSupported()&&(vi.resume(),this.analyser=vi.createAnalyser(),this.analyser.smoothingTimeConstant=.8,this.analyser.fftSize=2048,this.source=vi.createMediaStreamSource(this.stream),this.source.connect(this.analyser),this.intervalId=setInterval((()=>{const e=new Uint8Array(this.analyser.frequencyBinCount);this.analyser.getByteTimeDomainData(e);const t=function(e){let t=0;const n=e.length;for(let i=0;i.2?t-.2:i<-.4?t+.4:e,parseFloat(n.toFixed(3))}(t,this.audioLevel),this.callback(this.audioLevel)}),this.intervalMilis))},_i.prototype.stop=function(){var e,t;this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),null===(e=this.analyser)||void 0===e||e.disconnect(),this.analyser=null,null===(t=this.source)||void 0===t||t.disconnect(),this.source=null},_i.init=function(){_i.connectAudioContext()},_i.isLocalStatsSupported=function(){var e;return Boolean(null===(e=window)||void 0===e?void 0:e.AudioContext)},_i.disconnectAudioContext=async function(){vi&&(fi.info("Disconnecting audio context"),await vi.close(),vi=null)},_i.connectAudioContext=function(){_i.isLocalStatsSupported()&&(fi.info("Connecting audio context"),vi=new AudioContext,vi.suspend())};class bi{constructor(){this.average=0,this.n=0}addNext(e){"number"==typeof e&&(this.n+=1,this.average=this.average+(e-this.average)/this.n)}getAverage(){return this.average}}function Ti(e,t){return isNaN(e)||isNaN(t)?0:e-t}const Ci=(0,E.getLogger)("modules/statistics/PerformanceObserverStats.js");class xi{constructor(e,t){this.eventEmitter=e,this.longTasks=0,this.maxDuration=0,this.performanceStatsInterval=t,this.stats=new bi}getLongTasksStats(){return{avgRatePerMinute:(60*this.stats.getAverage()).toFixed(2),maxDurationMs:this.maxDuration}}startObserver(){this.longTaskEventHandler=e=>{const t=e.getEntries();for(const e of t)this.longTasks++,this.maxDuration=Math.max(this.maxDuration,e.duration).toFixed(3)},Ci.info("Creating a Performance Observer for monitoring Long Tasks"),this.observer=new PerformanceObserver(this.longTaskEventHandler),this.observer.observe({type:"longtask",buffered:!0});const e=Date.now();this.longTasksIntervalId=setInterval((()=>{const t=Date.now(),n=this._lastTimeStamp?(t-this._lastTimeStamp)/1e3:(t-e)/1e3,i=this.longTasks/n;this.stats.addNext(i),this.eventEmitter.emit(vn,this.getLongTasksStats()),this.longTasks=0,this._lastTimeStamp=Date.now()}),this.performanceStatsInterval)}stopObserver(){this.observer&&this.observer.disconnect(),this.longTaskEventHandler=null,this.longTasksIntervalId&&(clearInterval(this.longTasksIntervalId),this.longTasksIntervalId=null)}}let Ri;!function(e){e.AUDIO="audio",e.VIDEO="video"}(Ri||(Ri={}));const Ai=new class{init(e){this._runInLiteMode=Boolean(e.runInLiteMode),this._ssrcRewriting=Boolean(e.ssrcRewritingEnabled)}isRunInLiteModeEnabled(){return this._runInLiteMode&&ci.supportsInsertableStreams()}isSsrcRewritingSupported(){return this._ssrcRewriting}},wi=(0,E.getLogger)("modules/statistics/RTPStatsCollector.js");function Ii(e,t){return e>0&&t>0?Math.round(e/t*100):0}function Pi(){this.loss={},this.bitrate={download:0,upload:0},this.resolution={},this.framerate=0,this.codec=""}function Di(){this.bandwidth={},this.bitrate={},this.packetLoss=null,this.transport=[]}function Oi(e,t,n,i){this.peerconnection=e,this.currentStatsReport=null,this.previousStatsReport=null,this.audioLevelReportHistory={},this.audioLevelsIntervalId=null,this.eventEmitter=i,this.conferenceStats=new Di,this.audioLevelsIntervalMilis=t,this.speakerList=[],this.statsIntervalId=null,this.statsIntervalMilis=n,this.ssrc2stats=new Map}Pi.prototype.setLoss=function(e){this.loss=e||{}},Pi.prototype.setResolution=function(e){this.resolution=e||{}},Pi.prototype.addBitrate=function(e){this.bitrate.download+=e.download,this.bitrate.upload+=e.upload},Pi.prototype.resetBitrate=function(){this.bitrate.download=0,this.bitrate.upload=0},Pi.prototype.setFramerate=function(e){this.framerate=e||0},Pi.prototype.setCodec=function(e){this.codec=e||""},Pi.prototype.setFramesDecoded=function(e){this.framesDecoded="number"==typeof e?e:void 0},Oi.prototype.setSpeakerList=function(e){this.speakerList=e},Oi.prototype.stop=function(){this.audioLevelsIntervalId&&(clearInterval(this.audioLevelsIntervalId),this.audioLevelsIntervalId=null),this.statsIntervalId&&(clearInterval(this.statsIntervalId),this.statsIntervalId=null)},Oi.prototype.errorCallback=function(e){wi.error("Get stats error",e),this.stop()},Oi.prototype.start=function(e){e&&ci.supportsReceiverStats()&&(this.audioLevelsIntervalId=setInterval((()=>{const e=this.peerconnection.getAudioLevels(this.speakerList);for(const t in e)if(e.hasOwnProperty(t)){const n=2.5*e[t];this.eventEmitter.emit(pn,this.peerconnection,Number.parseInt(t,10),n,!1)}}),this.audioLevelsIntervalMilis));const t=()=>{this.peerconnection.getStats().then((e=>{this.currentStatsReport="function"==typeof(null==e?void 0:e.result)?e.result():e;try{this.processStatsReport()}catch(e){wi.error("Processing of RTP stats failed:",e)}this.previousStatsReport=this.currentStatsReport})).catch((e=>this.errorCallback(e)))};t(),this.statsIntervalId=setInterval(t,this.statsIntervalMilis)},Oi.prototype._processAndEmitReport=function(){const e={download:0,upload:0},t={download:0,upload:0};let n=0,i=0;const r={},o={},s={};let a=0,d=0,c=0,l=0;const h=new Map;for(const[m,g]of this.ssrc2stats){var u;const f=g.loss,v=f.isDownloadStream?"download":"upload";e[v]+=f.packetsTotal,t[v]+=f.packetsLost;const _=g.bitrate.download,y=g.bitrate.upload;n+=_,i+=y,g.resetBitrate();const E=this.peerconnection.getTrackBySSRC(m);if(!E)continue;let S,b;f.isDownloadStream&&!E.isLocal()&&E.isVideoTrack()&&"number"==typeof g.framesDecoded&&h.set(m,g.framesDecoded),E.isAudioTrack()?(a+=_,d+=y,S=g.codec):(c+=_,l+=y,b=g.codec);const T=E.getParticipantId();if(!T){Ai.isSsrcRewritingSupported()||wi.error(`No participant ID returned by ${E}`);continue}const C=null!==(u=s[T])&&void 0!==u?u:{};C[m]={audio:S,video:b},s[T]=C;const{resolution:x}=g;if(!E.isVideoTrack()||isNaN(null==x?void 0:x.height)||isNaN(null==x?void 0:x.width)||-1===x.height||-1===x.width)continue;const R=r[T]||{};if(E.isLocal()&&!ci.supportsTrackBasedStats()&&this.peerconnection.doesTrueSimulcast()){const e=this.peerconnection.getLocalVideoSSRCs(E);for(const t of e){var p;const e=null===(p=this.ssrc2stats.get(t))||void 0===p?void 0:p.resolution;null!=e&&e.height&&null!=e&&e.width&&(x.height=Math.max(x.height,e.height),x.width=Math.max(x.width,e.width))}}if(R[m]=x,r[T]=R,g.framerate>0){const e=o[T]||{};e[m]=g.framerate,o[T]=e}}this.conferenceStats.bitrate={upload:i,download:n},this.conferenceStats.bitrate.audio={upload:d,download:a},this.conferenceStats.bitrate.video={upload:l,download:c},this.conferenceStats.packetLoss={total:Ii(t.download+t.upload,e.download+e.upload),download:Ii(t.download,e.download),upload:Ii(t.upload,e.upload)};const m={};let g;Object.keys(this.audioLevelReportHistory).forEach((e=>{const{data:t,isLocal:n}=this.audioLevelReportHistory[e],i=t.reduce(((e,t)=>e+t))/t.length;if(n)g=i;else{const t=this.peerconnection.getTrackBySSRC(Number(e));if(t){const e=t.getParticipantId();e&&(m[e]=i)}}})),this.audioLevelReportHistory={},this.eventEmitter.emit(fn,this.peerconnection,{bandwidth:this.conferenceStats.bandwidth,bitrate:this.conferenceStats.bitrate,codec:s,framerate:o,framesDecoded:h,localAvgAudioLevels:g,avgAudioLevels:m,packetLoss:this.conferenceStats.packetLoss,resolution:r,transport:this.conferenceStats.transport}),this.conferenceStats.transport=[]},Oi.prototype.getNonNegativeValue=function(e){let t=e;return"number"!=typeof t&&(t=Number(t)),isNaN(t)?0:Math.max(0,t)},Oi.prototype._calculateBitrate=function(e,t,n){const i=this.getNonNegativeValue(e[n]),r=this.getNonNegativeValue(t[n]),o=Math.max(0,i-r),s=e.timestamp-t.timestamp;let a=0;return s>0&&(a=Math.round(8*o/s)),a},Oi.prototype._calculateFps=function(e,t,n){const i=e.timestamp-t.timestamp;let r=0;return i>0&&e[n]&&(r=(e[n]-t[n])/i*1e3),r},Oi.prototype.processStatsReport=function(){const e={};this.currentStatsReport.forEach((t=>{const n=this.previousStatsReport?this.previousStatsReport.get(t.id):null;if("candidate-pair"===t.type&&t.nominated&&"succeeded"===t.state){const e=t.availableIncomingBitrate,n=t.availableOutgoingBitrate;(e||n)&&(this.conferenceStats.bandwidth={download:Math.round(e/1e3),upload:Math.round(n/1e3)});const i=this.currentStatsReport.get(t.remoteCandidateId),r=this.currentStatsReport.get(t.localCandidateId);if(i&&r){const e=`${ci.isChromiumBased()?i.ip:i.address}:${i.port}`,n=`${ci.isChromiumBased()?r.ip:r.address}:${r.port}`,o=i.protocol,s=this.conferenceStats.transport;s.some((t=>t.ip===e&&t.type===o&&t.localip===n))||s.push({ip:e,type:o,localip:n,p2p:this.peerconnection.isP2P,localCandidateType:r.candidateType,remoteCandidateType:i.candidateType,networkType:r.networkType,rtt:1e3*t.currentRoundTripTime})}}else if("inbound-rtp"===t.type||"outbound-rtp"===t.type){const r=this.getNonNegativeValue(t.ssrc);if(!r)return;let o=this.ssrc2stats.get(r);o||(o=new Pi,this.ssrc2stats.set(r,o));let s=!0,a="packetsReceived";"outbound-rtp"===t.type&&(s=!1,a="packetsSent");let d,c=t[a];if((!c||c<0)&&(c=0),n){const e=this.getNonNegativeValue(n[a]),i=Math.max(0,c-e),r=this.getNonNegativeValue(t.packetsLost),d=this.getNonNegativeValue(n.packetsLost),l=Math.max(0,r-d);o.setLoss({packetsTotal:i+l,packetsLost:l,isDownloadStream:s})}if(void 0!==t.frameHeight&&void 0!==t.frameWidth){var i;const e=null===(i=t.active)||void 0===i||i;("inbound-rtp"===t.type||!ci.supportsTrackBasedStats()&&e)&&(d={height:t.frameHeight,width:t.frameWidth})}o.setResolution(d);let l=t.framesPerSecond;!l&&n&&(l=this._calculateFps(t,n,"framesSent")),o.setFramerate(Math.round(l||0)),"inbound-rtp"===t.type&&n&&o.addBitrate({download:this._calculateBitrate(t,n,"bytesReceived"),upload:0}),"inbound-rtp"===t.type&&"number"==typeof t.framesDecoded&&o.setFramesDecoded(t.framesDecoded),"inbound-rtp"!==t.type&&n&&(e[r]=this.getNonNegativeValue(t.bytesSent),o.addBitrate({download:0,upload:this._calculateBitrate(t,n,"bytesSent")}));const h=this.currentStatsReport.get(t.codecId);if(h){const e=h.mimeType.split("/")[1];e&&o.setCodec(e)}}else if(ci.supportsTrackBasedStats()&&"track"===t.type&&t.kind===Ri.VIDEO&&!t.remoteSource){const e={height:t.frameHeight,width:t.frameWidth},i=this.peerconnection.getLocalTracks(Ri.VIDEO);if(null==i||!i.length)return;const r=this.peerconnection.getSsrcByTrackId(t.trackIdentifier);if(!r)return;let o=this.ssrc2stats.get(r);o||(o=new Pi,this.ssrc2stats.set(r,o)),e.height&&e.width&&o.setResolution(e);let s=t.framesPerSecond;!s&&n&&(s=this._calculateFps(t,n,"framesSent")),o.setFramerate(s)}})),Object.keys(e).length&&this.eventEmitter.emit(gn,this.peerconnection,e),this._processAndEmitReport()};const ki=n(810).getLogger("modules/statistics/statistics.js");let Ni;function Mi(e,t){this.rtpStatsMap=new Map,this.eventEmitter=new ii,this.conference=e,this.xmpp=null==e?void 0:e.xmpp,this.options=t||{},Mi.instances.add(this),si.start(this.conference),ci.isReactNative()||pi.start(this.options.roomName,this.options.userName)}Mi.init=function(e){Mi.audioLevelsEnabled=!e.disableAudioLevels,"number"==typeof e.pcStatsInterval&&(Mi.pcStatsInterval=e.pcStatsInterval),"number"==typeof e.audioLevelsInterval&&(Mi.audioLevelsInterval=e.audioLevelsInterval),"number"==typeof e.longTasksStatsInterval&&(Mi.longTasksStatsInterval=e.longTasksStatsInterval),Mi.disableThirdPartyRequests=e.disableThirdPartyRequests,_i.init(),pi.init(e),si.init(e)},Mi.audioLevelsEnabled=!1,Mi.audioLevelsInterval=200,Mi.pcStatsInterval=1e4,Mi.disableThirdPartyRequests=!1,Mi.analytics=gi,Object.defineProperty(Mi,"instances",{get:()=>(Ni||(Ni=new Set),Ni)}),Mi.prototype.startRemoteStats=function(e){this.stopRemoteStats(e);try{const t=new Oi(e,Mi.audioLevelsInterval,Mi.pcStatsInterval,this.eventEmitter);t.start(Mi.audioLevelsEnabled),this.rtpStatsMap.set(e.id,t)}catch(e){ki.error(`Failed to start collecting remote statistics: ${e}`)}},Mi.localStats=[],Mi.startLocalStats=function(e,t){if(ci.isIosBrowser()&&e.addEventListener(bt.NO_DATA_FROM_SOURCE,(async e=>{if(e){for(const e of Mi.localStats)e.stop();await _i.disconnectAudioContext()}else{_i.connectAudioContext();for(const e of Mi.localStats)e.start()}})),!Mi.audioLevelsEnabled)return;e.addEventListener(bt.LOCAL_TRACK_STOPPED,(()=>{Mi.stopLocalStats(e)}));const n=new _i(e.getOriginalStream(),Mi.audioLevelsInterval,t);this.localStats.push(n),n.start()},Mi.prototype.addAudioLevelListener=function(e){Mi.audioLevelsEnabled&&this.eventEmitter.on(pn,e)},Mi.prototype.removeAudioLevelListener=function(e){Mi.audioLevelsEnabled&&this.eventEmitter.removeListener(pn,e)},Mi.prototype.addBeforeDisposedListener=function(e){this.eventEmitter.on(mn,e)},Mi.prototype.removeBeforeDisposedListener=function(e){this.eventEmitter.removeListener(mn,e)},Mi.prototype.addConnectionStatsListener=function(e){this.eventEmitter.on(fn,e)},Mi.prototype.removeConnectionStatsListener=function(e){this.eventEmitter.removeListener(fn,e)},Mi.prototype.addByteSentStatsListener=function(e){this.eventEmitter.on(gn,e)},Mi.prototype.removeByteSentStatsListener=function(e){this.eventEmitter.removeListener(gn,e)},Mi.prototype.addLongTasksStatsListener=function(e){this.eventEmitter.on(vn,e)},Mi.prototype.attachLongTasksStats=function(){ci.supportsPerformanceObserver()?(this.performanceObserverStats=new xi(this.eventEmitter,Mi.longTasksStatsInterval),this.conference.on(ce,(()=>this.performanceObserverStats.startObserver())),this.conference.on(le,(()=>this.performanceObserverStats.stopObserver()))):ki.warn("Performance observer for long tasks not supported by browser!")},Mi.prototype.getLongTasksStats=function(){return this.performanceObserverStats?this.performanceObserverStats.getLongTasksStats():null},Mi.prototype.removeLongTasksStatsListener=function(e){this.eventEmitter.removeListener(vn,e)},Mi.prototype.setSpeakerList=function(e){for(const t of Array.from(this.rtpStatsMap.values()))t.peerconnection.isP2P||t.setSpeakerList(e)},Mi.prototype.dispose=function(){try{this.eventEmitter.emit(mn);for(const e of this.rtpStatsMap.keys())this._stopRemoteStats(e);this.eventEmitter&&this.eventEmitter.removeAllListeners()}finally{Mi.instances.delete(this)}},Mi.stopLocalStats=function(e){if(!Mi.audioLevelsEnabled)return;const t=e.getOriginalStream();for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:{};e?(t="object"==typeof e?e:{name:e,properties:n},ki.log(JSON.stringify(t)),this.analytics.sendEvent(e,n)):ki.warn("No event or event name given.")},Mi.sendAnalytics=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.analytics.sendEvent(e,t)};var Li=n(832),Fi=n.n(Li),ji=n(987),Vi=n(514),Ui=n.n(Vi),Hi=n(609);const $i=(0,E.getLogger)("JitsiConferenceEventManager.js");function Ji(e){this.conference=e,this.xmppListeners={}}Ji.prototype.setupChatRoomListeners=function(){const e=this.conference,t=e.room;this.chatRoomForwarder=new(Fi())(t,this.conference.eventEmitter),t.addListener(Hi.XMPPEvents.ICE_RESTARTING,(t=>{t.isP2P||e.rtc.closeBridgeChannel()})),t.addListener(Hi.XMPPEvents.PARTICIPANT_FEATURES_CHANGED,((t,n)=>{const i=e.getParticipantById(St.Strophe.getResourceFromJid(t));i&&(i.setFeatures(n),e.eventEmitter.emit(Be,i))})),t.addListener(Hi.XMPPEvents.ICE_RESTART_SUCCESS,((t,n)=>{!t.isP2P&&e._setBridgeChannel(n,t.peerconnection)})),t.addListener(Hi.XMPPEvents.AUDIO_MUTED_BY_FOCUS,(t=>{Mi.sendAnalytics(ln(Ri.AUDIO)),e.mutedByFocusActor=t,e.rtc.setAudioMute(!0).then((()=>{e.isMutedByFocus=!0,e.mutedByFocusActor=null})).catch((t=>{e.mutedByFocusActor=null,$i.warn("Error while audio muting due to focus request",t)}))})),t.addListener(Hi.XMPPEvents.VIDEO_MUTED_BY_FOCUS,(t=>{Mi.sendAnalytics(ln(Ri.VIDEO)),e.mutedVideoByFocusActor=t,e.rtc.setVideoMute(!0).then((()=>{e.isVideoMutedByFocus=!0,e.mutedVideoByFocusActor=null})).catch((t=>{e.mutedVideoByFocusActor=null,$i.warn("Error while video muting due to focus request",t)}))})),this.chatRoomForwarder.forward(Hi.XMPPEvents.SUBJECT_CHANGED,Qe),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_JOINED,ce),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_JOIN_IN_PROGRESS,de),this.chatRoomForwarder.forward(Hi.XMPPEvents.MEETING_ID_SET,he),this.chatRoomForwarder.forward(Hi.XMPPEvents.CONFERENCE_TIMESTAMP_RECEIVED,oe),t.addListener(Hi.XMPPEvents.MUC_JOINED,(()=>{this.conference._onMucJoined(),this.conference.isJvbConnectionInterrupted=!1,Object.keys(t.connectionTimes).forEach((e=>{const n=sn(`conference_${e}`,{value:t.connectionTimes[e]});Mi.sendAnalytics(n)})),Object.keys(t.xmpp.connectionTimes).forEach((e=>{const n=sn(`xmpp_${e}`,{value:t.xmpp.connectionTimes[e]});Mi.sendAnalytics(n)}))})),t.addListener(Hi.XMPPEvents.RENEGOTIATION_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)})),t.addListener(Ot,(t=>{e.eventEmitter.emit(rt,t)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_JOIN_ERROR,ae,w),this.chatRoomForwarder.forward(Hi.XMPPEvents.DISPLAY_NAME_REQUIRED,ae,k),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_CONNECT_ERROR,ae,w),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_CONNECT_NOT_ALLOWED_ERROR,ae,P),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_CONNECT_MEMBERS_ONLY_ERROR,ae,D),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_MAX_USERS_ERROR,ae,A),this.chatRoomForwarder.forward(Hi.XMPPEvents.PASSWORD_REQUIRED,ae,H),this.chatRoomForwarder.forward(Hi.XMPPEvents.AUTHENTICATION_REQUIRED,ae,T),this.chatRoomForwarder.forward(Hi.XMPPEvents.BRIDGE_DOWN,ae,J),t.addListener(Hi.XMPPEvents.BRIDGE_DOWN,(()=>Mi.sendAnalytics({action:"bridge.down",actionSubject:"bridge.down",type:Nt}))),t.addListener(Hi.XMPPEvents.CONNECTION_RESTARTED,(t=>{e._onConferenceRestarted(t)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.RESERVATION_ERROR,ae,$),this.chatRoomForwarder.forward(Hi.XMPPEvents.GRACEFUL_SHUTDOWN,ae,L),t.addListener(Hi.XMPPEvents.CONNECTION_ICE_FAILED,(t=>{e._onIceConnectionFailed(t)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_DESTROYED,ae,R),this.chatRoomForwarder.forward(Hi.XMPPEvents.CHAT_ERROR_RECEIVED,se,C),this.chatRoomForwarder.forward(Hi.XMPPEvents.SETTINGS_ERROR_RECEIVED,se,x),this.chatRoomForwarder.forward(Hi.XMPPEvents.FOCUS_DISCONNECTED,ae,N),t.addListener(Hi.XMPPEvents.FOCUS_LEFT,(()=>{Mi.sendAnalytics({action:"focus.left",actionSubject:"focus.left",type:kt.TYPE_OPERATIONAL}),e.eventEmitter.emit(ae,M)})),t.addListener(Hi.XMPPEvents.SESSION_ACCEPT_TIMEOUT,(e=>{Mi.sendAnalyticsAndLog(dn(Vt,{p2p:e.isP2P}))})),t.addListener(Hi.XMPPEvents.RECORDER_STATE_CHANGED,((t,n)=>{if(n){const i=St.Strophe.getResourceFromJid(n),r=e.getParticipantById(i)||i;"off"===t.getStatus()?t.setTerminator(r):"on"===t.getStatus()&&t.setInitiator(r)}e.eventEmitter.emit(Ke,t)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.TRANSCRIPTION_STATUS_CHANGED,st),this.chatRoomForwarder.forward(Hi.XMPPEvents.VIDEO_SIP_GW_AVAILABILITY_CHANGED,ht),this.chatRoomForwarder.forward(Hi.XMPPEvents.VIDEO_SIP_GW_SESSION_STATE_CHANGED,ut),this.chatRoomForwarder.forward(Hi.XMPPEvents.PHONE_NUMBER_CHANGED,Ge),t.setParticipantPropertyListener(((t,n)=>{const i=e.getParticipantById(n);i&&i.setProperty(t.tagName.substring("jitsi_participant_".length),t.value)})),t.addListener(Hi.XMPPEvents.KICKED,e.onMemberKicked.bind(e)),t.addListener(Hi.XMPPEvents.SUSPEND_DETECTED,e.onSuspendDetected.bind(e)),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LOCK_CHANGED,ke),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_MEMBERS_ONLY_CHANGED,Ne),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_VISITORS_SUPPORTED_CHANGED,mt),t.addListener(Hi.XMPPEvents.MUC_MEMBER_JOINED,e.onMemberJoined.bind(e)),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LOBBY_MEMBER_JOINED,Pe),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LOBBY_MEMBER_UPDATED,Oe),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LOBBY_MEMBER_LEFT,De),t.addListener(Hi.XMPPEvents.MUC_MEMBER_BOT_TYPE_CHANGED,e._onMemberBotTypeChanged.bind(e)),t.addListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,e.onMemberLeft.bind(e)),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LEFT,le),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_DENIED_ACCESS,ae,O),t.addListener(Hi.XMPPEvents.DISPLAY_NAME_CHANGED,e.onDisplayNameChanged.bind(e)),t.addListener(Hi.XMPPEvents.LOCAL_ROLE_CHANGED,(t=>{e.onLocalRoleChanged(t)})),t.addListener(Hi.XMPPEvents.MUC_ROLE_CHANGED,e.onUserRoleChanged.bind(e)),t.addListener(Ui().IDENTITY_UPDATED,((t,n)=>{e.authEnabled=t,e.authIdentity=n,e.eventEmitter.emit(W,t,n)})),t.addListener(Hi.XMPPEvents.MESSAGE_RECEIVED,((t,n,i,r,o,s)=>{const a=St.Strophe.getResourceFromJid(t);e.eventEmitter.emit(Me,a,n,r,o,s)})),t.addListener(Hi.XMPPEvents.PRIVATE_MESSAGE_RECEIVED,((t,n,i,r)=>{const o=St.Strophe.getResourceFromJid(t);e.eventEmitter.emit(Je,o,n,r)})),t.addListener(Hi.XMPPEvents.PRESENCE_STATUS,((t,n)=>{const i=St.Strophe.getResourceFromJid(t),r=e.getParticipantById(i);r&&r._status!==n&&(r._status=n,e.eventEmitter.emit(lt,i,n))})),t.addListener(Hi.XMPPEvents.JSON_MESSAGE_RECEIVED,((t,n)=>{const i=St.Strophe.getResourceFromJid(t),r=e.getParticipantById(i);r?e.eventEmitter.emit(Ce,r,n):e.eventEmitter.emit(Ve,i,n)})),t.addPresenceListener("startmuted",((t,n)=>{if(e.myUserId()===n)return;const i=e.getParticipantById(n);if(!i||!i.isModerator())return;const r="true"===t.attributes.audio,o="true"===t.attributes.video;let s=!1;r!==e.startMutedPolicy.audio&&(e.startMutedPolicy.audio=r,s=!0),o!==e.startMutedPolicy.video&&(e.startMutedPolicy.video=o,s=!0),s&&e.eventEmitter.emit(Xe,e.startMutedPolicy)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.BREAKOUT_ROOMS_MOVE_TO_ROOM,ie),this.chatRoomForwarder.forward(Hi.XMPPEvents.BREAKOUT_ROOMS_UPDATED,re),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_METADATA_UPDATED,Le)},Ji.prototype.setupRTCListeners=function(){const e=this.conference,t=e.rtc;t.addListener(ji.default.REMOTE_TRACK_ADDED,e.onRemoteTrackAdded.bind(e)),t.addListener(ji.default.REMOTE_TRACK_REMOVED,e.onRemoteTrackRemoved.bind(e)),t.addListener(ji.default.DOMINANT_SPEAKER_CHANGED,((t,n,i)=>{if((e.lastDominantSpeaker!==t||e.dominantSpeakerIsSilent!==i)&&e.room&&(e.lastDominantSpeaker=t,e.dominantSpeakerIsSilent=i,e.eventEmitter.emit(ye,t,n,i),e.statistics&&e.myUserId()===t&&e.xmpp.sendDominantSpeakerEvent(e.room.roomjid,i),e.lastDominantSpeaker!==t&&n&&n.length)){const i=n.slice(0);e.myUserId!==t&&i.splice(0,0,t),i.length>5&&i.splice(5,i.length-5),e.statistics&&e.statistics.setSpeakerList(i)}})),t.addListener(ji.default.DATA_CHANNEL_OPEN,(()=>{const t=window.performance.now(),n="data.channel.opened";$i.log(`(TIME) ${n}:\\t`,t),e.room.connectionTimes[n]=t,Mi.sendAnalytics(sn(n,{value:t})),e.eventEmitter.emit(ve)})),t.addListener(ji.default.DATA_CHANNEL_CLOSED,(t=>{e.eventEmitter.emit(fe,t)})),t.addListener(ji.default.VIDEO_SSRCS_REMAPPED,(e=>{for(const t of this.conference.getMediaSessions())t.processSourceMap(e,Ri.VIDEO)})),t.addListener(ji.default.AUDIO_SSRCS_REMAPPED,(e=>{for(const t of this.conference.getMediaSessions())t.processSourceMap(e,Ri.AUDIO)})),t.addListener(ji.default.ENDPOINT_MESSAGE_RECEIVED,((t,n)=>{const i=e.getParticipantById(t);i?e.eventEmitter.emit(Ce,i,n):$i.warn(`Ignored ENDPOINT_MESSAGE_RECEIVED for not existing participant: ${t}`,n)})),t.addListener(ji.default.ENDPOINT_STATS_RECEIVED,((t,n)=>{const i=e.getParticipantById(t);i?e.eventEmitter.emit(xe,i,n):$i.warn(`Ignoring ENDPOINT_STATS_RECEIVED for a non-existant participant: ${t}`)})),t.addListener(ji.default.CREATE_ANSWER_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)})),t.addListener(ji.default.CREATE_OFFER_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)})),t.addListener(ji.default.SET_LOCAL_DESCRIPTION_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)})),t.addListener(ji.default.SET_REMOTE_DESCRIPTION_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)}))},Ji.prototype.removeXMPPListeners=function(){const e=this.conference;Object.keys(this.xmppListeners).forEach((t=>{e.xmpp.removeListener(t,this.xmppListeners[t])})),this.xmppListeners={}},Ji.prototype.setupXMPPListeners=function(){const e=this.conference;this._addConferenceXMPPListener(Hi.XMPPEvents.CALL_INCOMING,e.onIncomingCall.bind(e)),this._addConferenceXMPPListener(Hi.XMPPEvents.CALL_ACCEPTED,e.onCallAccepted.bind(e)),this._addConferenceXMPPListener(Hi.XMPPEvents.TRANSPORT_INFO,e.onTransportInfo.bind(e)),this._addConferenceXMPPListener(Hi.XMPPEvents.CALL_ENDED,e.onCallEnded.bind(e)),this._addConferenceXMPPListener(Hi.XMPPEvents.START_MUTED_FROM_FOCUS,((t,n)=>{e.options.config.ignoreStartMuted||(e.startAudioMuted=t,e.startVideoMuted=n,t&&(e.isMutedByFocus=!0),n&&(e.isVideoMutedByFocus=!0),e.getLocalTracks().forEach((t=>{switch(t.getType()){case Ri.AUDIO:e.startAudioMuted&&t.mute();break;case Ri.VIDEO:e.startVideoMuted&&t.mute()}})),e.eventEmitter.emit(Ye))})),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_CHANGED,((t,n,i)=>{const r=e.getParticipants().find((e=>e.getJid()===i));e.eventEmitter.emit(Y,{enabled:t,mediaType:n,actor:r})})),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_PARTICIPANT_APPROVED,((t,n)=>{const i=e.getParticipantById(St.Strophe.getResourceFromJid(n));i&&e.eventEmitter.emit(Q,{participant:i,mediaType:t})})),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_PARTICIPANT_REJECTED,((t,n)=>{const i=e.getParticipantById(St.Strophe.getResourceFromJid(n));i&&e.eventEmitter.emit(Z,{participant:i,mediaType:t})})),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_APPROVED,(t=>e.eventEmitter.emit(X,{mediaType:t}))),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_REJECTED,(t=>{e.eventEmitter.emit(ee,{mediaType:t})})),this._addConferenceXMPPListener(Hi.XMPPEvents.VISITORS_MESSAGE,(t=>e.eventEmitter.emit(gt,t))),this._addConferenceXMPPListener(Hi.XMPPEvents.VISITORS_REJECTION,(()=>e.eventEmitter.emit(ft)))},Ji.prototype._addConferenceXMPPListener=function(e,t){this.xmppListeners[e]=t,this.conference.xmpp.addListener(e,t)},Ji.prototype.setupStatisticsListeners=function(){const e=this.conference;e.statistics&&(e.statistics.addAudioLevelListener(((t,n,i,r)=>{e.rtc.setAudioLevel(t,n,i,r)})),e.statistics.addBeforeDisposedListener((()=>{e.eventEmitter.emit(te)})),e.options.config.startSilent||e.statistics.addByteSentStatsListener(((t,n)=>{e.getLocalTracks(Ri.AUDIO).forEach((e=>{const i=t.getLocalSSRC(e);i&&n.hasOwnProperty(i)&&e.onByteSentStatsReceived(t,n[i])}))})))};class Bi{constructor(e,t,n,i,r,o,s,a,d){this._jid=e,this._id=St.Strophe.getResourceFromJid(e),this._conference=t,this._displayName=n,this._supportsDTMF=!1,this._tracks=[],this._role="none",this._status=o,this._hidden=i,this._statsID=r,this._properties={},this._identity=s,this._isReplacing=a,this._isReplaced=d,this._features=new Set,this._sources=new Map}_isMediaTypeMuted(e){return this.getTracks().reduce(((t,n)=>t&&(n.getType()!==e||n.isMuted())),!0)}_setSources(e,t,n,i){var r;let o=this._sources.get(e);const s={muted:t,videoType:i};null!==(r=o)&&void 0!==r&&r.size?o.set(n,s):(o=new Map,o.set(n,s),this._sources.set(e,o))}getBotType(){return this._botType}getConference(){return this._conference}getConnectionJid(){return this._connectionJid}getDisplayName(){return this._displayName}getFeatures(){return Promise.resolve(this._features)}getId(){return this._id}getIdentity(){return this._identity}getJid(){return this._jid}getProperty(e){return this._properties[e]}getRole(){return this._role}getSources(){return this._sources}getStatsID(){return this._statsID}getStatus(){return this._status}getTracks(){return this._tracks.slice()}getTracksByMediaType(e){return this.getTracks().filter((t=>t.getType()===e))}hasFeature(e){return this._features.has(e)}isAudioMuted(){return this._isMediaTypeMuted(Ri.AUDIO)}isHidden(){return this._hidden}isHiddenFromRecorder(){var e,t;return"true"===(null===(e=this._identity)||void 0===e||null===(t=e.user)||void 0===t?void 0:t["hidden-from-recorder"])}isModerator(){return"moderator"===this._role}isReplaced(){return this._isReplaced}isReplacing(){return this._isReplacing}isVideoMuted(){return this._isMediaTypeMuted(Ri.VIDEO)}setBotType(e){this._botType=e}setConnectionJid(e){this._connectionJid=e}setFeatures(e){this._features=e||new Set}setIsReplaced(e){this._isReplaced=e}setIsReplacing(e){this._isReplacing=e}setProperty(e,t){const n=this._properties[e];t!==n&&(this._properties[e]=t,this._conference.eventEmitter.emit(qe,this,e,n,t))}setRole(e){this._role=e}supportsDTMF(){return this._supportsDTMF}}let qi;!function(e){e.CONSTRAINT_FAILED="gum.constraint_failed",e.ELECTRON_DESKTOP_PICKER_ERROR="gum.electron_desktop_picker_error",e.ELECTRON_DESKTOP_PICKER_NOT_FOUND="gum.electron_desktop_picker_not_found",e.GENERAL="gum.general",e.NOT_FOUND="gum.not_found",e.PERMISSION_DENIED="gum.permission_denied",e.SCREENSHARING_GENERIC_ERROR="gum.screensharing_generic_error",e.SCREENSHARING_USER_CANCELED="gum.screensharing_user_canceled",e.TIMEOUT="gum.timeout",e.TRACK_IS_DISPOSED="track.track_is_disposed",e.TRACK_NO_STREAM_FOUND="track.no_stream_found",e.UNSUPPORTED_RESOLUTION="gum.unsupported_resolution",e.TRACK_TOO_MANY_TRACKS_IN_STREAM="track.too_many_tracks_in_stream",e.TRACK_NO_STREAM_TRACKS_FOUND="track.no_stream_tracks_found"}(qi||(qi={}));const Gi=qi.CONSTRAINT_FAILED,zi=qi.ELECTRON_DESKTOP_PICKER_ERROR,Ki=qi.ELECTRON_DESKTOP_PICKER_NOT_FOUND,Wi=qi.GENERAL,Xi=qi.NOT_FOUND,Yi=qi.PERMISSION_DENIED,Qi=qi.SCREENSHARING_GENERIC_ERROR,Zi=qi.SCREENSHARING_USER_CANCELED,er=qi.TIMEOUT,tr=qi.TRACK_IS_DISPOSED,nr=qi.TRACK_NO_STREAM_FOUND,ir=qi.UNSUPPORTED_RESOLUTION,rr=qi.TRACK_TOO_MANY_TRACKS_IN_STREAM,or=qi.TRACK_NO_STREAM_TRACKS_FOUND,sr={};function ar(e,t,n){if("object"==typeof e&&void 0!==e.name)switch(this.gum={error:e,constraints:t,devices:n&&Array.isArray(n)?n.slice(0):void 0},e.name){case"NotAllowedError":case"PermissionDeniedError":case"SecurityError":this.name=Yi,this.message=sr[this.name]+(this.gum.devices||[]).join(", ");break;case"DevicesNotFoundError":case"NotFoundError":this.name=Xi,this.message=sr[this.name]+(this.gum.devices||[]).join(", ");break;case"ConstraintNotSatisfiedError":case"OverconstrainedError":{const i=e.constraintName||e.constraint;t&&t.video&&(!n||n.indexOf("video")>-1)&&("minWidth"===i||"maxWidth"===i||"minHeight"===i||"maxHeight"===i||"width"===i||"height"===i||"deviceId"===i)?(this.name=ir,this.message=sr[this.name]+function(e,t){if(t&&t.video&&t.video.mandatory)switch(e){case"width":return t.video.mandatory.minWidth;case"height":return t.video.mandatory.minHeight;default:return t.video.mandatory[e]||""}return""}(i,t)):(this.name=Gi,this.message=sr[this.name]+e.constraintName);break}default:this.name=Wi,this.message=e.message||sr[this.name]}else{if("string"!=typeof e)throw new Error("Invalid arguments");sr[e]?(this.name=e,this.message=t||sr[e]):this.message=e}this.stack=e.stack||(new Error).stack}sr[ir]="Video resolution is not supported: ",sr[Zi]="User canceled screen sharing prompt",sr[Qi]="Unknown error from screensharing",sr[zi]="Unkown error from desktop picker",sr[Ki]="Failed to detect desktop picker",sr[Wi]="Generic getUserMedia error",sr[Yi]="User denied permission to use device(s): ",sr[Xi]="Requested device(s) was/were not found: ",sr[Gi]="Constraint could not be satisfied: ",sr[er]="Could not start media source. Timeout occured!",sr[tr]="Track has been already disposed",sr[nr]="Track does not have an associated Media Stream",ar.prototype=Object.create(Error.prototype),ar.prototype.constructor=ar;const dr=ar;let cr;!function(e){e.CONNECTION_DISCONNECTED="connection.connectionDisconnected",e.CONNECTION_ESTABLISHED="connection.connectionEstablished",e.CONNECTION_FAILED="connection.connectionFailed",e.CONNECTION_REDIRECTED="connection.redirected",e.WRONG_STATE="connection.wrongState",e.DISPLAY_NAME_REQUIRED="connection.display_name_required",e.PROPERTIES_UPDATED="connection.propertiesUpdated"}(cr||(cr={}));const lr=cr.CONNECTION_DISCONNECTED,hr=cr.CONNECTION_ESTABLISHED,ur=cr.CONNECTION_FAILED,pr=cr.CONNECTION_REDIRECTED,mr=cr.WRONG_STATE,gr=cr.DISPLAY_NAME_REQUIRED,fr=cr.PROPERTIES_UPDATED;var vr=n(32);function _r(e){return vr.parse(e)}let yr;n(352),function(e){e.CONNECTION_DROPPED_ERROR="connection.droppedError",e.OTHER_ERROR="connection.otherError",e.PASSWORD_REQUIRED="connection.passwordRequired",e.SERVER_ERROR="connection.serverError"}(yr||(yr={}));const Er=yr.CONNECTION_DROPPED_ERROR,Sr=yr.OTHER_ERROR,br=yr.PASSWORD_REQUIRED,Tr=yr.SERVER_ERROR;class Cr{constructor(){var e=this;this.promise=new Promise(((t,n)=>{this.resolve=function(){e.clearRejectTimeout(),t(...arguments)},this.reject=function(){e.clearRejectTimeout(),n(...arguments)}})),this.then=this.promise.then.bind(this.promise),this.catch=this.promise.catch.bind(this.promise)}clearRejectTimeout(){clearTimeout(this._timeout)}setRejectTimeout(e){this._timeout=setTimeout((()=>{this.reject(new Error("timeout"))}),e)}}class xr{constructor(){this.eventEmitter=new ii,this.addEventListener=this.on=this.addListener,this.removeEventListener=this.off=this.removeListener}addCancellableListener(e,t){return this.addListener(e,t),()=>this.removeListener(e,t)}addListener(e,t){return this.eventEmitter.addListener(e,t)}removeListener(e,t){return this.eventEmitter.removeListener(e,t)}emit(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:{},t="";const n=document.querySelector(\'script[src*="lib-jitsi-meet"]\');if(n){const e=n.src.lastIndexOf("/");t=`${n.src.substring(0,e)}/`}let i=`${t}lib-jitsi-meet.e2ee-worker.js`;if(t&&"/"!==t){const e=new Blob([`importScripts("${i}");`],{type:"application/javascript"});i=window.URL.createObjectURL(e)}this._worker=new Worker(i,{name:"E2EE Worker"}),this._worker.onerror=e=>Rr.error(e),this._worker.postMessage({operation:"initialize",sharedKey:e})}cleanup(e){this._worker.postMessage({operation:"cleanup",participantId:e})}cleanupAll(){this._worker.postMessage({operation:"cleanupAll"})}handleReceiver(e,t,n){if(!e[Ar])if(e[Ar]=!0,window.RTCRtpScriptTransform){const t={operation:"decode",participantId:n};e.transform=new RTCRtpScriptTransform(this._worker,t)}else{const t=e.createEncodedStreams();this._worker.postMessage({operation:"decode",readableStream:t.readable,writableStream:t.writable,participantId:n},[t.readable,t.writable])}}handleSender(e,t,n){if(!e[Ar])if(e[Ar]=!0,window.RTCRtpScriptTransform){const t={operation:"encode",participantId:n};e.transform=new RTCRtpScriptTransform(this._worker,t)}else{const t=e.createEncodedStreams();this._worker.postMessage({operation:"encode",readableStream:t.readable,writableStream:t.writable,participantId:n},[t.readable,t.writable])}}setKey(e,t,n){this._worker.postMessage({operation:"setKey",key:t,keyIndex:n,participantId:e})}}const Ir=(0,E.getLogger)("modules/e2ee/KeyHandler.js");class Pr extends xr{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),this.conference=e,this.e2eeCtx=new wr(t),this.enabled=!1,this._enabling=void 0,this.conference.on(q,this._onMediaSessionStarted.bind(this)),this.conference.on(tt,(e=>e.isLocal()&&this._onLocalTrackAdded(e))),this.conference.rtc.on(ji.default.REMOTE_TRACK_ADDED,((e,t)=>this._setupReceiverE2EEForTrack(t,e))),this.conference.on(it,this._trackMuteChanged.bind(this))}isEnabled(){return this.enabled}async setEnabled(e){this._enabling&&await this._enabling,e!==this.enabled&&(this._enabling=new Cr,this.enabled=e,e||this.e2eeCtx.cleanupAll(),this._setEnabled&&await this._setEnabled(e),this.conference.setLocalParticipantProperty("e2ee.enabled",e),this.conference._restartMediaSessions(),this._enabling.resolve())}setEncryptionKey(){throw new Error("Not implemented by subclass")}_onLocalTrackAdded(e){for(const t of this.conference.getMediaSessions())this._setupSenderE2EEForTrack(t,e)}_onMediaSessionStarted(e){const t=this.conference.getLocalTracks();for(const n of t)this._setupSenderE2EEForTrack(e,n)}_setupReceiverE2EEForTrack(e,t){if(!this.enabled)return;const n=e.findReceiverForTrack(t.track);n?this.e2eeCtx.handleReceiver(n,t.getType(),t.getParticipantId()):Ir.warn(`Could not handle E2EE for ${t}: receiver not found in: ${e}`)}_setupSenderE2EEForTrack(e,t){if(!this.enabled)return;const n=e.peerconnection,i=n&&n.findSenderForTrack(t.track);i?this.e2eeCtx.handleSender(i,t.getType(),t.getParticipantId()):Ir.warn(`Could not handle E2EE for ${t}: sender not found in ${n}`)}_trackMuteChanged(e){if(ci.doesVideoMuteByStreamRemove()&&e.isLocal()&&e.isVideoTrack()&&!e.isMuted())for(const t of this.conference.getMediaSessions())this._setupSenderE2EEForTrack(t,e)}}class Dr extends Pr{constructor(e){super(e,{sharedKey:!0})}setKey(e){this.e2eeCtx.setKey(void 0,{encryptionKey:e.encryptionKey},e.index)}}var Or=n(509),kr=n.n(Or),Nr=n(577),Mr=n(433);Mr.v1,Mr.v3;const Lr=Mr.v4;let Fr;Mr.v5,function(e){e.E2EE_SAS_KEYS_MAC_MISMATCH="e2ee.sas.keys-mac-mismatch",e.E2EE_SAS_MAC_MISMATCH="e2ee.sas.mac-mismatch",e.E2EE_SAS_MISSING_KEY="e2ee.sas.missing-key",e.E2EE_SAS_COMMITMENT_MISMATCHED="e2ee.sas.commitment-mismatched",e.E2EE_SAS_CHANNEL_VERIFICATION_FAILED="e2ee.sas.channel-verification-failed",e.E2EE_SAS_INVALID_SAS_VERIFICATION="e2ee.sas.invalid-sas-verification"}(Fr||(Fr={}));const jr=[["🐶","dog"],["🐱","cat"],["🦁","lion"],["🐎","horse"],["🦄","unicorn"],["🐷","pig"],["🐘","elephant"],["🐰","rabbit"],["🐼","panda"],["🐓","rooster"],["🐧","penguin"],["🐢","turtle"],["🐟","fish"],["🐙","octopus"],["🦋","butterfly"],["🌷","flower"],["🌳","tree"],["🌵","cactus"],["🍄","mushroom"],["🌏","globe"],["🌙","moon"],["☁️","cloud"],["🔥","fire"],["🍌","banana"],["🍎","apple"],["🍓","strawberry"],["🌽","corn"],["🍕","pizza"],["🎂","cake"],["❤️","heart"],["🙂","smiley"],["🤖","robot"],["🎩","hat"],["👓","glasses"],["🔧","spanner"],["🎅","santa"],["👍","thumbs up"],["☂️","umbrella"],["⌛","hourglass"],["⏰","clock"],["🎁","gift"],["💡","light bulb"],["📕","book"],["✏️","pencil"],["📎","paperclip"],["✂️","scissors"],["🔒","lock"],["🔑","key"],["🔨","hammer"],["☎️","telephone"],["🏁","flag"],["🚂","train"],["🚲","bicycle"],["✈️","aeroplane"],["🚀","rocket"],["🏆","trophy"],["⚽","ball"],["🎸","guitar"],["🎺","trumpet"],["🔔","bell"],["⚓️","anchor"],["🎧","headphones"],["📁","folder"],["📌","pin"]],Vr={decimal:function(e){return[1e3+(e[0]<<5|e[1]>>3),1e3+((7&e[1])<<10|e[2]<<2|e[3]>>6),1e3+((63&e[3])<<7|e[4]>>1)]},emoji:function(e){return[e[0]>>2,(3&e[0])<<4|e[1]>>4,(15&e[1])<<2|e[2]>>6,63&e[2],e[3]>>2,(3&e[3])<<4|e[4]>>4,(15&e[4])<<2|e[5]>>6].map((e=>jr[e]))}},Ur=(0,E.getLogger)("modules/e2ee/OlmAdapter.js"),Hr=5e3,$r="olm",Jr="error",Br="key-info",qr="key-info-ack",Gr="session-ack",zr="session-init",Kr="sas-start",Wr="sas-accept",Xr="sas-key",Yr="sas-mac",Qr="Jitsi-KEY_VERIFICATION_MAC",Zr="Jitsi-KEY_IDS",eo=Symbol("OlmData"),to={PARTICIPANT_E2EE_CHANNEL_READY:"olm.participant_e2ee_channel_ready",PARTICIPANT_SAS_AVAILABLE:"olm.participant_sas_available",PARTICIPANT_SAS_READY:"olm.participant_sas_ready",PARTICIPANT_KEY_UPDATED:"olm.partitipant_key_updated",PARTICIPANT_VERIFICATION_COMPLETED:"olm.participant_verification_completed"};class no extends xr{constructor(e){super(),this._conf=e,this._init=new Cr,this._mediaKey=void 0,this._mediaKeyIndex=-1,this._reqs=new Map,this._sessionInitialization=void 0,no.isSupported()?(this._bootstrapOlm(),this._conf.on(Ce,this._onEndpointMessageReceived.bind(this)),this._conf.on(le,this._onConferenceLeft.bind(this)),this._conf.on(dt,this._onParticipantLeft.bind(this)),this._conf.on(qe,this._onParticipantPropertyChanged.bind(this))):this._init.reject(new Error("Olm not supported"))}get myId(){return this._conf.myUserId()}async initSessions(){if(this._sessionInitialization)throw new Error("OlmAdapter initSessions called multiple times");{this._sessionInitialization=new Cr,await this._init;const e=[],t=this._conf.myUserId();for(const n of this._conf.getParticipants())n.hasFeature(Ia)&&t{this._reqs.delete(r)})),this._reqs.set(r,s),t.push(s),this._sendMessage(o,n)}return await Promise.allSettled(t),this._mediaKeyIndex}updateCurrentMediaKey(e){return this._mediaKey=e,this._mediaKeyIndex}clearParticipantSession(e){const t=this._getParticipantOlmData(e);t.session&&(t.session.free(),t.session=void 0)}clearAllParticipantsSessions(){for(const e of this._conf.getParticipants())this.clearParticipantSession(e)}markParticipantVerified(e,t){const n=this._getParticipantOlmData(e),i=e.getId();if(!t)return n.sasVerification=void 0,Ur.warn(`Verification failed for participant ${i}`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_CHANNEL_VERIFICATION_FAILED);if(!n.sasVerification)return Ur.warn(`Participant ${i} does not have valid sasVerification`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_INVALID_SAS_VERIFICATION);const{sas:r,sasMacSent:o}=n.sasVerification;r&&r.is_their_key_set()&&!o&&(this._sendSasMac(e),n.sasVerification.sasMacSent=!0)}async _bootstrapOlm(){Ur.debug("Initializing Olm...");try{await Olm.init(),this._olmAccount=new Olm.Account,this._olmAccount.create(),this._idKeys=_r(this._olmAccount.identity_keys()),Ur.debug(`Olm ${Olm.get_library_version().join(".")} initialized`),this._init.resolve(),this._onIdKeysReady(this._idKeys)}catch(e){Ur.error("Failed to initialize Olm",e),this._init.reject(e)}}startVerification(e){const t=e.getId(),n=this._getParticipantOlmData(e);if(!n.session)return void Ur.warn(`Tried to start verification with participant ${t} but we have no session`);if(n.sasVerification)return void Ur.warn(`There is already a verification in progress with participant ${t}`);n.sasVerification={sas:new Olm.SAS,transactionId:Lr()};const i={transactionId:n.sasVerification.transactionId};n.sasVerification.startContent=i,n.sasVerification.isInitiator=!0;const r={[Aa]:$r,olm:{type:Kr,data:i}};this._sendMessage(r,t)}_onIdKeysReady(e){Ur.debug(`Olm id key ready: ${e}`);for(const t in e)if(e.hasOwnProperty(t)){const n=e[t];this._conf.setLocalParticipantProperty(`e2ee.idKey.${t}`,n)}}_onParticipantE2EEChannelReady(e){Ur.debug(`E2EE channel with participant ${e} is ready`)}_encryptKeyInfo(e){const t={};return void 0!==this._mediaKey&&(t.key=!!this._mediaKey&&Nr.fromByteArray(this._mediaKey),t.keyIndex=this._mediaKeyIndex),e.encrypt(JSON.stringify(t))}_getParticipantOlmData(e){return e[eo]=e[eo]||{},e[eo]}async _onConferenceLeft(){Ur.debug("Conference left"),await this._init;for(const e of this._conf.getParticipants())this._onParticipantLeft(e.getId(),e);this._olmAccount&&(this._olmAccount.free(),this._olmAccount=void 0)}async _onEndpointMessageReceived(e,t){if(t[Aa]!==$r)return;if(!t.olm)return void Ur.warn("Incorrectly formatted message");await this._init;const n=t.olm,i=e.getId(),r=this._getParticipantOlmData(e);switch(n.type){case zr:if(r.session)Ur.warn(`Participant ${i} already has a session`),this._sendError(e,"Session already established");else{const e=new Olm.Session;e.create_outbound(this._olmAccount,n.data.idKey,n.data.otKey),r.session=e;const t={[Aa]:$r,olm:{type:Gr,data:{ciphertext:this._encryptKeyInfo(e),uuid:n.data.uuid}}};this._sendMessage(t,i),this._onParticipantE2EEChannelReady(i)}break;case Gr:if(r.session)Ur.warn(`Participant ${i} already has a session`),this._sendError(e,"No session found");else if(n.data.uuid===r.pendingSessionUuid){const{ciphertext:e}=n.data,t=this._reqs.get(n.data.uuid),o=new Olm.Session;o.create_inbound(this._olmAccount,e.body),this._olmAccount.remove_one_time_keys(o);const s=o.decrypt(e.type,e.body);r.session=o,r.pendingSessionUuid=void 0,this._onParticipantE2EEChannelReady(i),this._reqs.delete(n.data.uuid),t.resolve();const a=io(s);if(a.key){const e=Nr.toByteArray(a.key),t=a.keyIndex;r.lastKey=e,this.eventEmitter.emit(to.PARTICIPANT_KEY_UPDATED,i,e,t)}}else Ur.warn("Received ACK with the wrong UUID"),this._sendError(e,"Invalid UUID");break;case Jr:Ur.error(n.data.error);break;case Br:if(r.session){const{ciphertext:e}=n.data,t=io(r.session.decrypt(e.type,e.body));if(void 0!==t.key&&void 0!==t.keyIndex){const e=!!t.key&&Nr.toByteArray(t.key),o=t.keyIndex;Et()(r.lastKey,e)||(r.lastKey=e,this.eventEmitter.emit(to.PARTICIPANT_KEY_UPDATED,i,e,o));const s={[Aa]:$r,olm:{type:qr,data:{ciphertext:this._encryptKeyInfo(r.session),uuid:n.data.uuid}}};this._sendMessage(s,i)}}else Ur.debug(`Received key info message from ${i} but we have no session for them!`),this._sendError(e,"No session found while processing key-info");break;case qr:if(r.session){const{ciphertext:e}=n.data,t=io(r.session.decrypt(e.type,e.body));if(void 0!==t.key&&void 0!==t.keyIndex){const e=!!t.key&&Nr.toByteArray(t.key),n=t.keyIndex;Et()(r.lastKey,e)||(r.lastKey=e,this.eventEmitter.emit(to.PARTICIPANT_KEY_UPDATED,i,e,n))}const o=this._reqs.get(n.data.uuid);this._reqs.delete(n.data.uuid),o.resolve()}else Ur.debug(`Received key info ack message from ${i} but we have no session for them!`),this._sendError(e,"No session found while processing key-info-ack");break;case Kr:{var o;if(!r.session)return Ur.debug(`Received sas init message from ${i} but we have no session for them!`),void this._sendError(e,"No session found while processing sas-init");if(null!==(o=r.sasVerification)&&void 0!==o&&o.sas)return Ur.warn(`SAS already created for participant ${i}`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_INVALID_SAS_VERIFICATION);const{transactionId:t}=n.data,s=new Olm.SAS;r.sasVerification={sas:s,transactionId:t,isInitiator:!1};const a=r.sasVerification.sas.get_pubkey(),d=this._computeCommitment(a,n.data),c={[Aa]:$r,olm:{type:Wr,data:{transactionId:t,commitment:d}}};this._sendMessage(c,i);break}case Wr:{if(!r.session)return Ur.debug(`Received sas accept message from ${i} but we have no session for them!`),void this._sendError(e,"No session found while processing sas-accept");const{commitment:t,transactionId:o}=n.data;if(!r.sasVerification)return Ur.warn(`SAS_ACCEPT Participant ${i} does not have valid sasVerification`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_INVALID_SAS_VERIFICATION);if(r.sasVerification.sasCommitment)return Ur.debug(`Already received sas commitment message from ${i}!`),void this._sendError(e,"Already received sas commitment message from ${pId}!");r.sasVerification.sasCommitment=t;const s=r.sasVerification.sas.get_pubkey(),a={[Aa]:$r,olm:{type:Xr,data:{key:s,transactionId:o}}};this._sendMessage(a,i),r.sasVerification.keySent=!0;break}case Xr:{if(!r.session)return Ur.debug(`Received sas key message from ${i} but we have no session for them!`),void this._sendError(e,"No session found while processing sas-key");if(!r.sasVerification)return Ur.warn(`SAS_KEY Participant ${i} does not have valid sasVerification`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_INVALID_SAS_VERIFICATION);const{isInitiator:t,sas:o,sasCommitment:s,startContent:a,keySent:d}=r.sasVerification;if(o.is_their_key_set())return void Ur.warn("SAS already has their key!");const{key:c,transactionId:l}=n.data;if(s&&s!==this._computeCommitment(c,a))return this._sendError(e,"OlmAdapter commitments mismatched"),this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_COMMITMENT_MISMATCHED),void r.sasVerification.free();o.set_their_key(c);const h=o.get_pubkey(),u=`${this.myId}|${h}`,p=`${i}|${c}`,m=t?`${u}|${p}`:`${p}|${u}`,g=function(e){const t={};for(const n in Vr)Vr.hasOwnProperty(n)&&(t[n]=Vr[n](e));return t}(o.generate_bytes(m,6));if(this.eventEmitter.emit(to.PARTICIPANT_SAS_READY,i,g),d)return;const f={[Aa]:$r,olm:{type:Xr,data:{key:h,transactionId:l}}};this._sendMessage(f,i),r.sasVerification.keySent=!0;break}case Yr:{if(!r.session)return Ur.debug(`Received sas mac message from ${i} but we have no session for them!`),void this._sendError(e,"No session found while processing sas-mac");const{keys:t,mac:o,transactionId:s}=n.data;if(!o||!t)return void Ur.warn("Invalid SAS MAC message");if(!r.sasVerification)return void Ur.warn(`SAS_MAC Participant ${i} does not have valid sasVerification`);const a=r.sasVerification.sas,d=`${Qr}${i}${this.myId}${s}`;if(a.calculate_mac(Object.keys(o).sort().join(","),d+Zr)!==t)return Ur.error("SAS verification error: keys MAC mismatch"),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_KEYS_MAC_MISMATCH);if(!r.ed25519)return Ur.warn("SAS verification error: Missing ed25519 key"),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_MISSING_KEY);for(const[e,t]of Object.entries(o))if(t!==a.calculate_mac(r.ed25519,d+e))return Ur.error("SAS verification error: MAC mismatch"),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_MAC_MISMATCH);Ur.info(`SAS MAC verified for participant ${i}`),this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!0);break}}}_onParticipantLeft(e,t){Ur.debug(`Participant ${e} left`),this.clearParticipantSession(t)}async _onParticipantPropertyChanged(e,t,n,i){const r=e.getId(),o=this._getParticipantOlmData(e);switch(t){case"e2ee.enabled":if(i&&this._conf.isE2EEEnabled()){const t=this._conf.myUserId();if((await e.getFeatures()).has(Ia)&&t{this._reqs.delete(t),o.pendingSessionUuid=void 0})),this._reqs.set(t,n);const i={[Aa]:$r,olm:{type:Br,data:{ciphertext:this._encryptKeyInfo(o.session),uuid:t}}};this._sendMessage(i,r)}}break;case"e2ee.idKey.ed25519":o.ed25519=i,this.eventEmitter.emit(to.PARTICIPANT_SAS_AVAILABLE,r)}}_sendError(e,t){const n=e.getId(),i={[Aa]:$r,olm:{type:Jr,data:{error:t}}};this._sendMessage(i,n)}_sendMessage(e,t){this._conf.sendMessage(e,t)}_sendSessionInit(e){const t=e.getId(),n=this._getParticipantOlmData(e);if(n.session)return Ur.warn(`Tried to send session-init to ${t} but we already have a session`),Promise.reject();if(void 0!==n.pendingSessionUuid)return Ur.warn(`Tried to send session-init to ${t} but we already have a pending session`),Promise.reject();this._olmAccount.generate_one_time_keys(1);const i=_r(this._olmAccount.one_time_keys()),r=Object.values(i.curve25519)[0];if(!r)return Promise.reject(new Error("No one-time-keys generated"));this._olmAccount.mark_keys_as_published();const o=Lr(),s={[Aa]:$r,olm:{type:zr,data:{idKey:this._idKeys.curve25519,otKey:r,uuid:o}}},a=new Cr;return a.setRejectTimeout(Hr),a.catch((()=>{this._reqs.delete(o),n.pendingSessionUuid=void 0})),this._reqs.set(o,a),this._sendMessage(s,t),n.pendingSessionUuid=o,a}_sendSasMac(e){const t=e.getId(),n=this._getParticipantOlmData(e),{sas:i,transactionId:r}=n.sasVerification,o={},s=[],a=`${Qr}${this.myId}${t}${r}`,d=`ed25519:${t}`;o[d]=i.calculate_mac(this._idKeys.ed25519,a+d),s.push(d);const c=i.calculate_mac(s.sort().join(","),a+Zr),l={[Aa]:$r,olm:{type:Yr,data:{keys:c,mac:o,transactionId:r}}};this._sendMessage(l,t)}_computeCommitment(e,t){const n=new Olm.Utility,i=n.sha256(e+JSON.stringify(t));return n.free(),i}}function io(e){try{return _r(e)}catch(e){return{}}}no.events=to;const ro=(0,E.getLogger)("modules/e2ee/ManagedKeyHandler.js");class oo extends Pr{constructor(e){super(e),this._key=void 0,this._conferenceJoined=!1,this._olmAdapter=new no(e),this._rotateKey=kr()(this._rotateKeyImpl,5e3),this._ratchetKey=kr()(this._ratchetKeyImpl,5e3),this._olmAdapter.on(no.events.PARTICIPANT_KEY_UPDATED,this._onParticipantKeyUpdated.bind(this)),this._olmAdapter.on(no.events.PARTICIPANT_SAS_READY,this._onParticipantSasReady.bind(this)),this._olmAdapter.on(no.events.PARTICIPANT_SAS_AVAILABLE,this._onParticipantSasAvailable.bind(this)),this._olmAdapter.on(no.events.PARTICIPANT_VERIFICATION_COMPLETED,this._onParticipantVerificationCompleted.bind(this)),this.conference.on(qe,this._onParticipantPropertyChanged.bind(this)),this.conference.on(at,this._onParticipantJoined.bind(this)),this.conference.on(dt,this._onParticipantLeft.bind(this)),this.conference.on(ce,(()=>{this._conferenceJoined=!0}))}get sasVerification(){return this._olmAdapter}async _setEnabled(e){e?await this._olmAdapter.initSessions():this._olmAdapter.clearAllParticipantsSessions(),this._key=!!e&&this._generateKey();const t=await this._olmAdapter.updateKey(this._key);this.e2eeCtx.setKey(this.conference.myUserId(),this._key,t)}async _onParticipantPropertyChanged(e,t,n,i){switch(t){case"e2ee.idKey":ro.debug(`Participant ${e.getId()} updated their id key: ${i}`);break;case"e2ee.enabled":!i&&this.enabled&&this._olmAdapter.clearParticipantSession(e)}}_onParticipantJoined(){this._conferenceJoined&&this.enabled&&this._ratchetKey()}_onParticipantLeft(e){this.e2eeCtx.cleanup(e),this.enabled&&this._rotateKey()}async _rotateKeyImpl(){ro.debug("Rotating key"),this._key=this._generateKey();const e=await this._olmAdapter.updateKey(this._key);this.e2eeCtx.setKey(this.conference.myUserId(),this._key,e)}async _ratchetKeyImpl(){ro.debug("Ratchetting key");const e=await async function(e){return crypto.subtle.importKey("raw",e,"HKDF",!1,["deriveBits","deriveKey"])}(this._key),t=await async function(e){const t=new TextEncoder;return crypto.subtle.deriveBits({name:"HKDF",salt:t.encode("JFrameRatchetKey"),hash:"SHA-256",info:new ArrayBuffer},e,256)}(e);this._key=new Uint8Array(t);const n=this._olmAdapter.updateCurrentMediaKey(this._key);this.e2eeCtx.setKey(this.conference.myUserId(),this._key,n)}_onParticipantKeyUpdated(e,t,n){ro.debug(`Participant ${e} updated their key`),this.e2eeCtx.setKey(e,t,n)}_onParticipantSasReady(e,t){this.conference.eventEmitter.emit(Te,e,t)}_onParticipantSasAvailable(e){this.conference.eventEmitter.emit(Se,e)}_onParticipantVerificationCompleted(e,t,n){this.conference.eventEmitter.emit(be,e,t,n)}_generateKey(){return window.crypto.getRandomValues(new Uint8Array(32))}}class so{constructor(e){const{e2ee:t={}}=e.options.config;this._externallyManaged=t.externallyManagedKey,this._externallyManaged?this._keyHandler=new Dr(e):this._keyHandler=new oo(e)}static isSupported(e){const{e2ee:t={}}=e;return!(!t.externallyManagedKey&&!no.isSupported())&&!(e.testing&&e.testing.disableE2EE)&&(ci.supportsInsertableStreams()||e.enableEncodedTransformSupport&&ci.supportsEncodedTransform())}isEnabled(){return this._keyHandler.isEnabled()}async setEnabled(e){await this._keyHandler.setEnabled(e)}setEncryptionKey(e){this._keyHandler.setKey(e)}startVerification(e){var t;null===(t=this._keyHandler.sasVerification)||void 0===t||t.startVerification(e)}markParticipantVerified(e,t){var n;null===(n=this._keyHandler.sasVerification)||void 0===n||n.markParticipantVerified(e,t)}}var ao=n(399),co=n.n(ao);function lo(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var n,i,r,o,s,a,d,c,l=new Array(80),h=1732584193,u=-271733879,p=-1732584194,m=271733878,g=-1009589776;for(n=0;n>16)+(t>>16)+(n>>16)<<16|65535&n}function mo(e,t){return e<>>32-t}function go(e){for(var t=[],n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<24-n%32;return t}function fo(e){for(var t,n,i="",r=0;r<4*e.length;r+=3)for(t=(e[r>>2]>>8*(3-r%4)&255)<<16|(e[r+1>>2]>>8*(3-(r+1)%4)&255)<<8|e[r+2>>2]>>8*(3-(r+2)%4)&255,n=0;n<4;n++)8*r+6*n>32*e.length?i+="=":i+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-n)&63);return i}const vo=function(e){return fo(lo(go(e),8*e.length))},_o=["category","type","lang","name"],yo=["category","type","lang"];function Eo(e,t){let n=0;return yo.some((i=>0!==(n=e[i]>t[i]?1:e[i]query>feature").each(((e,n)=>t.add(n.getAttribute("var")))),_t()(e).find(">query>identity").each(((e,t)=>n.add({type:t.getAttribute("type"),name:t.getAttribute("name"),category:t.getAttribute("category")}))),{features:t,identities:n}}class bo extends xr{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"http://jitsi.org/jitsimeet";if(super(),this.node=t,this.disco=e.disco,!this.disco)throw new Error("Missing strophe-plugins (disco plugin is required)!");this.version="",this.rooms=new Set,this.externalFeatures=new Set;const n=e.emuc;n.addListener(Hi.XMPPEvents.EMUC_ROOM_ADDED,(e=>this._addChatRoom(e))),n.addListener(Hi.XMPPEvents.EMUC_ROOM_REMOVED,(e=>this._removeChatRoom(e))),Object.keys(n.rooms).forEach((e=>{this._addChatRoom(n.rooms[e])})),St.Strophe.addNamespace("CAPS","http://jabber.org/protocol/caps"),this.disco.addFeature(St.Strophe.NS.CAPS)}addFeature(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.disco.addFeature(e),this._generateVersion(),n&&!this.externalFeatures.has(e)&&(this.externalFeatures.add(e),this.rooms.forEach((e=>this._updateRoomWithExternalFeatures(e)))),t&&this.submit()}removeFeature(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.disco.removeFeature(e),this._generateVersion(),n&&this.externalFeatures.has(e)&&(this.externalFeatures.delete(e),this.rooms.forEach((e=>this._updateRoomWithExternalFeatures(e)))),t&&this.submit()}submit(){this.rooms.forEach((e=>e.sendPresence()))}_updateRoomWithExternalFeatures(e){if(0===this.externalFeatures.size)e.removeFromPresence("features");else{const t=[];this.externalFeatures.forEach((e=>{t.push({tagName:"feature",attributes:{var:e}})})),e.addOrReplaceInPresence("features",{children:t})}}getFeaturesAndIdentities(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5e3;return this._getDiscoInfo(e,t,n)}_getDiscoInfo(e,t,n){return new Promise(((i,r)=>this.disco.info(e,t,(e=>{i(So(e))}),r,n)))}_addChatRoom(e){this.rooms.add(e),this._fixChatRoomPresenceMap(e),this._updateRoomWithExternalFeatures(e)}_removeChatRoom(e){this.rooms.delete(e)}_fixChatRoomPresenceMap(e){e.addOrReplaceInPresence("c",{attributes:{xmlns:St.Strophe.NS.CAPS,hash:"sha-1",node:this.node,ver:this.version}})}_notifyVersionChanged(){this.rooms.forEach((e=>this._fixChatRoomPresenceMap(e)))}_generateVersion(){this.version=function(e,t){const n=e.sort(Eo).reduce(((e,t)=>`${_o.reduce(((e,n,i)=>e+(0===i?"":"/")+(t[n]?t[n]:"")),"")}<`),""),i=t.sort().reduce(((e,t)=>`${e+t}<`),"");return vo(n+i)}(this.disco._identities,this.disco._features),this._notifyVersionChanged()}}n(617);const To="NETWORK_INFO_CHANGED",Co=(0,E.getLogger)("modules/connectivity/NetworkInfo.js"),xo=new class extends xr{constructor(){super(),this._current={isOnline:!0}}updateNetworkInfo(e){let{isOnline:t}=e;Co.debug("updateNetworkInfo",{isOnline:t}),this._current={isOnline:!0===t},this.eventEmitter.emit(To,this._current)}isOnline(){return!0===this._current.isOnline}};function Ro(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2;return Math.floor(Math.random()*(1e3*Math.pow(n,e)-t)+t)}const Ao=(0,E.getLogger)("modules/xmpp/ResumeTask.js");class wo{constructor(e){this._stropheConn=e,this._resumeRetryN=0,this._retryDelay=void 0}get retryDelay(){return this._retryDelay}schedule(){this._cancelResume(),this._resumeRetryN+=1,this._networkOnlineListener=xo.addCancellableListener(To,(e=>{let{isOnline:t}=e;t?this._scheduleResume():this._cancelResume()})),xo.isOnline()&&this._scheduleResume()}_scheduleResume(){this._resumeTimeout||(this._resumeRetryN=Math.min(3,this._resumeRetryN),this._retryDelay=Ro(this._resumeRetryN,1500*this._resumeRetryN,3),Ao.info(`Will try to resume the XMPP connection in ${this.retryDelay}ms`),this._resumeTimeout=setTimeout((()=>this._resumeConnection()),this.retryDelay))}_cancelResume(){this._resumeTimeout&&(Ao.info("Canceling connection resume task"),clearTimeout(this._resumeTimeout),this._resumeTimeout=void 0,this._retryDelay=void 0)}_resumeConnection(){const{streamManagement:e}=this._stropheConn,t=e.getResumeToken();if(!t)return;Ao.info("Trying to resume the XMPP connection");const n=new URL(this._stropheConn.service);let{search:i}=n;const r=/(previd=)([\\w-]+)/,o=i.match(r);o&&-1===o.indexOf(t)?i=i.replace(r,`$1${t}`):o||(i+=-1===i.indexOf("?")?`?previd=${t}`:`&previd=${t}`),n.search=i,this._stropheConn.service=n.toString(),e.resume()}cancel(){this._cancelResume(),this._resumeRetryN=0,this._networkOnlineListener&&(this._networkOnlineListener(),this._networkOnlineListener=null)}}class Io{constructor(){this._lastSuccess=null,this._lastFailedMessage=null}startTracking(e,t){var n=this;const i=t.rawInput;t.rawInput=function(){for(var r=arguments.length,o=new Array(r),s=0;s0&&void 0!==arguments[0]?arguments[0]:class{};return class extends e{constructor(){super(...arguments),this.connection=null}init(e){this.connection=e}}}const Do=Po(),Oo=Po(xr),ko=(0,E.getLogger)("modules/xmpp/strophe.ping.js");class No extends Do{constructor(e){let{getTimeSinceLastServerResponse:t,onPingThresholdExceeded:n,pingOptions:i={}}=e;super(),this.failedPings=0,this._onPingThresholdExceeded=n,this._getTimeSinceLastServerResponse=t,this.pingInterval="number"==typeof i.interval?i.interval:1e4,this.pingTimeout="number"==typeof i.timeout?i.timeout:5e3,this.pingThreshold="number"==typeof i.threshold?i.threshold:2,this.pingTimestampsToKeep=Math.round(12e4/this.pingInterval),this.pingExecIntervals=new Array(this.pingTimestampsToKeep)}init(e){super.init(e),St.Strophe.addNamespace("PING","urn:xmpp:ping")}ping(e,t,n,i){this._addPingExecutionTimestamp();const r=(0,St.$iq)({type:"get",to:e});r.c("ping",{xmlns:St.Strophe.NS.PING}),this.connection.sendIQ2(r,{timeout:i}).then(t,n)}startInterval(e){clearInterval(this.intervalId),this.intervalId=window.setInterval((()=>{const t=Date.now();if(this._getTimeSinceLastServerResponse(){this._lastServerCheck=this._getTimeSinceLastServerResponse()+Date.now(),this.failedPings=0}),(e=>{this.failedPings+=1;const t="Ping "+(e?"error":"timeout");this.failedPings>=this.pingThreshold?(ko.error(t,e),this._onPingThresholdExceeded&&this._onPingThresholdExceeded()):ko.warn(t,e)}),this.pingTimeout)}),this.pingInterval),ko.info(`XMPP pings will be sent every ${this.pingInterval} ms`)}stopInterval(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null,this.failedPings=0,ko.info("Ping interval cleared"))}_addPingExecutionTimestamp(){this.pingExecIntervals.push((new Date).getTime()),this.pingExecIntervals.length>this.pingTimestampsToKeep&&this.pingExecIntervals.shift()}getPingSuspendTime(){const e=this.pingExecIntervals.slice();e.push((new Date).getTime());let t=0,n=e[0];return e.forEach((e=>{const i=e-n;i>t&&(t=i),n=e})),t-=this.pingInterval,Math.max(t,0)}}const Mo=(0,E.getLogger)("modules/xmpp/XmppConnection.js");class Lo extends xr{static get Events(){return{CONN_STATUS_CHANGED:"CONN_STATUS_CHANGED",CONN_SHARD_CHANGED:"CONN_SHARD_CHANGED"}}static get Status(){return St.Strophe.Status}constructor(e){let{enableWebsocketResume:t,websocketKeepAlive:n,websocketKeepAliveUrl:i,serviceUrl:r,shard:o,xmppPing:s}=e;super(),this._options={enableWebsocketResume:void 0===t||t,pingOptions:s,shard:o,websocketKeepAlive:void 0===n?6e4:Number(n),websocketKeepAliveUrl:i},this._stropheConn=new St.Strophe.Connection(r),this._usesWebsocket=r.startsWith("ws:")||r.startsWith("wss:"),this._stropheConn.maxRetries=3,this._rawInputTracker=new Io,this._rawInputTracker.startTracking(this,this._stropheConn),this._resumeTask=new wo(this._stropheConn),this._deferredIQs=[],this.addConnectionPlugin("ping",new No({getTimeSinceLastServerResponse:()=>this.getTimeSinceLastSuccess(),onPingThresholdExceeded:()=>this._onPingErrorThresholdExceeded(),pingOptions:s})),this._oneSuccessfulConnect=!1}get connected(){const e=this._stropheConn&&this._stropheConn._proto&&this._stropheConn._proto.socket;return(this._status===St.Strophe.Status.CONNECTED||this._status===St.Strophe.Status.ATTACHED)&&(!this.isUsingWebSocket||e&&e.readyState===WebSocket.OPEN)}get disco(){return this._stropheConn.disco}get disconnecting(){return!0===this._stropheConn.disconnecting}get domain(){return this._stropheConn.domain}get isUsingWebSocket(){return this._usesWebsocket}get jid(){return this._stropheConn.jid}get lastResponseHeaders(){return this._stropheConn._proto&&this._stropheConn._proto.lastResponseHeaders}get logger(){return this._stropheConn.logger}get options(){return this._stropheConn.options}get pingDomain(){var e;return(null===(e=this._options.pingOptions)||void 0===e?void 0:e.domain)||this.domain}get service(){return this._stropheConn.service}set shard(e){this._options.shard=e,this._oneSuccessfulConnect&&this._maybeStartWSKeepAlive()}get status(){return this._status}addConnectionPlugin(e,t){this[e]=t,t.init(this)}addHandler(){return this._stropheConn.addHandler(...arguments)}deleteHandler(){this._stropheConn.deleteHandler(...arguments)}attach(e,t,n,i){for(var r=arguments.length,o=new Array(r>4?r-4:0),s=4;s3?i-3:0),o=3;o2?r-2:0),s=2;s0){this._wsKeepAlive||Mo.info(`WebSocket keep alive interval: ${e}ms`),clearTimeout(this._wsKeepAlive);const t=e+60*Math.random()*1e3;Mo.debug(`Scheduling next WebSocket keep-alive in ${t}ms`),this._wsKeepAlive=setTimeout((()=>this._keepAliveAndCheckShard().then((()=>this._maybeStartWSKeepAlive()))),t)}}_keepAliveAndCheckShard(){const{shard:e,websocketKeepAliveUrl:t}=this._options,n=t||this.service.replace("wss://","https://").replace("ws://","http://");return fetch(n).then((t=>{if(!e)return;const n=t.headers.get("x-jitsi-shard");n!==e&&(Mo.error(`Detected that shard changed from ${e} to ${n}`),this.eventEmitter.emit(Lo.Events.CONN_SHARD_CHANGED))})).catch((e=>{Mo.error(`Websocket Keep alive failed for url: ${n}`,{error:e})}))}_processDeferredIQs(){for(const e of this._deferredIQs)if(e.iq){clearTimeout(e.timeout);const t=Date.now()-e.start;this.sendIQ(e.iq,(t=>e.resolve(t)),(t=>e.reject(t)),t)}this._deferredIQs=[]}send(e){var t,n,i;if(!this.connected)throw Mo.error(`Trying to send stanza while not connected. Status:${this._status} Proto:${this.isUsingWebSocket?null===(t=this._stropheConn)||void 0===t||null===(n=t._proto)||void 0===n||null===(i=n.socket)||void 0===i?void 0:i.readyState:"bosh"}`),new Error("Not connected");this._stropheConn.send(e)}sendIQ(e,t,n,i){if(this.connected)return this._stropheConn.sendIQ(e,t,n,i);n("Not connected")}sendIQ2(e,t){let{timeout:n}=t;return new Promise(((t,i)=>{if(this.connected)this.sendIQ(e,(e=>t(e)),(e=>i(e)),n);else{const r={iq:e,resolve:t,reject:i,start:Date.now(),timeout:setTimeout((()=>{r.iq=void 0,i(void 0)}),n)};this._deferredIQs.push(r)}}))}_onPingErrorThresholdExceeded(){this.isUsingWebSocket&&(Mo.warn("Ping error threshold exceeded - killing the WebSocket"),this.closeWebsocket())}sendPresence(e,t,n,i){this.connected?this._stropheConn.sendPresence(e,t,n,i):n("Not connected")}sendUnavailableBeacon(){if(!navigator.sendBeacon||this._stropheConn.disconnecting||!this._stropheConn.connected)return!1;this._stropheConn._changeConnectStatus(St.Strophe.Status.DISCONNECTING),this._stropheConn.disconnecting=!0;const e=this._stropheConn._proto._buildBody().attrs({type:"terminate"}),t=(0,St.$pres)({xmlns:St.Strophe.NS.CLIENT,type:"unavailable"});e.cnode(t.tree());const n=navigator.sendBeacon(-1===this.service.indexOf("https://")?`https:${this.service}`:this.service,St.Strophe.serialize(e.tree()));return Mo.info(`Successfully send unavailable beacon ${n}`),this._stropheConn._proto._abortAllRequests(),this._stropheConn._doDisconnect(),!0}_tryResumingConnection(){const{streamManagement:e}=this._stropheConn;return!(!e||!e.getResumeToken()||(this._resumeTask.schedule(),0))}}var Fo=n(667),jo=n.n(Fo);const Vo=(0,E.getLogger)("modules/settings/Settings.js");let Uo,Ho;const $o={_storage:di,init(e){this._storage=e||di},get callStatsUserName(){return Uo||(Uo=this._storage.getItem("callStatsUserName"),Uo||(Uo=function(){const e=jo().generateUsername();return Vo.log("generated stats id",e),e}(),this._storage.setItem("callStatsUserName",Uo))),Uo},get machineId(){if(!Ho){const e=this._storage.getItem("billingId");Ho=e||this._storage.getItem("jitsiMeetId"),e?this._storage.setItem("jitsiMeetId",e):Ho||(Ho=function(){const e=Jo()+Jo()+Jo()+Jo();return Vo.log("generated id",e),e}(),this._storage.setItem("jitsiMeetId",Ho))}return Ho},get sessionId(){return this._storage.getItem("sessionId")},set sessionId(e){e?this._storage.setItem("sessionId",e):this._storage.removeItem("sessionId")}};function Jo(){return`${Math.random().toString(16)}000000000`.substr(2,8)}const Bo=n(514),{XMPPEvents:qo}=n(609),Go=(0,E.getLogger)("modules/xmpp/moderator.js");function zo(e){let t=1;return function(n){if(n)return void(t=1);const i=Math.pow(2,t-1);return t+=1,Math.min(i*e,12e4)}}class Ko extends xr{constructor(e){var t,n;function i(e){if(e.data&&e.data.sessionId){if(e.origin!==window.location.origin)return void Go.warn(`Ignoring sessionId from different origin: ${e.origin}`);$o.sessionId=e.data.sessionId}}super(),this.getNextTimeout=zo(1e3),this.getNextErrorTimeout=zo(1e3),this.options=e.options,this.sipGatewayEnabled=!1,this.xmpp=e,this.connection=e.connection,this.targetJid=null===(t=this.options.hosts)||void 0===t?void 0:t.focus,this.targetJid||(this.targetJid=`focus.${null===(n=this.options.hosts)||void 0===n?void 0:n.domain}`),this.targetUrl=this.options.conferenceRequestUrl,this.mode=this.targetUrl?"http":"xmpp",Go.info(`Using ${this.mode} for conference requests.`),this.focusUserJids=new Set,this.options.focusUserJid&&this.focusUserJids.add(this.options.focusUserJid),window.addEventListener?window.addEventListener("message",i,!1):window.attachEvent("onmessage",i)}isFocusJid(e){if(!e)return!1;for(const t of this.focusUserJids)if(0===e.indexOf(`${t}/`))return!0;return!1}isSipGatewayEnabled(){return this.sipGatewayEnabled}_createConferenceRequest(e){var t,n;const{sessionId:i}=$o,r=this.options,o={};void 0!==r.startAudioMuted&&(o.startAudioMuted=r.startAudioMuted),void 0!==r.startVideoMuted&&(o.startVideoMuted=r.startVideoMuted),null!==(t=null==r||null===(n=r.analytics)||void 0===n?void 0:n.rtcstatsEnabled)&&void 0!==t&&t||(o.rtcstatsEnabled=!1);const s={properties:o,machineUid:$o.machineId,room:e};return i&&(s.sessionId=i),r.iAmRecorder||r.iAmSipGateway||(s.properties["visitors-version"]=1,this.options.preferVisitor&&(s.properties.visitor=!0)),s}_createConferenceIq(e){const t=this._createConferenceRequest(e),n=(0,St.$iq)({to:this.targetJid,type:"set"});n.c("conference",{xmlns:"http://jitsi.org/protocol/focus",room:e,"machine-uid":t.machineUid}),t.sessionId&&n.attrs({"session-id":t.sessionId});for(const e in t.properties)t.properties.hasOwnProperty(e)&&n.c("property",{name:e,value:t.properties[e]}).up();return n}_parseConferenceIq(e){const t={properties:{}};return t.focusJid=_t()(e).find("conference").attr("focusjid"),t.sessionId=_t()(e).find("conference").attr("session-id"),t.identity=_t()(e).find(">conference").attr("identity"),t.ready="true"===_t()(e).find("conference").attr("ready"),t.vnode=_t()(e).find("conference").attr("vnode"),_t()(e).find(">conference>property[name=\'authentication\'][value=\'true\']").length>0&&(t.properties.authentication="true"),_t()(e).find(">conference>property[name=\'externalAuth\'][value=\'true\']").length>0&&(t.properties.externalAuth="true"),_t()(e).find(">conference>property[name=\'sipGatewayEnabled\'][value=\'true\']").length>0&&(t.properties.sipGatewayEnabled="true"),t}sendConferenceRequest(e){return new Promise((t=>{"xmpp"===this.mode?(Go.info(`Sending conference request over XMPP to ${this.targetJid}`),this.connection.sendIQ(this._createConferenceIq(e),(n=>this._handleIqSuccess(e,n,t)),(n=>this._handleIqError(e,n,t))),this.connection.flush()):(Go.info(`Sending conference request over HTTP to ${this.targetUrl}`),fetch(this.targetUrl,{method:"POST",body:JSON.stringify(this._createConferenceRequest(e)),headers:{"Content-Type":"application/json"}}).then((n=>{n.ok?n.json().then((n=>{this._handleSuccess(e,n,t)})):n.text().then((i=>{Go.warn(`Received HTTP ${n.status} ${n.statusText}. Body: ${i}`);const r=400===n.status&&i.indexOf("400 invalid-session")>0,o=403===n.status;this._handleError(e,r,o,t)})).catch((t=>{Go.warn(`Error: ${t}`),this._handleError(e)}))})).catch((t=>{Go.warn(`Error: ${t}`),this._handleError(e)})))}))}_handleSuccess(e,t,n){this.getNextErrorTimeout(!0),t.focusJid?(Go.info(`Adding focus JID: ${t.focusJid}`),this.focusUserJids.add(t.focusJid)):Go.warn("Conference request response contained no focusJid.");const i="true"===t.properties.authentication;if(Go.info(`Authentication enabled: ${i}`),t.sessionId&&(Go.info(`Received sessionId: ${t.sessionId}`),$o.sessionId=t.sessionId),this.eventEmitter.emit(Bo.IDENTITY_UPDATED,i,t.identity),this.sipGatewayEnabled=t.properties.sipGatewayEnabled,Go.info(`Sip gateway enabled: ${this.sipGatewayEnabled}`),t.ready){if(this.getNextTimeout(!0),t.vnode&&!this.options.iAmRecorder&&!this.options.iAmSipGateway)return Go.warn(`Redirected to: ${t.vnode} with focusJid ${t.focusJid}`),void this.xmpp.eventEmitter.emit(pr,t.vnode,t.focusJid);Go.info("Conference-request successful, ready to join the MUC."),n()}else{const t=this.getNextTimeout();Go.info(`Not ready yet, will retry in ${t} ms.`),window.setTimeout((()=>this.sendConferenceRequest(e).then(n)),t)}}_handleError(e,t,n,i){if(t&&(Go.info("Session expired! - removing"),$o.sessionId=void 0),n)return Go.warn("Unauthorized to start the conference"),void this.eventEmitter.emit(qo.AUTHENTICATION_REQUIRED);const r=this.getNextErrorTimeout();t&&r<6e4?(Go.info(`Invalid session, will retry after ${r} ms.`),this.getNextTimeout(!0),window.setTimeout((()=>this.sendConferenceRequest(e).then(i)),r)):(Go.error("Failed to get a successful response, giving up."),this.eventEmitter.emit(qo.FOCUS_DISCONNECTED))}_handleIqError(e,t,n){const i=_t()(t).find(">error>reservation-error");if(i.length){const e=i.attr("error-code"),n=_t()(t).find(">error>text");let r;return n&&(r=n.text()),void this.eventEmitter.emit(qo.RESERVATION_ERROR,e,r)}const r=Boolean(_t()(t).find(">error>session-invalid").length||_t()(t).find(">error>not-acceptable").length),o=_t()(t).find(">error>not-authorized").length>0;this._handleError(e,r,o,n)}_handleIqSuccess(e,t,n){const i=this._parseConferenceIq(t);this._handleSuccess(e,i,n)}authenticate(e){return new Promise(((t,n)=>{this.connection.sendIQ(this._createConferenceIq(e),(e=>{const n=_t()(e).find("conference").attr("session-id");n?(Go.info(`Received sessionId: ${n}`),$o.sessionId=n):Go.warn("Response did not contain a session-id"),t()}),(e=>n({error:_t()(e).find("iq>error :first").prop("tagName"),message:_t()(e).find("iq>error>text").text()})))}))}logout(e){const t=(0,St.$iq)({to:this.targetJid,type:"set"}),{sessionId:n}=$o;n?(t.c("logout",{xmlns:"http://jitsi.org/protocol/focus","session-id":n}),this.connection.sendIQ(t,(t=>{Go.info("Log out OK",t),$o.sessionId=void 0,e()}),(e=>{Go.error("Logout error",e)}))):e()}}let Wo;!function(e){e.ON="on",e.OFF="off"}(Wo||(Wo={}));const Xo=Wo.ON,Yo=Wo.OFF;var Qo=n(408);const Zo=(0,E.getLogger)("modules/xmpp/AVModeration.js");class es{constructor(e){this._xmpp=e.xmpp,this._mainRoom=e,this._moderationEnabledByType={[Ri.AUDIO]:!1,[Ri.VIDEO]:!1},this._whitelistAudio=[],this._whitelistVideo=[],this._onMessage=this._onMessage.bind(this),this._xmpp.addListener(Hi.XMPPEvents.AV_MODERATION_RECEIVED,this._onMessage)}dispose(){this._xmpp.removeListener(Hi.XMPPEvents.AV_MODERATION_RECEIVED,this._onMessage)}isSupported(){return Boolean(this._xmpp.avModerationComponentAddress)}enable(e,t){if(!this.isSupported()||!this._mainRoom.isModerator())return void Zo.error(`Cannot enable:${e} AV moderation supported:${this.isSupported()},\\n moderator:${this._mainRoom.isModerator()}`);if(e===this._moderationEnabledByType[t])return void Zo.warn(`Moderation already in state:${e} for mediaType:${t}`);const n=(0,St.$msg)({to:this._xmpp.avModerationComponentAddress});n.c("av_moderation",{enable:e,mediaType:t}).up(),this._xmpp.connection.send(n)}approve(e,t){if(!this.isSupported()||!this._mainRoom.isModerator())return void Zo.error(`Cannot approve in AV moderation supported:${this.isSupported()},\\n moderator:${this._mainRoom.isModerator()}`);const n=(0,St.$msg)({to:this._xmpp.avModerationComponentAddress});n.c("av_moderation",{mediaType:e,jidToWhitelist:t}).up(),this._xmpp.connection.send(n)}reject(e,t){if(!this.isSupported()||!this._mainRoom.isModerator())return void Zo.error(`Cannot reject in AV moderation supported:${this.isSupported()},\\n moderator:${this._mainRoom.isModerator()}`);const n=(0,St.$msg)({to:this._xmpp.avModerationComponentAddress});n.c("av_moderation",{mediaType:e,jidToBlacklist:t}).up(),this._xmpp.connection.send(n)}_onMessage(e){const{removed:t,mediaType:n,enabled:i,approved:r,actor:o,whitelists:s}=e;if(s){const e=n===Ri.AUDIO?this._whitelistAudio:this._whitelistVideo,i=Array.isArray(s[n])?s[n]:[];t?e.filter((e=>!i.includes(e))).forEach((e=>this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_PARTICIPANT_REJECTED,n,e))):i.filter((t=>!e.includes(t))).forEach((e=>this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_PARTICIPANT_APPROVED,n,e))),n===Ri.AUDIO?this._whitelistAudio=i:this._whitelistVideo=i}else void 0!==i&&this._moderationEnabledByType[n]!==i?(this._moderationEnabledByType[n]=i,this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_CHANGED,i,n,o)):t?this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_REJECTED,n):r&&this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_APPROVED,n)}}const ts="features/breakout-rooms",ns={ADD:`${ts}/add`,MOVE_TO_ROOM:`${ts}/move-to-room`,REMOVE:`${ts}/remove`,RENAME:`${ts}/rename`},is=`${ts}/move-to-room`,rs=`${ts}/update`,os=(0,E.getLogger)("modules/xmpp/BreakoutRooms.js");class ss{constructor(e){this.room=e,this._handleMessages=this._handleMessages.bind(this),this.room.xmpp.addListener(Hi.XMPPEvents.BREAKOUT_ROOMS_EVENT,this._handleMessages),this._rooms={}}dispose(){this.room.xmpp.removeListener(Hi.XMPPEvents.BREAKOUT_ROOMS_EVENT,this._handleMessages)}createBreakoutRoom(e){if(!this.isSupported()||!this.room.isModerator())return void os.error(`Cannot create breakout room - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const t={type:ns.ADD,subject:e};this._sendMessage(t)}removeBreakoutRoom(e){if(!this.isSupported()||!this.room.isModerator())return void os.error(`Cannot remove breakout room - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const t={type:ns.REMOVE,breakoutRoomJid:e};this._sendMessage(t)}renameBreakoutRoom(e,t){if(!this.isSupported()||!this.room.isModerator())return void os.error(`Cannot rename breakout room - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const n={type:ns.RENAME,breakoutRoomJid:e,subject:t};this._sendMessage(n)}sendParticipantToRoom(e,t){if(!this.isSupported()||!this.room.isModerator())return void os.error(`Cannot send participant to room - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const n={type:ns.MOVE_TO_ROOM,participantJid:e,roomJid:t};this._sendMessage(n)}isFeatureSupported(e){return Boolean((this.room.xmpp.breakoutRoomsFeatures||{})[e])}isSupported(){return Boolean(this.getComponentAddress())}getComponentAddress(){return this.room.xmpp.breakoutRoomsComponentAddress}_setIsBreakoutRoom(e){this._isBreakoutRoom=e}isBreakoutRoom(){return void 0!==this._isBreakoutRoom?this._isBreakoutRoom:St.Strophe.getDomainFromJid(this.room.myroomjid)===this.getComponentAddress()}_setMainRoomJid(e){this._mainRoomJid=e}getMainRoomJid(){return this._mainRoomJid}_handleMessages(e){switch(e.event){case is:this.room.eventEmitter.emit(Hi.XMPPEvents.BREAKOUT_ROOMS_MOVE_TO_ROOM,e.roomJid);break;case rs:{const t=this._filterUpdatePayload(e);this._rooms=t.rooms,this.room.eventEmitter.emit(Hi.XMPPEvents.BREAKOUT_ROOMS_UPDATED,t);break}}}_filterUpdatePayload(e){const t=this.room.options.hiddenDomain,{rooms:n}=e,i={};return Object.entries(n).forEach((e=>{let[n,r]=e;const{participants:o={}}=r,s={};Object.entries(o).forEach((e=>{let[n,i]=e;St.Strophe.getDomainFromJid(i.jid)!==t&&(s[n]=i)})),i[n]={...r,participants:s}})),{...e,rooms:i}}_sendMessage(e){const t=(0,St.$msg)({to:this.getComponentAddress()});t.c("breakout_rooms",e).up(),this.room.xmpp.connection.send(t)}}const as=(0,E.getLogger)("modules/xmpp/Lobby.js"),ds="email";class cs{constructor(e){this.xmpp=e.xmpp,this.mainRoom=e;const t=this._maybeJoinLobbyRoom.bind(this);this.mainRoom.addEventListener(Hi.XMPPEvents.LOCAL_ROLE_CHANGED,t),this.mainRoom.addEventListener(Hi.XMPPEvents.MUC_MEMBERS_ONLY_CHANGED,t),this.mainRoom.addEventListener(Hi.XMPPEvents.ROOM_CONNECT_MEMBERS_ONLY_ERROR,(e=>{this.lobbyRoomJid=e}))}isSupported(){return this.xmpp.lobbySupported}enable(){return this.isSupported()?this.mainRoom.initialDiscoRoomInfoReceived?this.mainRoom.membersOnlyEnabled?Promise.resolve():new Promise(((e,t)=>{this.mainRoom.setMembersOnly(!0,e,t)})):new Promise(((e,t)=>{let n=[];const i=()=>{n.forEach((e=>e())),n=[]};n.push(this.mainRoom.addCancellableListener(Hi.XMPPEvents.ROOM_DISCO_INFO_UPDATED,(()=>{i(),this.mainRoom.membersOnlyEnabled?e():this.mainRoom.setMembersOnly(!0,e,t)}))),n.push(this.mainRoom.addCancellableListener(Hi.XMPPEvents.ROOM_DISCO_INFO_FAILED,(e=>{i(),t(e)})))})):Promise.reject(new Error("Lobby not supported!"))}disable(){this.isSupported()&&this.mainRoom.isModerator()&&this.lobbyRoom&&this.mainRoom.membersOnlyEnabled&&this.mainRoom.setMembersOnly(!1)}sendMessage(e){this.lobbyRoom&&this.lobbyRoom.sendMessage(JSON.stringify(e),"json-message")}sendPrivateMessage(e,t){this.lobbyRoom&&this.lobbyRoom.sendPrivateMessage(e,JSON.stringify(t),"json-message")}getLocalId(){if(this.lobbyRoom)return St.Strophe.getResourceFromJid(this.lobbyRoom.myroomjid)}addMessageListener(e){if(this.lobbyRoom){const t=(t,n)=>{e(n,St.Strophe.getResourceFromJid(t))};return this.lobbyRoom.on(Hi.XMPPEvents.JSON_MESSAGE_RECEIVED,t),t}}removeMessageHandler(e){this.lobbyRoom&&this.lobbyRoom.off(Hi.XMPPEvents.JSON_MESSAGE_RECEIVED,e)}leave(){return this.lobbyRoom?this.lobbyRoom.leave().then((()=>{this.lobbyRoom=void 0,as.info("Lobby room left!")})).catch((()=>{})):Promise.reject(new Error("The lobby has already been left"))}setLobbyRoomJid(e){this.lobbyRoomJid=e}_maybeJoinLobbyRoom(){this.isSupported()&&this.mainRoom.joined&&this.mainRoom.isModerator()&&this.mainRoom.membersOnlyEnabled&&!this.lobbyRoom&&this.join().then((()=>as.info("Joined lobby room"))).catch((e=>as.error("Failed joining lobby",e)))}join(e,t){const n=this.mainRoom.joined&&this.mainRoom.isModerator();if(!this.lobbyRoomJid)return Promise.reject(new Error("Missing lobbyRoomJid, cannot join lobby room."));const i=St.Strophe.getNodeFromJid(this.lobbyRoomJid),r=St.Strophe.getDomainFromJid(this.lobbyRoomJid);return this.lobbyRoom=this.xmpp.createRoom(i,{customDomain:r,disableDiscoInfo:!0,disableFocus:!0,enableLobby:!1}),e&&this.lobbyRoom.addOrReplaceInPresence("nick",{attributes:{xmlns:"http://jabber.org/protocol/nick"},value:e}),n?(this.lobbyRoom.addPresenceListener(ds,((e,t)=>{this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_LOBBY_MEMBER_UPDATED,t,{email:e.value})})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_MEMBER_JOINED,((e,t,n,i,r,o,s,a,d)=>{if(!Object.values(this.mainRoom.members).find((e=>e.jid===d))){for(const e of Object.values(this.mainRoom.getBreakoutRooms()._rooms))if(Object.values(e.participants).find((e=>e.jid===d)))return;this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_LOBBY_MEMBER_JOINED,St.Strophe.getResourceFromJid(e),t,s?s.avatar:void 0)}})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,(e=>{this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_LOBBY_MEMBER_LEFT,St.Strophe.getResourceFromJid(e))})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_DESTROYED,(()=>{Object.keys(this.lobbyRoom.members).forEach((e=>this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_LOBBY_MEMBER_LEFT,St.Strophe.getResourceFromJid(e)))),this.lobbyRoom.clean(),this.lobbyRoom=void 0,as.info("Lobby room left(destroyed)!")}))):(this.lobbyRoom.addEventListener(Hi.XMPPEvents.KICKED,(e=>{if(e)return this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_DENIED_ACCESS),void this.lobbyRoom.clean()})),this.mainRoom.addEventListener(Hi.XMPPEvents.INVITE_MESSAGE_RECEIVED,((e,t,n,i)=>{as.debug(`Received approval to join ${e} ${t} ${n}`),e===this.mainRoom.roomjid&&this.mainRoom.join(i)})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_DESTROYED,((e,t)=>{var n;null===(n=this.lobbyRoom)||void 0===n||n.clean(),this.lobbyRoom=void 0,as.info("Lobby room left(destroyed)!"),t?this.mainRoom.join():this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_DESTROYED,e)})),this.mainRoom.addEventListener(Hi.XMPPEvents.MUC_JOINED,(()=>{this.leave().catch((()=>{}))}))),new Promise(((e,i)=>{this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_JOINED,(()=>{e(),t&&!n&&this.lobbyRoom.addOrReplaceInPresence(ds,{value:t})&&this.lobbyRoom.sendPresence()})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.ROOM_JOIN_ERROR,i),this.lobbyRoom.addEventListener(Hi.XMPPEvents.ROOM_CONNECT_NOT_ALLOWED_ERROR,i),this.lobbyRoom.addEventListener(Hi.XMPPEvents.ROOM_CONNECT_ERROR,i),this.lobbyRoom.join()}))}denyAccess(e){if(!this.isSupported()||!this.mainRoom.isModerator())return;const t=Object.keys(this.lobbyRoom.members).find((t=>St.Strophe.getResourceFromJid(t)===e));t?this.lobbyRoom.kick(t):as.error(`Not found member for ${e} in lobby room.`)}approveAccess(e){if(!this.isSupported()||!this.mainRoom.isModerator())return;let t=this.mainRoom.roomjid;this.mainRoom.getBreakoutRooms().isBreakoutRoom()&&(t=this.mainRoom.getBreakoutRooms().getMainRoomJid());const n=[];let i=e;if(Array.isArray(e)||(i=[e]),i.forEach((e=>{const t=Object.keys(this.lobbyRoom.members).find((t=>St.Strophe.getResourceFromJid(t)===e));t?n.push(this.lobbyRoom.members[t].jid):as.error(`Not found member for ${t} in lobby room.`)})),n.length>0){const e=(0,St.$msg)({to:t}).c("x",{xmlns:"http://jabber.org/protocol/muc#user"});n.forEach((t=>{e.c("invite",{to:t}).up()})),this.xmpp.connection.sendIQ(e,(()=>{}),(e=>{as.error(`Error sending invite for ${n}`,e)}))}}}const ls=(0,E.getLogger)("modules/xmpp/RoomMetadata.ts");class hs{constructor(e){this.room=e,this._handleMessages=this._handleMessages.bind(this),this.room.xmpp.addListener(Hi.XMPPEvents.ROOM_METADATA_EVENT,this._handleMessages),this._metadata={}}dispose(){this.room.xmpp.removeListener(Hi.XMPPEvents.ROOM_METADATA_EVENT,this._handleMessages)}setMetadata(e,t){if(!this.isSupported()||!this.room.isModerator())return void ls.error(`Cannot set room metadata - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const n={key:e,data:t};this._sendMessage(n)}getMetadata(){return this._metadata}isSupported(){return Boolean(this.getComponentAddress())}getComponentAddress(){return this.room.xmpp.roomMetadataComponentAddress}_handleMessages(e){const{metadata:t}=e;t&&!Et()(this._metadata,t)&&(this._metadata=t,this.room.eventEmitter.emit(Hi.XMPPEvents.ROOM_METADATA_UPDATED,t))}_sendMessage(e){e[Aa]="room_metadata";const t=(0,St.$msg)({to:this.getComponentAddress()});t.c("room_metadata",{room:this.room.roomjid,xmlns:"http://jitsi.org/jitmeet"},JSON.stringify(e)).up(),this.room.xmpp.connection.send(t)}}const us=(0,E.getLogger)("modules/xmpp/ChatRoom.js"),ps={packet2JSON(e,t){for(const n of Array.from(e.children)){const e={attributes:{},children:[],tagName:n.tagName};for(const t of Array.from(n.attributes))e.attributes[t.name]=t.value;const i=St.Strophe.getText(n);i&&(e.value=St.Strophe.xmlunescape(i)),t.push(e),this.packet2JSON(n,e.children)}},json2packet(e,t){for(let n=0;n"user"===e.tagName));if(i){n.user={};const e=["id","name","avatar"];t&&e.push("hidden-from-recorder");for(const t of e){const e=i.children.find((e=>e.tagName===t));e&&(n.user[t]=e.value)}}const r=e.children.find((e=>"group"===e.tagName));return r&&(n.group=r.value),n}class vs extends xr{constructor(e,t,n,i,r){super(),this.xmpp=i,this.connection=e,this.roomjid=St.Strophe.getBareJidFromJid(t),this.myroomjid=t,this.password=n,this.replaceParticipant=!1,us.info(`Joining MUC as ${this.myroomjid}`),this.members={},this.presMap={},this.presHandlers={},this._removeConnListeners=[],this.joined=!1,this.inProgressEmitted=!1,this.role=null,this.focusMucJid=null,this.noBridgeAvailable=!1,this.options=r||{},this.eventsForwarder=new(Fi())(this.xmpp.moderator,this.eventEmitter),this.eventsForwarder.forward(Ui().IDENTITY_UPDATED,Ui().IDENTITY_UPDATED),this.eventsForwarder.forward(Hi.XMPPEvents.AUTHENTICATION_REQUIRED,Hi.XMPPEvents.AUTHENTICATION_REQUIRED),this.eventsForwarder.forward(Hi.XMPPEvents.FOCUS_DISCONNECTED,Hi.XMPPEvents.FOCUS_DISCONNECTED),this.eventsForwarder.forward(Hi.XMPPEvents.RESERVATION_ERROR,Hi.XMPPEvents.RESERVATION_ERROR),(void 0===this.options.enableLobby||this.options.enableLobby)&&(this.lobby=new cs(this)),this.avModeration=new es(this),this.breakoutRooms=new ss(this),this.roomMetadata=new hs(this),this.initPresenceMap(r),this.lastPresences={},this.phoneNumber=null,this.phonePin=null,this.connectionTimes={},this.participantPropertyListener=null,this.locked=!1,this.transcriptionStatus=Yo,this.initialDiscoRoomInfoReceived=!1}initPresenceMap(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.presMap.to=this.myroomjid,this.presMap.xns="http://jabber.org/protocol/muc",this.presMap.nodes=[],e.statsId&&this.presMap.nodes.push({tagName:"stats-id",value:e.statsId}),this.presenceUpdateTime=Date.now()}join(e,t){return this.password=e,this.replaceParticipant=t,new Promise((e=>{this.options.disableFocus&&us.info(`Conference focus disabled for ${this.roomjid}`),(this.options.disableFocus?Promise.resolve():this.xmpp.moderator.sendConferenceRequest(this.roomjid)).then((()=>{this.sendPresence(!0),this._removeConnListeners.push(this.connection.addCancellableListener(Lo.Events.CONN_STATUS_CHANGED,this.onConnStatusChanged.bind(this))),e()}))}))}sendPresence(e){const t=this.presMap.to;if(!this.connection||!this.connection.connected||!t||!this.joined&&!e)return;const n=(0,St.$pres)({to:t});e&&(this.replaceParticipant&&n.c("flip_device").up(),n.c("x",{xmlns:this.presMap.xns}),this.password&&n.c("password").t(this.password).up(),this.xmpp.moderator.targetUrl&&n.c("billingid").t($o.machineId).up(),n.up()),ps.json2packet(this.presMap.nodes,n),this.presenceSyncTime=Date.now(),this.connection.send(n),e&&this.connection.flush()}doLeave(e){us.log("do leave",this.myroomjid);const t=(0,St.$pres)({to:this.myroomjid,type:"unavailable"});e&&t.c("status").t(e).up(),this.presMap.length=0,!this.connection.isUsingWebSocket&&this.connection.flush(),this.connection.send(t),this.connection.flush()}discoRoomInfo(){const e=(0,St.$iq)({type:"get",to:this.roomjid}).c("query",{xmlns:St.Strophe.NS.DISCO_INFO});this.connection.sendIQ(e,(e=>{const t=1===_t()(e).find(\'>query>feature[var="muc_passwordprotected"]\').length;t!==this.locked&&(this.eventEmitter.emit(Hi.XMPPEvents.MUC_LOCK_CHANGED,t),this.locked=t);const n=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_meetingId"]>value\');n.length?this.setMeetingId(n.text()):us.warn("No meeting ID from backend");const i=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_created_timestamp"]>value\');i.length?this.eventEmitter.emit(Hi.XMPPEvents.CONFERENCE_TIMESTAMP_RECEIVED,i.text()):us.warn("No conference duration from backend");const r=1===_t()(e).find(\'>query>feature[var="muc_membersonly"]\').length,o=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_lobbyroom"]>value\');this.lobby&&this.lobby.setLobbyRoomJid(o&&o.length?o.text():void 0);const s=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_isbreakout"]>value\'),a=Boolean(null==s?void 0:s.text());this.breakoutRooms._setIsBreakoutRoom(a);const d=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_breakout_main_room"]>value\');null!=d&&d.length&&this.breakoutRooms._setMainRoomJid(d.text()),r!==this.membersOnlyEnabled&&(this.membersOnlyEnabled=r,this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBERS_ONLY_CHANGED,r));const c="1"===_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_visitorsEnabled"]>value\').text();c!==this.visitorsSupported&&(this.visitorsSupported=c,this.eventEmitter.emit(Hi.XMPPEvents.MUC_VISITORS_SUPPORTED_CHANGED,c));const l=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_jitsimetadata"]>value\'),h=null==l?void 0:l.text();if(h)try{this.roomMetadata._handleMessages(_r(h))}catch(e){us.warn("Failed to set room metadata",e)}this.initialDiscoRoomInfoReceived=!0,this.eventEmitter.emit(Hi.XMPPEvents.ROOM_DISCO_INFO_UPDATED)}),(e=>{us.error("Error getting room info: ",e),this.eventEmitter.emit(Hi.XMPPEvents.ROOM_DISCO_INFO_FAILED,e)}),1e4)}setMeetingId(e){this.meetingId!==e&&(this.meetingId&&us.warn(`Meeting Id changed from:${this.meetingId} to:${e}`),this.meetingId=e,this.eventEmitter.emit(Hi.XMPPEvents.MEETING_ID_SET,e))}createNonAnonymousRoom(){if(this.options.disableDiscoInfo)return;const e=(0,St.$iq)({type:"get",to:this.roomjid}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}).c("x",{xmlns:"jabber:x:data",type:"submit"});this.connection.sendIQ(e,(e=>{if(!_t()(e).find(\'>query>x[xmlns="jabber:x:data"]>field[var="muc#roomconfig_whois"]\').length)return void us.error("non-anonymous rooms not supported");const t=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});t.c("x",{xmlns:"jabber:x:data",type:"submit"}),t.c("field",{var:"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up(),t.c("field",{var:"muc#roomconfig_whois"}).c("value").t("anyone").up().up(),this.connection.sendIQ(t)}),(e=>{us.error("Error getting room configuration form: ",e)}))}onConnStatusChanged(e){e===Lo.Status.CONNECTED&&this.presenceUpdateTime>this.presenceSyncTime&&this.sendPresence()}onPresence(e){const t=e.getAttribute("from"),n={},i=e.getElementsByTagName("status")[0];i&&(n.status=i.textContent||"");let r=!1,o=!1;const s=e.getElementsByTagNameNS("http://jabber.org/protocol/muc#user","x")[0],a=s&&s.getElementsByTagName("item")[0];n.isReplaceParticipant=e.getElementsByTagName("flip_device").length,n.affiliation=a&&a.getAttribute("affiliation"),n.role=a&&a.getAttribute("role");const d=a&&a.getAttribute("jid");n.jid=d,n.isFocus=this.xmpp.moderator.isFocusJid(d),n.isHiddenDomain=d&&d.indexOf("@")>0&&this.options.hiddenDomain===d.substring(d.indexOf("@")+1,d.indexOf("/")),this.eventEmitter.emit(Hi.XMPPEvents.PRESENCE_RECEIVED,{fromHiddenDomain:n.isHiddenDomain,presence:e});const c=e.querySelector("x");c&&c.remove();const l=[];ps.packet2JSON(e,l),this.lastPresences[t]=l;for(let e=0;e=this.presenceSyncTime&&this.sendPresence(),this.eventEmitter.emit(Hi.XMPPEvents.MUC_JOINED),!this.options.disableDiscoInfo&&this.discoRoomInfo()}}else if(void 0===d)us.info("Ignoring member with undefined JID");else if(void 0===this.members[t])this.members[t]=n,us.log("entered",t,n),r=void 0!==n.status,o=void 0!==n.version,n.isFocus?this._initFocus(t,n.features):(this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBER_JOINED,t,n.nick,n.role,n.isHiddenDomain,n.statsID,n.status,n.identity,n.botType,n.jid,n.features,n.isReplaceParticipant),r=!1);else{const e=this.members[t];e.role!==n.role&&(e.role=n.role,this.eventEmitter.emit(Hi.XMPPEvents.MUC_ROLE_CHANGED,t,n.role)),e.affiliation!==n.affiliation&&(e.affiliation=n.affiliation),e.botType!==n.botType&&(e.botType=n.botType,this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBER_BOT_TYPE_CHANGED,t,n.botType)),n.isFocus&&(e.isFocus=!0,this._initFocus(t,n.features)),n.displayName&&(e.displayName=n.displayName),e.status!==n.status&&(r=!0,e.status=n.status),e.version!==n.version&&(o=!0,e.version=n.version),Et()(e.features,n.features)||(e.features=n.features,this.eventEmitter.emit(Hi.XMPPEvents.PARTICIPANT_FEATURES_CHANGED,t,n.features))}for(let e=0;e{n(e,St.Strophe.getResourceFromJid(t),t)}))}catch(t){us.error(`Error processing:${e.tagName} node.`,t)}}sendMessage(e,t){const n=(0,St.$msg)({to:this.roomjid,type:"groupchat"});"body"===t?n.c(t,{},e):n.c(t,{xmlns:"http://jitsi.org/jitmeet"},e),this.connection.send(n),this.eventEmitter.emit(Hi.XMPPEvents.SENDING_CHAT_MESSAGE,e)}sendPrivateMessage(e,t,n){const i=(0,St.$msg)({to:`${this.roomjid}/${e}`,type:"chat"});"body"===n?i.c(n,t).up():i.c(n,{xmlns:"http://jitsi.org/jitmeet"},t).up(),this.connection.send(i),this.eventEmitter.emit(Hi.XMPPEvents.SENDING_PRIVATE_CHAT_MESSAGE,t)}setSubject(e){const t=(0,St.$msg)({to:this.roomjid,type:"groupchat"});t.c("subject",e),this.connection.send(t)}onPresenceUnavailable(e,t){if(_t()(e).find(\'>ignore[xmlns="http://jitsi.org/jitmeet/"]\').length)return!0;const n=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>destroy\');if(n.length){let t;const i=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>destroy>reason\');return i.length&&(t=i.text()),this.eventEmitter.emit(Hi.XMPPEvents.MUC_DESTROYED,t,n.attr("jid")),this.connection.emuc.doLeave(this.roomjid),!0}const i=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="110"]\').length,r=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="307"]\').length,o=Object.keys(this.members),s=_t()(e).find("flip_device").length;if(r){const n=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>item>actor\');let r,o;n.length&&(r=n.attr("nick"));const a=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>item>reason\');a.length&&(o=a.text()),this.eventEmitter.emit(Hi.XMPPEvents.KICKED,i,r,St.Strophe.getResourceFromJid(t),o,s)}if(i)o.forEach((e=>{const t=this.members[e];delete this.members[e],delete this.lastPresences[e],t.isFocus||this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBER_LEFT,e)})),this.connection.emuc.doLeave(this.roomjid),r||this.eventEmitter.emit(Hi.XMPPEvents.MUC_LEFT);else{const n=_t()(e).find(">status"),i=this.members[t];let r;n.length&&(r=n.text()),delete this.members[t],delete this.lastPresences[t],this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBER_LEFT,t,r),null!=i&&i.isFocus&&(us.info("Focus has left the room - leaving conference"),this.eventEmitter.emit(Hi.XMPPEvents.FOCUS_LEFT))}}onMessage(e,t){const n=e.getAttribute("type");if("error"===n){const t=_t()(e).find(">settings-error>text").text();if(t.length)return this.eventEmitter.emit(Hi.XMPPEvents.SETTINGS_ERROR_RECEIVED,t),!0;const n=_t()(e).find(">error>text").text();return this.eventEmitter.emit(Hi.XMPPEvents.CHAT_ERROR_RECEIVED,n),!0}const i=_t()(e).find(">body").text(),r=_t()(e).find(">subject");if(r.length){const e=r.text();(e||""===e)&&(this.eventEmitter.emit(Hi.XMPPEvents.SUBJECT_CHANGED,e),us.log(`Subject is changed to ${e}`))}let o=_t()(e).find(">delay").attr("stamp");if(!o&&(o=_t()(e).find(\'>[xmlns="jabber:x:delay"]\').attr("stamp"),o)){const e=o.match(/(\\d{4})(\\d{2})(\\d{2}T\\d{2}:\\d{2}:\\d{2})/);o=`${e[1]}-${e[2]}-${e[3]}Z`}if(t===this.roomjid){let n;if(_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="104"]\').length)this.discoRoomInfo();else if((n=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>invite\'))&&n.length){const r=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>password\');let o;r&&r.length&&(o=r.text()),this.eventEmitter.emit(Hi.XMPPEvents.INVITE_MESSAGE_RECEIVED,t,n.attr("from"),i,o)}}const s=_t()(e).find(">json-message").text();if(s){const e=this.xmpp.tryParseJSONAndVerify(s);if(e&&void 0===o)return void this.eventEmitter.emit(Hi.XMPPEvents.JSON_MESSAGE_RECEIVED,t,e)}if(i)if("chat"===n)this.eventEmitter.emit(Hi.XMPPEvents.PRIVATE_MESSAGE_RECEIVED,t,i,this.myroomjid,o);else if("groupchat"===n){const n=_t()(e).find(">nick");let r;n.length>0&&(r=n.text()),this.eventEmitter.emit(Hi.XMPPEvents.MESSAGE_RECEIVED,t,i,this.myroomjid,o,r,Boolean(r))}}onPresenceError(e,t){let n;if(_t()(e).find(\'>error[type="auth"]>not-authorized[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]\').length)us.log("on password required",t),this.eventEmitter.emit(Hi.XMPPEvents.PASSWORD_REQUIRED);else if(_t()(e).find(\'>error[type="cancel"]>not-allowed[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]\').length)if(St.Strophe.getDomainFromJid(e.getAttribute("to"))===this.xmpp.options.hosts.anonymousdomain)this.eventEmitter.emit(Hi.XMPPEvents.ROOM_JOIN_ERROR);else{us.warn("onPresError ",e);const t=_t()(e).find(\'>error[type="cancel"]>text[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]\'),n=t.length&&t.text();if("Room creation is restricted"===n&&(this._roomCreationRetries||(this._roomCreationRetries=0),this._roomCreationRetries++,this._roomCreationRetries<=3)){const e=Ro(this._roomCreationRetries,500,1.5);return void setTimeout((()=>this.join(this.password,this.replaceParticipant)),e)}this.eventEmitter.emit(Hi.XMPPEvents.ROOM_CONNECT_NOT_ALLOWED_ERROR,n)}else if(_t()(e).find(">error>service-unavailable").length)us.warn("Maximum users limit for the room has been reached",e),this.eventEmitter.emit(Hi.XMPPEvents.ROOM_MAX_USERS_ERROR);else if(_t()(e).find(\'>error[type="auth"]>registration-required[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]\').length){const t=_t()(e).find(\'>error[type="auth"]>lobbyroom\');let n;t.length&&(n=t.text());const i=_t()(e).find(\'>error[type="auth"]>waiting-for-host\').length>0;this.eventEmitter.emit(Hi.XMPPEvents.ROOM_CONNECT_MEMBERS_ONLY_ERROR,n,i)}else if((n=_t()(e).find(\'>error[type="modify"]>displayname-required[xmlns="http://jitsi.org/jitmeet"]\')).length){var i;us.warn("display name required ",e),this.eventEmitter.emit(Hi.XMPPEvents.DISPLAY_NAME_REQUIRED,null===(i=n[0].attributes.lobby)||void 0===i?void 0:i.value)}else us.warn("onPresError ",e),this.eventEmitter.emit(Hi.XMPPEvents.ROOM_CONNECT_ERROR)}setAffiliation(e,t){const n=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#admin"}).c("item",{affiliation:t,jid:St.Strophe.getBareJidFromJid(e)}).c("reason").t(`Your affiliation has been changed to \'${t}\'.`).up().up().up();this.connection.sendIQ(n,(n=>us.log("Set affiliation of participant with jid: ",e,"to",t,n)),(e=>us.log("Set affiliation of participant error: ",e)))}kick(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"You have been kicked.";const n=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#admin"}).c("item",{nick:St.Strophe.getResourceFromJid(e),role:"none"}).c("reason").t(t).up().up().up();this.connection.sendIQ(n,(t=>us.log("Kick participant with jid: ",e,t)),(e=>us.log("Kick participant error: ",e)))}lockRoom(e,t,n,i){this.connection.sendIQ((0,St.$iq)({to:this.roomjid,type:"get"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}),(r=>{if(_t()(r).find(\'>query>x[xmlns="jabber:x:data"]>field[var="muc#roomconfig_roomsecret"]\').length){const i=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});i.c("x",{xmlns:"jabber:x:data",type:"submit"}),i.c("field",{var:"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up(),i.c("field",{var:"muc#roomconfig_roomsecret"}).c("value").t(e).up().up(),i.c("field",{var:"muc#roomconfig_passwordprotectedroom"}).c("value").t(null===e||0===e.length?"0":"1").up().up(),this.membersOnlyEnabled&&i.c("field",{var:"muc#roomconfig_membersonly"}).c("value").t("true").up().up(),i.c("field",{var:"muc#roomconfig_whois"}).c("value").t("anyone").up().up(),this.connection.sendIQ(i,(()=>{this.password=e,t()}),n)}else i()}),n)}setMembersOnly(e,t,n){if(e&&Object.values(this.members).filter((e=>!e.isFocus)).length){const e=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#admin"});Object.values(this.members).forEach((t=>{t.jid&&!gs.includes(t.affiliation)&&e.c("item",{affiliation:"member",jid:St.Strophe.getBareJidFromJid(t.jid)}).up()})),this.xmpp.connection.sendIQ(e.up())}const i=n||(()=>{});this.xmpp.connection.sendIQ((0,St.$iq)({to:this.roomjid,type:"get"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}),(n=>{if(_t()(n).find(\'>query>x[xmlns="jabber:x:data"]>field[var="muc#roomconfig_membersonly"]\').length){const n=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});n.c("x",{xmlns:"jabber:x:data",type:"submit"}),n.c("field",{var:"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up(),n.c("field",{var:"muc#roomconfig_membersonly"}).c("value").t(e?"true":"false").up().up(),this.locked&&n.c("field",{var:"muc#roomconfig_passwordprotectedroom"}).c("value").t("1").up().up(),this.xmpp.connection.sendIQ(n,t,i)}else i(new Error("Setting members only room not supported!"))}),i)}addToPresence(e,t){return this.addOrReplaceInPresence(e,t)}addOrReplaceInPresence(e,t){t.tagName=e;const n=this.presMap.nodes.filter((t=>e===t.tagName));return!(1===n.length&&Et()(n[0],t)||(this.removeFromPresence(e),this.presMap.nodes.push(t),this.presenceUpdateTime=Date.now(),0))}getFromPresence(e){return this.presMap.nodes.find((t=>e===t.tagName))}removeFromPresence(e){const t=this.presMap.nodes.filter((t=>e!==t.tagName));this.presMap.nodes=t,this.presenceUpdateTime=Date.now()}addPresenceListener(e,t){if("function"!=typeof t)throw new Error(\'"handler" is not a function\');let n=this.presHandlers[e];n||(this.presHandlers[e]=n=[]),-1===n.indexOf(t)?n.push(t):us.warn(`Trying to add the same handler more than once for: ${e}`)}removePresenceListener(e,t){const n=this.presHandlers[e],i=n?n.indexOf(t):-1;-1!==i?n.splice(i,1):us.warn(`Handler for: ${e} was not registered`)}isFocus(e){const t=this.members[e];return t?t.isFocus:null}isModerator(){return"moderator"===this.role}getMediaPresenceInfo(e,t){const n=this.lastPresences[`${this.roomjid}/${e}`];if(!n)return null;const i={muted:!0,videoType:t===Ri.VIDEO?Qo.VideoType.CAMERA:void 0};let r=null;if(t===Ri.AUDIO)r=ms(n,"audiomuted");else{if(t!==Ri.VIDEO)return us.error(`Unsupported media type: ${t}`),null;{r=ms(n,"videomuted");const e=ms(n,"jitsi_participant_codecType"),t=ms(n,"videoType");t.length>0&&(i.videoType=t[0].value),e.length>0&&(i.codecType=e[0].value)}}return r.length>0&&(i.muted="true"===r[0].value),i}getMemberRole(e){return this.members[e]?this.members[e].role:null}getLastPresence(e){return this.lastPresences[`${this.roomjid}/${e}`]}dial(e){return this.connection.rayo.dial(e,"fromnumber",St.Strophe.getBareJidFromJid(this.myroomjid),this.password,this.focusMucJid)}hangup(){return this.connection.rayo.hangup()}getLobby(){return this.lobby}getAVModeration(){return this.avModeration}getBreakoutRooms(){return this.breakoutRooms}getMetadataHandler(){return this.roomMetadata}getPhoneNumber(){return this.phoneNumber}getPhonePin(){return this.phonePin}getMeetingId(){return this.meetingId}muteParticipant(e,t,n){us.info("set mute",t,e);const i=(0,St.$iq)({to:this.focusMucJid,type:"set"}).c("mute",{xmlns:`http://jitsi.org/jitmeet/${n}`,jid:e}).t(t.toString()).up();this.connection.sendIQ(i,(e=>us.log("set mute",e)),(e=>us.log("set mute error",e)))}onMute(e){if(e.getAttribute("from")!==this.focusMucJid)return void us.warn("Ignored mute from non focus peer");const t=_t()(e).find("mute");t.length&&"true"===t.text()?this.eventEmitter.emit(Hi.XMPPEvents.AUDIO_MUTED_BY_FOCUS,t.attr("actor")):us.warn("Ignoring a mute request which does not explicitly specify a positive mute command.")}onMuteVideo(e){if(e.getAttribute("from")!==this.focusMucJid)return void us.warn("Ignored mute from non focus peer");const t=_t()(e).find("mute");t.length&&"true"===t.text()?this.eventEmitter.emit(Hi.XMPPEvents.VIDEO_MUTED_BY_FOCUS,t.attr("actor")):us.warn("Ignoring a mute request which does not explicitly specify a positive mute command.")}clean(){this._removeConnListeners.forEach((e=>e())),this._removeConnListeners=[],this.eventsForwarder.removeListeners(Ui().IDENTITY_UPDATED,Hi.XMPPEvents.AUTHENTICATION_REQUIRED,Hi.XMPPEvents.FOCUS_DISCONNECTED,Hi.XMPPEvents.RESERVATION_ERROR),this.joined=!1,this.inProgressEmitted=!1}leave(e){var t,n=this;this.avModeration.dispose(),this.breakoutRooms.dispose(),this.roomMetadata.dispose();const i=[];return(null===(t=this.lobby)||void 0===t?void 0:t.lobbyRoom)&&i.push(this.lobby.leave()),i.push(new Promise(((t,i)=>{let r=-1;const o=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n.eventEmitter.removeListener(Hi.XMPPEvents.MUC_LEFT,o),clearTimeout(r),n.clean(),e?(n.connection.emuc.doLeave(n.roomjid),i(new Error("The timeout for the confirmation about leaving the room expired."))):t()};this.joined?(r=setTimeout((()=>o(!0)),5e3),this.eventEmitter.on(Hi.XMPPEvents.MUC_LEFT,o),this.doLeave(e)):(this.connection.emuc.doLeave(this.roomjid),this.clean(),t())}))),Promise.allSettled(i)}end(){if(this.breakoutRooms.isBreakoutRoom())return void us.warn("Cannot end conference: this is a breakout room.");const e=(0,St.$msg)({to:this.xmpp.endConferenceComponentAddress});e.c("end_conference").up(),this.xmpp.connection.send(e)}}const _s=(0,E.getLogger)("modules/xmpp/strophe.emuc.js");class ys extends Oo{constructor(e){super(),this.xmpp=e,this.rooms={}}init(e){super.init(e),this.connection.addHandler(this.onPresence.bind(this),null,"presence",null,null,null,null),this.connection.addHandler(this.onPresenceUnavailable.bind(this),null,"presence","unavailable",null),this.connection.addHandler(this.onPresenceError.bind(this),null,"presence","error",null),this.connection.addHandler(this.onMessage.bind(this),null,"message",null,null),this.connection.addHandler(this.onMute.bind(this),"http://jitsi.org/jitmeet/audio","iq","set",null,null),this.connection.addHandler(this.onMuteVideo.bind(this),"http://jitsi.org/jitmeet/video","iq","set",null,null),this.connection.addHandler(this.onVisitors.bind(this),"jitsi:visitors","iq","set",null,null)}createRoom(e,t,n){const i=St.Strophe.getBareJidFromJid(e);if(this.isRoomCreated(i)){const e="You are already in the room!";throw _s.error(e),new Error(e)}return this.rooms[i]=new vs(this.connection,e,t,this.xmpp,n),this.eventEmitter.emit(Hi.XMPPEvents.EMUC_ROOM_ADDED,this.rooms[i]),this.rooms[i]}isRoomCreated(e){return e in this.rooms}doLeave(e){this.eventEmitter.emit(Hi.XMPPEvents.EMUC_ROOM_REMOVED,this.rooms[e]),delete this.rooms[e]}onPresence(e){const t=e.getAttribute("from");if(e.getAttribute("type"))return!0;const n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="201"]\').length&&n.createNonAnonymousRoom(),n.onPresence(e),!0)}onPresenceUnavailable(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onPresenceUnavailable(e,t),!0)}onPresenceError(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onPresenceError(e,t),!0)}onMessage(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onMessage(e,t),!0)}onMute(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onMute(e),!0)}onMuteVideo(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onMuteVideo(e),!0)}onVisitors(e){const t=e.getAttribute("from");if(!this.rooms[St.Strophe.getBareJidFromJid(t)])return!0;const n=_t()(e).find(\'>visitors[xmlns="jitsi:visitors"]\'),i=_t()(e).find("promotion-response");return n.length&&i.length&&("true"===String(i.attr("allow")).toLowerCase()?(_s.info("Promotion request accepted. Redirected to main room."),this.xmpp.eventEmitter.emit(pr,void 0,n.attr("focusjid"),i.attr("username"))):(_s.info("Promotion request rejected."),this.xmpp.eventEmitter.emit(Hi.XMPPEvents.VISITORS_REJECTION))),!0}}var Es=n(138),Ss=n.n(Es);const bs=(0,E.getLogger)("modules/xmpp/JingleHelperFunctions.js");function Ts(e,t){const n=(0,St.$build)("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",ssrc:t.s,name:t.n});return t.m&&n.c("parameter",{name:"msid",value:t.m}).up(),n.c("ssrc-info",{xmlns:"http://jitsi.org/jitmeet",owner:e}).up(),n.node}function Cs(e){const t=(0,St.$build)("ssrc-group",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",semantics:(n=e[0],"f"===n?"FID":"s"===n?"SIM":null)});var n;for(let n=1;n1&&n[1],h=(null==n?void 0:n.length)>2&&n[2],u=(null==n?void 0:n.length)>3&&n[3];if(null!=c&&c.length)for(let n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.options=e,this.obtainStream=this._createObtainStreamMethod(),this.obtainStream||ws.info("Desktop sharing disabled")},_createObtainStreamMethod(){return ci.isElectron()?this.obtainScreenOnElectron:ci.isReactNative()&&ci.supportsGetDisplayMedia()?this.obtainScreenFromGetDisplayMediaRN:ci.supportsGetDisplayMedia()?this.obtainScreenFromGetDisplayMedia:(ws.log("Screen sharing not supported on ",ci.getName()),null)},_getAudioConstraints(){const{audioQuality:e}=this.options;return null==e||!e.stereo||{autoGainControl:!1,channelCount:2,echoCancellation:!1,noiseSuppression:!1}},isSupported(){return null!==this.obtainStream},obtainScreenOnElectron(e,t){var n=this;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(window.JitsiMeetScreenObtainer&&window.JitsiMeetScreenObtainer.openDesktopPicker){const{desktopSharingFrameRate:r,desktopSharingResolution:o,desktopSharingSources:s}=this.options;window.JitsiMeetScreenObtainer.openDesktopPicker({desktopSharingSources:i.desktopSharingSources||s||["screen","window"]},(function(i,s){if(i){var a,d,c,l,h,u,p,m;let g=!1;if(arguments.length>2&&void 0!==arguments[2]&&arguments[2]){g={};const e=n._getAudioConstraints();"boolean"!=typeof e&&(g={optional:e}),"screen"===s&&(g.mandatory={chromeMediaSource:"desktop"})}const f={audio:g,video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:i,minFrameRate:null!==(a=null==r?void 0:r.min)&&void 0!==a?a:5,maxFrameRate:null!==(d=null==r?void 0:r.max)&&void 0!==d?d:5,minWidth:null==o||null===(c=o.width)||void 0===c?void 0:c.min,minHeight:null==o||null===(l=o.height)||void 0===l?void 0:l.min,maxWidth:null!==(h=null==o||null===(u=o.width)||void 0===u?void 0:u.max)&&void 0!==h?h:window.screen.width,maxHeight:null!==(p=null==o||null===(m=o.height)||void 0===m?void 0:m.max)&&void 0!==p?p:window.screen.height}}};navigator.mediaDevices.getUserMedia(f).then((t=>{n.setContentHint(t),e({stream:t,sourceId:i,sourceType:s})})).catch((e=>t(e)))}else t(new dr(Zi))}),(e=>t(new dr(zi,e))))}else t(new dr(Ki))},obtainScreenFromGetDisplayMedia(e,t){let n;n=navigator.getDisplayMedia?navigator.getDisplayMedia.bind(navigator):navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);const i=this._getAudioConstraints();let r={};const o={},{desktopSharingFrameRate:s,screenShareSettings:a}=this.options;"object"==typeof s&&(r.frameRate=s),r.frameRate&&delete r.frameRate.min,ci.isChromiumBased()&&(ci.isEngineVersionGreaterThan(93)&&(o.preferCurrentTab=(null==a?void 0:a.desktopPreferCurrentTab)||!1),ci.isEngineVersionGreaterThan(104)&&(o.systemAudio=(null==a?void 0:a.desktopSystemAudio)||"include"),ci.isEngineVersionGreaterThan(106)&&(o.surfaceSwitching=(null==a?void 0:a.desktopSurfaceSwitching)||"include"),ci.isEngineVersionGreaterThan(106)&&(null==a?void 0:a.desktopDisplaySurface)&&(r.displaySurface=null==a?void 0:a.desktopDisplaySurface),ci.isEngineVersionGreaterThan(111)&&(o.selfBrowserSurface=(null==a?void 0:a.desktopSelfBrowserSurface)||"exclude"),(null==s?void 0:s.max)>5||(r.height=99999,r.width=99999)),ci.isSafari()&&null!=a&&a.desktopDisplaySurface&&(r.displaySurface=null==a?void 0:a.desktopDisplaySurface),0===Object.keys(r).length&&(r=!0);const d={video:r,audio:i,...o,cursor:"always"};ws.info("Using getDisplayMedia for screen sharing",d),n(d).then((t=>{if(this.setContentHint(t),ci.isChromiumBased()){const e=t.getVideoTracks()[0];let n=5;"number"==typeof(null==s?void 0:s.min)&&s.min>0&&(n=s.min);const i={frameRate:{min:n}};try{e.applyConstraints(i)}catch(e){ws.warn(`Min fps=${n} constraint could not be applied on the desktop track,${e.message}`)}}e({stream:t,sourceId:t.id})})).catch((e=>{const n={errorName:e&&e.name,errorMsg:e&&e.message,errorStack:e&&e.stack};ws.error("getDisplayMedia error",JSON.stringify(d),JSON.stringify(n)),n.errorMsg&&-1!==n.errorMsg.indexOf("denied by system")?t(new dr(Yi)):t(new dr(Zi))}))},obtainScreenFromGetDisplayMediaRN(e,t){ws.info("Using getDisplayMedia for screen sharing"),navigator.mediaDevices.getDisplayMedia({video:!0}).then((t=>{this.setContentHint(t),e({stream:t,sourceId:t.id})})).catch((()=>{t(new dr(Zi))}))},setContentHint(e){const{desktopSharingFrameRate:t}=this.options,n=e.getVideoTracks()[0];"contentHint"in n?n.contentHint=(null==t?void 0:t.max)>5?"motion":"detail":ws.warn("MediaStreamTrack contentHint attribute not supported")},setDesktopSharingFrameRate(e){ws.info(`Setting the desktop capture rate to ${e}`),this.options.desktopSharingFrameRate={min:5,max:e}}};var Ps=n(310);let Ds;!function(e){e.AV1="av1",e.H264="h264",e.OPUS="opus",e.RED="red",e.ULPFEC="ulpfec",e.VP8="vp8",e.VP9="vp9"}(Ds||(Ds={}));const Os=(0,E.getLogger)("modules/sdp/SDPUtil.js"),ks={filterSpecialChars:e=>e?e.replace(/[\\\\\\/\\{,\\}\\+]/g,""):e,iceparams(e,t){let n,i,r=null;return(i=ks.findLine(e,"a=ice-ufrag:",t))&&(n=ks.findLine(e,"a=ice-pwd:",t))&&(r={ufrag:ks.parseICEUfrag(i),pwd:ks.parseICEPwd(n)}),r},parseICEUfrag:e=>e.substring(12),buildICEUfrag:e=>`a=ice-ufrag:${e}`,parseICEPwd:e=>e.substring(10),buildICEPwd:e=>`a=ice-pwd:${e}`,parseMID:e=>e.substring(6),parseMSIDAttribute(e){const t=e.find((e=>e.indexOf(" msid:")>0));if(!t)return;const n=t.substring(t.indexOf(" msid:")+6);return ks.filterSpecialChars(n)},parseMLine(e){const t={},n=e.substring(2).split(" ");return t.media=n.shift(),t.port=n.shift(),t.proto=n.shift(),""===n[n.length-1]&&n.pop(),t.fmt=n,t},buildMLine:e=>`m=${e.media} ${e.port} ${e.proto} ${e.fmt.join(" ")}`,parseRTPMap(e){const t={};let n=e.substring(9).split(" ");return t.id=n.shift(),n=n[0].split("/"),t.name=n.shift(),t.clockrate=n.shift(),t.channels=n.length?n.shift():"1",t},parseSCTPMap(e){const t=e.substring(10).split(" ");return[t[0],t[1],t.length>2?t[2]:null]},parseSCTPPort:e=>e.substring(12),buildRTPMap(e){let t=`a=rtpmap:${e.getAttribute("id")} ${e.getAttribute("name")}/${e.getAttribute("clockrate")}`;return e.getAttribute("channels")&&"1"!==e.getAttribute("channels")&&(t+=`/${e.getAttribute("channels")}`),t},parseCrypto(e){const t={},n=e.substring(9).split(" ");return t.tag=n.shift(),t["crypto-suite"]=n.shift(),t["key-params"]=n.shift(),n.length&&(t["session-params"]=n.join(" ")),t},parseFingerprint(e){const t={},n=e.substring(14).split(" ");return t.hash=n.shift(),t.fingerprint=n.shift(),t},parseFmtp(e){const t=[];let n=e.split(" ");n.shift(),n=n.join(" ").split(";");for(let e=0;ee.indexOf(" name:")>0));return null==t?void 0:t.substring(t.indexOf(" name:")+6)},parseVideoTypeLine(e){const t=" videoType:",n=e.find((e=>e.indexOf(t)>0));return null==n?void 0:n.substring(n.indexOf(t)+t.length)},parseRTCPFB(e){const t=e.substr(10).split(" "),n={};return n.pt=t.shift(),n.type=t.shift(),n.params=t,n},parseExtmap(e){const t=e.substr(9).split(" "),n={};return n.value=t.shift(),-1===n.value.indexOf("/")?n.direction="both":(n.direction=n.value.substr(n.value.indexOf("/")+1),n.value=n.value.substr(0,n.value.indexOf("/"))),n.uri=t.shift(),n.params=t,n},findLine(e,t,n){let i=e.split("\\r\\n");for(let e=0;ee.id)).filter(((e,t,n)=>n.indexOf(e)===t)).length,n=e.ssrcGroups&&e.ssrcGroups.length||0;if(t>1&&0===n)return;let i=null;if(1===t)i=e.ssrcs[0].id;else if(2===t){const t=e.ssrcGroups.find((e=>"FID"===e.semantics));t&&(i=t.ssrcs.split(" ")[0])}else if(t>=3){const t=e.ssrcGroups.find((e=>"SIM"===e.semantics));t&&(i=t.ssrcs.split(" ")[0])}return i},generateSsrc:()=>co().randomInt(1,4294967295),getSsrcAttribute(e,t,n){for(let i=0;ie.ssrcs.split(" ").map((e=>parseInt(e,10))),getMedia:(e,t)=>e.media.find((e=>e.type===t)),getUfrag(e){const t=e.split("\\n").filter((e=>e.startsWith("a=ice-ufrag:")));if(t.length>0)return t[0].substr("a=ice-ufrag:".length)},preferCodec(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!t)return;const i=e.rtp.filter((e=>e.codec&&e.codec.toLowerCase()===t.toLowerCase())).map((e=>e.payload));if(i){if(n&&t===Ds.H264){const t=i.filter((t=>{const n=e.fmtp.find((e=>e.payload===t));return!!n&&n.config.includes("packetization-mode=0")}));for(const e of t.reverse()){const t=i.findIndex((t=>t===e));t>=0&&(i.splice(t,1),i.unshift(e))}}const r=e.payloads.toString().split(" ").map((e=>parseInt(e,10)));for(const e of i.reverse()){const t=r.indexOf(e);r.splice(t,1),r.unshift(e)}e.payloads=r.join(" ")}else Os.error(`No matching RTP payload type found for ${t}, failed to set preferred codecs`)},stripCodec(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!t)return;const i=new Map;let r=[];for(const o of e.rtp)o.codec&&o.codec.toLowerCase()===t.toLowerCase()&&(n?i.set(o.payload,o.codec):r.push(o.payload));if(n&&(r=e.fmtp.filter((e=>{const t=i.get(e.payload);return!!t&&(t.toLowerCase()===Ds.VP9?!e.config.includes("profile-id=0"):!e.config.includes("profile-level-id=42"))})).map((e=>e.payload))),r.length>0){const t=r.map((e=>`apt=${e}`)),n=e.fmtp.filter((e=>-1!==t.indexOf(e.config)));r.push(...n.map((e=>e.payload)));const i=e.payloads.toString().split(" ").map(Number).filter((e=>-1===r.indexOf(e)));0===i.length?(e.port=0,e.direction=As.INACTIVE,e.payloads="*"):e.payloads=i.join(" "),e.rtp=e.rtp.filter((e=>-1!==i.indexOf(e.payload))),e.fmtp=e.fmtp.filter((e=>-1!==i.indexOf(e.payload))),e.rtcpFb&&(e.rtcpFb=e.rtcpFb.filter((e=>-1!==i.indexOf(e.payload))))}}},Ns=ks;function Ms(e){const t=e.split("\\r\\nm=");for(let e=1,n=t.length;et.type===e)));i.mid=t,i.direction=As.RECVONLY,i.msid=void 0,i.ssrcs=void 0,i.ssrcGroups=void 0,n.media=n.media.concat(i),n.groups.forEach((e=>{if("BUNDLE"===e.type){const n=e.mids.split(" ");n.push(t),e.mids=n.join(" ")}})),this.raw=Ps.write(n)},Ms.prototype.getMediaSsrcMap=function(){const e={};for(let t=0;t{const t=e.substring(7).split(" ")[0];n.ssrcs[t]||(n.ssrcs[t]={ssrc:t,lines:[]}),n.ssrcs[t].lines.push(e)})),Ns.findLines(this.media[t],"a=ssrc-group:").forEach((e=>{const t=e.indexOf(" "),i=e.substr(0,t).substr(13),r=e.substr(14+i.length).split(" ");r.length&&n.ssrcGroups.push({semantics:i,ssrcs:r})}))}return e},Ms.prototype.containsSSRC=function(e){const t=this.getMediaSsrcMap();let n=!1;return Object.keys(t).forEach((i=>{n||t[i].ssrcs[e]&&(n=!0)})),n},Ms.prototype.toJingle=function(e,t){Ns.findLines(this.session,"a=group:").forEach((t=>{const n=t.split(" "),i=n.shift().substr(8);e.c("group",{xmlns:"urn:xmpp:jingle:apps:grouping:0",semantics:i});for(let t=0;t{const n=t.indexOf(" "),i=t.substr(0,n).substr(13),r=t.substr(14+i.length).split(" ");r.length&&(e.c("ssrc-group",{semantics:i,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),r.forEach((t=>e.c("source",{ssrc:t}).up())),e.up())}))}const t=Ns.findLines(this.media[n],"a=rid:");if(t.length&&ci.usesRidsForSimulcast()){const i=t.map((e=>e.split(":")[1])).map((e=>e.split(" ")[0]));i.forEach((t=>{e.c("source",{rid:t,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),e.up()})),Ns.findLine(this.media[n],"a=simulcast:")&&(e.c("rid-group",{semantics:"SIM",xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),i.forEach((t=>{e.c("source",{rid:t}).up()})),e.up())}Ns.findLine(this.media[n],"a=rtcp-mux")&&e.c("rtcp-mux").up(),this.rtcpFbToJingle(n,e,"*");const o=Ns.findLines(this.media[n],"a=extmap:",this.session);for(let t=0;t2?t.attrs({streams:e[2]}):t.attrs({streams:0}),t.up()}Ns.findLines(this.media[e],"a=fingerprint:",this.session).forEach((n=>{const i=Ns.parseFingerprint(n);i.xmlns="urn:xmpp:jingle:apps:dtls:0",t.c("fingerprint").t(i.fingerprint),delete i.fingerprint;const r=Ns.findLine(this.media[e],"a=setup:",this.session);r&&(i.setup=r.substr(8)),t.attrs(i),t.up()}));const r=Ns.iceparams(this.media[e],this.session);r&&(r.xmlns="urn:xmpp:jingle:transports:ice-udp:1",t.attrs(r),Ns.findLines(this.media[e],"a=candidate:",this.session).forEach((e=>{const n=Ns.candidateToJingle(e);this.failICE&&(n.ip="1.1.1.1");const i=n&&"string"==typeof n.protocol?n.protocol.toLowerCase():"";this.removeTcpCandidates&&("tcp"===i||"ssltcp"===i)||this.removeUdpCandidates&&"udp"===i||t.c("candidate",n).up()}))),t.up()},Ms.prototype.rtcpFbToJingle=function(e,t,n){Ns.findLines(this.media[e],`a=rtcp-fb:${n}`).forEach((e=>{const n=Ns.parseRTCPFB(e);"trr-int"===n.type?(t.c("rtcp-fb-trr-int",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",value:n.params[0]}),t.up()):(t.c("rtcp-fb",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",type:n.type}),n.params.length>0&&t.attrs({subtype:n.params[0]}),t.up())}))},Ms.prototype.rtcpFbFromJingle=function(e,t){let n="";const i=e.find(\'>rtcp-fb-trr-int[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]\');return i.length&&(n+="a=rtcp-fb:* trr-int ",i.attr("value")?n+=i.attr("value"):n+="0",n+="\\r\\n"),e.find(\'>rtcp-fb[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]\').each(((e,i)=>{n+=`a=rtcp-fb:${t} ${i.getAttribute("type")}`,i.hasAttribute("subtype")&&(n+=` ${i.getAttribute("subtype")}`),n+="\\r\\n"})),n},Ms.prototype.fromJingle=function(e){const t=Date.now();this.raw=`v=0\\r\\no=- ${t} 2 IN IP4 0.0.0.0\\r\\ns=-\\r\\nt=0 0\\r\\n`;const n=_t()(e).find(\'>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]\');n.length&&n.each(((e,t)=>{const n=_t()(t).find(">content").map(((e,t)=>t.getAttribute("name"))).get();n.length>0&&(this.raw+=`a=group:${t.getAttribute("semantics")||t.getAttribute("type")} ${n.join(" ")}\\r\\n`)})),this.session=this.raw,e.find(">content").each(((e,t)=>{const n=this.jingle2media(_t()(t));this.media.push(n)})),this.raw=this.session+this.media.join("")},Ms.prototype.jingle2media=function(e){const t=e.find(">description"),n=e.find(\'>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]\');let i="";const r=n.find(\'>sctpmap[xmlns="urn:xmpp:jingle:transports:dtls-sctp:1"]\'),o={media:t.attr("media"),port:"9"};switch("rejected"===e.attr("senders")&&(o.port="0"),n.find(\'>fingerprint[xmlns="urn:xmpp:jingle:apps:dtls:0"]\').length?o.proto=r.length?"UDP/DTLS/SCTP":"UDP/TLS/RTP/SAVPF":o.proto="UDP/TLS/RTP/SAVPF",r.length?(i+=`m=application ${o.port} UDP/DTLS/SCTP webrtc-datachannel\\r\\n`,i+=`a=sctp-port:${r.attr("number")}\\r\\n`,i+="a=max-message-size:262144\\r\\n"):(o.fmt=t.find(">payload-type").map(((e,t)=>t.getAttribute("id"))).get(),i+=`${Ns.buildMLine(o)}\\r\\n`),i+="c=IN IP4 0.0.0.0\\r\\n",r.length||(i+="a=rtcp:1 IN IP4 0.0.0.0\\r\\n"),n.length&&(n.attr("ufrag")&&(i+=`${Ns.buildICEUfrag(n.attr("ufrag"))}\\r\\n`),n.attr("pwd")&&(i+=`${Ns.buildICEPwd(n.attr("pwd"))}\\r\\n`),n.find(\'>fingerprint[xmlns="urn:xmpp:jingle:apps:dtls:0"]\').each(((e,t)=>{i+=`a=fingerprint:${t.getAttribute("hash")}`,i+=` ${_t()(t).text()}`,i+="\\r\\n",t.hasAttribute("setup")&&(i+=`a=setup:${t.getAttribute("setup")}\\r\\n`)}))),n.find(">candidate").each(((e,t)=>{let n=t.getAttribute("protocol");n="string"==typeof n?n.toLowerCase():"",this.removeTcpCandidates&&("tcp"===n||"ssltcp"===n)||this.removeUdpCandidates&&"udp"===n||(this.failICE&&t.setAttribute("ip","1.1.1.1"),i+=Ns.candidateFromJingle(t))})),e.attr("senders")){case"initiator":i+=`a=${As.SENDONLY}\\r\\n`;break;case"responder":i+=`a=${As.RECVONLY}\\r\\n`;break;case"none":i+=`a=${As.INACTIVE}\\r\\n`;break;case"both":i+=`a=${As.SENDRECV}\\r\\n`}i+=`a=mid:${e.attr("name")}\\r\\n`,t.find(">rtcp-mux").length&&(i+="a=rtcp-mux\\r\\n"),t.find(">payload-type").each(((e,t)=>{i+=`${Ns.buildRTPMap(t)}\\r\\n`,_t()(t).find(">parameter").length&&(i+=`a=fmtp:${t.getAttribute("id")} `,i+=_t()(t).find(">parameter").map(((e,t)=>{const n=t.getAttribute("name");return(n?`${n}=`:"")+t.getAttribute("value")})).get().join(";"),i+="\\r\\n"),i+=this.rtcpFbFromJingle(_t()(t),t.getAttribute("id"))})),i+=this.rtcpFbFromJingle(t,"*"),t.find(\'>rtp-hdrext[xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"]\').each(((e,t)=>{i+=`a=extmap:${t.getAttribute("id")} ${t.getAttribute("uri")}\\r\\n`})),t.find(\'>extmap-allow-mixed[xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"]\').length>0&&(i+="a=extmap-allow-mixed\\r\\n"),t.find(\'>ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each(((e,t)=>{const n=t.getAttribute("semantics"),r=_t()(t).find(">source").map(((e,t)=>t.getAttribute("ssrc"))).get();r.length&&(i+=`a=ssrc-group:${n} ${r.join(" ")}\\r\\n`)}));let s="",a="";return t.find(\'>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each(((e,t)=>{const n=t.getAttribute("ssrc");let i=!0,r="";_t()(t).find(">parameter").each(((e,t)=>{var o;const s=t.getAttribute("name");let a=t.getAttribute("value");a=Ns.filterSpecialChars(a),r+=`a=ssrc:${n} ${s}`,a&&a.length&&(r+=`:${a}`),r+="\\r\\n",null!==(o=a)&&void 0!==o&&o.includes("mixedmslabel")&&(i=!1)})),i?s+=r:a+=r})),i+=a+s,i},Fs.prototype.getNewMedia=function(){const e=this.mySDP.getMediaSsrcMap(),t=this.otherSDP.getMediaSsrcMap(),n={};return Object.keys(t).forEach((i=>{const r=e[i],o=t[i];r||!o?(Object.keys(o.ssrcs).forEach((e=>{(-1===Object.keys(r.ssrcs).indexOf(e)||o.ssrcs[e].lines&&r.ssrcs[e].lines&&void 0!==r.ssrcs[e].lines.find((e=>-1!==e.indexOf("msid")))!=(void 0!==o.ssrcs[e].lines.find((e=>-1!==e.indexOf("msid")))))&&(n[i]||(n[i]={mediaindex:o.mediaindex,mid:o.mid,ssrcs:{},ssrcGroups:[]}),n[i].ssrcs[e]=o.ssrcs[e])})),o.ssrcGroups.forEach((e=>{let t=!1;for(let n=0;n{n=!0;const r=t[i];e.c("content",{name:r.mid}),e.c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:r.mid}),Object.keys(r.ssrcs).forEach((t=>{const n=r.ssrcs[t],i=n.lines,o=Ns.parseSourceNameLine(i),s=Ns.parseVideoTypeLine(i);e.c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),e.attrs({name:o,videoType:s,ssrc:n.ssrc});const a=Ns.parseMSIDAttribute(i);a&&(e.c("parameter"),e.attrs({name:"msid"}),e.attrs({value:a}),e.up()),e.up()})),r.ssrcGroups.forEach((t=>{t.ssrcs.length&&(e.c("ssrc-group",{semantics:t.semantics,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),t.ssrcs.forEach((t=>{e.c("source",{ssrc:t}).up()})),e.up())})),e.up(),e.up()})),n};var Vs,Us="function"==typeof queueMicrotask&&queueMicrotask,Hs="function"==typeof setImmediate&&setImmediate,$s="object"==typeof process&&"function"==typeof process.nextTick;Vs=Us?queueMicrotask:Hs?setImmediate:$s?process.nextTick:function(e){setTimeout(e,0)};const Js=(Bs=Vs,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;ie(...n)))});var Bs;class qs{constructor(){this.head=this.tail=null,this.length=0}removeLink(e){return e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=e.next=null,this.length-=1,e}empty(){for(;this.head;)this.shift();return this}insertAfter(e,t){t.prev=e,t.next=e.next,e.next?e.next.prev=t:this.tail=t,e.next=t,this.length+=1}insertBefore(e,t){t.prev=e.prev,t.next=e,e.prev?e.prev.next=t:this.head=t,e.prev=t,this.length+=1}unshift(e){this.head?this.insertBefore(this.head,e):Gs(this,e)}push(e){this.tail?this.insertAfter(this.tail,e):Gs(this,e)}shift(){return this.head&&this.removeLink(this.head)}pop(){return this.tail&&this.removeLink(this.tail)}toArray(){return[...this]}*[Symbol.iterator](){for(var e=this.head;e;)yield e.data,e=e.next}remove(e){for(var t=this.head;t;){var{next:n}=t;e(t)&&this.removeLink(t),t=n}return this}}function Gs(e,t){e.length=1,e.head=e.tail=t}function zs(e,t){return e.then((e=>{Ks(t,null,e)}),(e=>{Ks(t,e&&e.message?e:new Error(e))}))}function Ks(e,t,n){try{e(t,n)}catch(e){Js((e=>{throw e}),e)}}function Ws(e){return"AsyncFunction"===e[Symbol.toStringTag]}const Xs=function(e){if("function"!=typeof e)throw new Error("expected a function");return Ws(e)?Ws(t=e)?function(){for(var e=arguments.length,n=new Array(e),i=0;ie!==t))):s[e]=[]:Object.keys(s).forEach((e=>s[e]=[]))}function d(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;ie(...n)))}var c=!1;function l(e,t,n,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");var r,o;function s(e){if(e)return n?o(e):r();for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s{c=!1,g.process()}))),n||!i)return new Promise(((e,t)=>{r=e,o=t}))}function h(e){return function(t){r-=1;for(var n=arguments.length,i=new Array(n>1?n-1:0),s=1;s0&&o.splice(h,1),l.callback(t,...i),null!=t&&d("error",t,l.data)}r<=g.concurrency-g.buffer&&d("unsaturated"),g.idle()&&d("drain"),g.process()}}function u(e){return!(0!==e.length||!g.idle()||(Js((()=>d("drain"))),0))}const p=e=>t=>{if(!t)return new Promise(((t,n)=>{!function(e,i){const r=function(){a(e,r),((e,i)=>{if(e)return n(e);t(i)})(...arguments)};s[e].push(r)}(e)}));a(e),function(e,t){s[e].push(t)}(e,t)};var m=!1,g={_tasks:new qs,_createTaskItem:(e,t)=>({data:e,callback:t}),*[Symbol.iterator](){yield*g._tasks[Symbol.iterator]()},concurrency:t,payload:n,buffer:t/4,started:!1,paused:!1,push(e,t){if(Array.isArray(e)){if(u(e))return;return e.map((e=>l(e,!1,!1,t)))}return l(e,!1,!1,t)},pushAsync(e,t){if(Array.isArray(e)){if(u(e))return;return e.map((e=>l(e,!1,!0,t)))}return l(e,!1,!0,t)},kill(){a(),g._tasks.empty()},unshift(e,t){if(Array.isArray(e)){if(u(e))return;return e.map((e=>l(e,!0,!1,t)))}return l(e,!0,!1,t)},unshiftAsync(e,t){if(Array.isArray(e)){if(u(e))return;return e.map((e=>l(e,!0,!0,t)))}return l(e,!0,!0,t)},remove(e){g._tasks.remove(e)},process(){if(!m){for(m=!0;!g.paused&&rg._tasks.length,running:()=>r,workersList:()=>o,idle:()=>g._tasks.length+r===0,pause(){g.paused=!0},resume(){!1!==g.paused&&(g.paused=!1,Js(g.process))}};return Object.defineProperties(g,{saturated:{writable:!1,value:p("saturated")},unsaturated:{writable:!1,value:p("unsaturated")},empty:{writable:!1,value:p("empty")},drain:{writable:!1,value:p("drain")},error:{writable:!1,value:p("error")}}),g}const Qs=(0,E.getLogger)("modules/util/AsyncQueue.js");class Zs extends Error{constructor(e){super(e),this.name="ClearedQueueError"}}class ea{constructor(){var e,t;this._queue=(e=this._processQueueTasks.bind(this),1,t=Xs(e),Ys(((e,n)=>{t(e[0],n)}),1,1)),this._stopped=!1,this._taskCallbacks=new Map}clear(){for(const e of this._taskCallbacks.values())try{null==e||e(new Zs("The queue has been cleared"))}catch(e){Qs.error("Error in callback while clearing the queue:",e)}this._queue.kill()}_processQueueTasks(e,t){try{e(t)}catch(e){Qs.error(`Task failed: ${null==e?void 0:e.stack}`),t(e)}finally{this._taskCallbacks.delete(e)}}pause(){this._queue.pause()}push(e,t){this._stopped?t&&t(new Error("The queue has been stopped")):(this._taskCallbacks.set(e,t),this._queue.push(e,t))}resume(){this._queue.resume()}shutdown(){this._stopped=!0}}let ta;!function(e){e.PENDING="pending",e.ACTIVE="active",e.ENDED="ended"}(ta||(ta={}));const na=ta.PENDING,ia=ta.ACTIVE,ra=ta.ENDED,oa=(0,E.getLogger)("modules/xmpp/JingleSession.js");class sa extends xr{constructor(e,t,n,i,r,o,s){super(),this.sid=e,this.localJid=t,this.remoteJid=n,this.connection=i,this.mediaConstraints=r,this.pcConfig=o,this.isInitiator=s,this.usedrip=!0,this.dripContainer=[],this.room=null,this._signalingLayer=null,this.state=null,this.rtc=null}get initiatorJid(){return this.isInitiator?this.localJid:this.remoteJid}get responderJid(){return this.isInitiator?this.remoteJid:this.localJid}initialize(e,t,n,i){if(null!==this.state){const e=`attempt to initiate on session ${this.sid}\\n in state ${this.state}`;throw oa.error(e),new Error(e)}this.room=e,this.rtc=t,this._signalingLayer=n,this.state=na,this.doInitialize(i)}doInitialize(e){}addIceCandidates(e){}getState(){return this.state}addSources(e){}removeSources(e){}terminate(e,t,n){}acceptOffer(e,t,n){}}var aa;!function(e){e.REMOTE_SOURCE_CONSTRAINTS_CHANGED="media_session.REMOTE_SOURCE_CONSTRAINTS_CHANGED"}(aa||(aa={}));const da=aa,ca=(0,E.getLogger)("modules/xmpp/JingleSessionPC.js"),la=1e4;function ha(e,t,n,i){e.c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",ssrc:n,name:t.source}).c("parameter",{name:"msid",value:i}).up().c("ssrc-info",{xmlns:"http://jitsi.org/jitmeet",owner:t.owner}).up().up()}class ua extends sa{static parseVideoSenders(e){const t=e.find(\'>content[name="video"]\');if(t.length){const e=t[0].getAttribute("senders");if("both"===e||"initiator"===e||"responder"===e||"none"===e)return e}return null}static parseSourceMaxFrameHeight(e){const t=[],n=e.find(\'>content[name="video"]>source-frame-height\');let i,r;return n.length?(n.each(((e,n)=>{r=n.getAttribute("sourceName"),i=n.getAttribute("maxHeight"),t.push({maxHeight:i,sourceName:r})})),t):null}constructor(e,t,n,i,r,o,s,a){super(e,t,n,i,r,o,a),this._bridgeSessionId=null,this._cachedOldLocalSdp=void 0,this._cachedNewLocalSdp=void 0,this._iceCheckingStartedTimestamp=null,this._gatheringStartedTimestamp=null,this._sourceReceiverConstraints=void 0,this._localSendReceiveVideoActive=!0,this._remoteSendReceiveVideoActive=!0,this._gatheringReported=!1,this.lasticecandidate=!1,this.closed=!1,this.isP2P=s,this.remoteRecvMaxFrameHeight=void 0,this.numRemoteVideoSources=0,this.numRemoteAudioSources=0,this.remoteSourceMaxFrameHeights=void 0,this.modificationQueue=new ea,this.modificationQueue.pause(),this.wasConnected=!1,this.establishmentDuration=void 0,this._xmppListeners=[],this._xmppListeners.push(i.addCancellableListener(Lo.Events.CONN_STATUS_CHANGED,this.onXmppStatusChanged.bind(this))),this._removeSenderVideoConstraintsChangeListener=void 0}_assertNotEnded(){return this.state!==ra}doInitialize(e){this.failICE=Boolean(e.failICE),this.lasticecandidate=!1,this.options=e,this.isReconnect=!1,this.wasstable=!1,this.webrtcIceUdpDisable=Boolean(e.webrtcIceUdpDisable),this.webrtcIceTcpDisable=Boolean(e.webrtcIceTcpDisable);const t={disableRtx:e.disableRtx};if(e.gatherStats&&(t.maxstats=300),t.capScreenshareBitrate=!1,t.codecSettings=e.codecSettings,t.enableInsertableStreams=e.enableInsertableStreams,e.videoQuality){const n=Object.entries(e.videoQuality).map((e=>(e[0]=e[0].toLowerCase(),e)));t.videoQuality=Object.fromEntries(n)}var n;t.forceTurnRelay=e.forceTurnRelay,t.audioQuality=e.audioQuality,t.disableSimulcast=!!this.isP2P||e.disableSimulcast,this.isP2P||(t.capScreenshareBitrate=!((null===(n=e.desktopSharingFrameRate)||void 0===n?void 0:n.max)>5)),e.startSilent&&(t.startSilent=!0),this.peerconnection=this.rtc.createPeerConnection(this._signalingLayer,this.pcConfig,this.isP2P,t),this.peerconnection.onicecandidate=e=>{if(!e)return;const t=e.candidate,n=window.performance.now();if(t){null===this._gatheringStartedTimestamp&&(this._gatheringStartedTimestamp=n);let e=t.protocol;if("string"==typeof e)if(e=e.toLowerCase(),"tcp"===e||"ssltcp"===e){if(this.webrtcIceTcpDisable)return}else if("udp"===e&&this.webrtcIceUdpDisable)return}else this._gatheringReported||(Mi.sendAnalytics(Qt,{phase:"gathering",value:n-this._gatheringStartedTimestamp,p2p:this.isP2P,initiator:this.isInitiator}),this._gatheringReported=!0);this.isP2P&&this.sendIceCandidate(t)},this.peerconnection.onsignalingstatechange=()=>{"stable"===this.peerconnection.signalingState?this.wasstable=!0:"closed"!==this.peerconnection.signalingState&&"closed"!==this.peerconnection.connectionState||this.room.eventEmitter.emit(Hi.XMPPEvents.SUSPEND_DETECTED,this)},this.peerconnection.oniceconnectionstatechange=()=>{const e=window.performance.now();let t=!1;switch(this.isP2P||(this.room.connectionTimes[`ice.state.${this.peerconnection.iceConnectionState}`]=e),ca.log(`(TIME) ICE ${this.peerconnection.iceConnectionState} ${this.isP2P?"P2P":"JVB"}:\\t`,e),Mi.sendAnalytics(en,{p2p:this.isP2P,state:this.peerconnection.iceConnectionState,signaling_state:this.peerconnection.signalingState,reconnect:this.isReconnect,value:e}),this.room.eventEmitter.emit(Hi.XMPPEvents.ICE_CONNECTION_STATE_CHANGED,this,this.peerconnection.iceConnectionState),this.peerconnection.iceConnectionState){case"checking":this._iceCheckingStartedTimestamp=e;break;case"connected":if("stable"===this.peerconnection.signalingState){t=!0;const e=!this.options.enableIceRestart&&this.room.supportsRestartByTerminate();(this.isReconnect||e)&&this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_RESTORED,this)}if(!this.wasConnected&&(this.wasstable||t||this.isInitiator&&(ci.isChromiumBased()||ci.isReactNative()))){Mi.sendAnalytics(Qt,{phase:"checking",value:e-this._iceCheckingStartedTimestamp,p2p:this.isP2P,initiator:this.isInitiator});const t=Math.min(this._iceCheckingStartedTimestamp,this._gatheringStartedTimestamp);this.establishmentDuration=e-t,Mi.sendAnalytics(Qt,{phase:"establishment",value:this.establishmentDuration,p2p:this.isP2P,initiator:this.isInitiator}),this.wasConnected=!0,this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_ESTABLISHED,this)}this.isReconnect=!1;break;case"disconnected":this.isReconnect=!0,this.wasstable&&this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_INTERRUPTED,this);break;case"failed":this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_ICE_FAILED,this)}},this.peerconnection.onconnectionstatechange=()=>{const e=this.peerconnection.iceConnectionState;"failed"===this.peerconnection.connectionState&&"disconnected"===e&&this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_ICE_FAILED,this)},this.peerconnection.onnegotiationneeded=()=>{const e=this.peerconnection.signalingState,t=this.peerconnection.remoteDescription;if(!this.isP2P&&"stable"===e&&t&&"string"==typeof t.sdp){ca.info(`${this} onnegotiationneeded fired on ${this.peerconnection}`);const e=e=>{this._renegotiate().then((()=>this.peerconnection.configureAudioSenderEncodings())).then((()=>e()),(t=>e(t)))};this.modificationQueue.push(e,(e=>{e?ca.error(`${this} onnegotiationneeded error`,e):ca.debug(`${this} onnegotiationneeded executed - OK`)}))}}}getRemoteRecvMaxFrameHeight(){if(this.isP2P)return this.remoteRecvMaxFrameHeight}getRemoteSourcesRecvMaxFrameHeight(){if(this.isP2P)return this.remoteSourceMaxFrameHeights}sendIceCandidate(e){const t=new Ms(this.peerconnection.localDescription.sdp);if(e&&e.candidate.length&&!this.lasticecandidate){const n=Ns.iceparams(t.media[e.sdpMLineIndex],t.session),i=Ns.candidateToJingle(e.candidate);if(!n||!i)return void ca.error("failed to get ice && jcand");n.xmlns="urn:xmpp:jingle:transports:ice-udp:1",this.usedrip?(0===this.dripContainer.length&&setTimeout((()=>{0!==this.dripContainer.length&&(this.sendIceCandidates(this.dripContainer),this.dripContainer=[])}),150),this.dripContainer.push(e)):this.sendIceCandidates([e])}else ca.log(`${this} sendIceCandidate: last candidate`),this.lasticecandidate=!0}sendIceCandidates(e){if(!this._assertNotEnded("sendIceCandidates"))return;ca.log(`${this} sendIceCandidates ${JSON.stringify(e)}`);const t=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-info",initiator:this.initiatorJid,sid:this.sid}),n=new Ms(this.peerconnection.localDescription.sdp);for(let i=0;ie.sdpMLineIndex===i)),o=Ns.parseMLine(n.media[i].split("\\r\\n")[0]);if(r.length>0){const e=Ns.iceparams(n.media[i],n.session);e.xmlns="urn:xmpp:jingle:transports:ice-udp:1",t.c("content",{creator:this.initiatorJid===this.localJid?"initiator":"responder",name:r[0].sdpMid?r[0].sdpMid:o.media}).c("transport",e);for(let e=0;econtent>transport>candidate").each(((e,n)=>{let i=Ns.candidateFromJingle(n);i=i.replace("\\r\\n","").replace("a=","");const r=new RTCIceCandidate({sdpMLineIndex:0,sdpMid:"",candidate:i});t.push(r)})),t.length?(ca.debug(`${this} Queued add (${t.length}) ICE candidates task`),this.modificationQueue.push((e=>{for(const e of t)this.peerconnection.addIceCandidate(e).then((()=>ca.debug(`${this} addIceCandidate ok!`)),(e=>ca.error(`${this} addIceCandidate failed!`,e)));e(),ca.debug(`${this} ICE candidates task finished`)}))):ca.error(`${this} No ICE candidates to add ?`,e[0]&&e[0].outerHTML)}readSsrcInfo(e){_t()(e).find(\'>description>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each(((e,t)=>{const n=Number(t.getAttribute("ssrc"));let i;t.hasAttribute("name")&&(i=t.getAttribute("name")),this.isP2P?this._signalingLayer.setSSRCOwner(n,St.Strophe.getResourceFromJid(this.remoteJid),i):_t()(t).find(\'>ssrc-info[xmlns="http://jitsi.org/jitmeet"]\').each(((e,t)=>{const r=t.getAttribute("owner");var o;null!=r&&r.length&&(isNaN(n)||n<0?ca.warn(`${this} Invalid SSRC ${n} value received for ${r}`):this._signalingLayer.setSSRCOwner(n,(o=r,St.Strophe.getResourceFromJid(o)||o),i))}))}))}acceptOffer(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];this.setOfferAnswerCycle(e,(()=>{this.sendSessionAccept((()=>{ca.debug(`${this} Resuming the modification queue after session is established!`),this.modificationQueue.resume(),t(),this.room.eventEmitter.emit(Hi.XMPPEvents.SESSION_ACCEPT,this);const e=i.filter((e=>e.getType()===Ri.VIDEO));e.length&&e.splice(0,1),e.length&&this.addTracks(e)}),(e=>{n(e),this.room.eventEmitter.emit(Hi.XMPPEvents.SESSION_ACCEPT_ERROR,this,e)}))}),n,i)}invite(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(!this.isInitiator)throw new Error("Trying to invite from the responder session");ca.debug(`${this} Executing invite task`);const t=[];for(const n of e)t.push(this.peerconnection.addTrack(n,this.isInitiator));Promise.all(t).then((()=>this.peerconnection.createOffer(this.mediaConstraints))).then((e=>this.peerconnection.setLocalDescription(e))).then((()=>{this.peerconnection.processLocalSdpForTransceiverInfo(e),this.sendSessionInitiate(this.peerconnection.localDescription.sdp)})).then((()=>{ca.debug(`${this} invite executed - OK`)})).catch((e=>{ca.error(`${this} invite error`,e)}))}sendSessionInitiate(e){let t=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-initiate",initiator:this.initiatorJid,sid:this.sid});new Ms(e).toJingle(t,this.isInitiator?"initiator":"responder"),t=t.tree(),ca.debug(`${this} Session-initiate: `,t),this.connection.sendIQ(t,(()=>{ca.info(`${this} Got RESULT for "session-initiate"`)}),(e=>{ca.error(`${this} "session-initiate" error`,e)}),la)}setAnswer(e){if(!this.isInitiator)throw new Error("Trying to set an answer on the responder session");ca.debug(`${this} Executing setAnswer task`);const t=this._processNewJingleOfferIq(e),n=new Ms(this.peerconnection.localDescription.sdp),i=new RTCSessionDescription({type:"answer",sdp:t.raw});this.peerconnection.setRemoteDescription(i).then((()=>{if(this.state===na){this.state=ia,ca.debug(`${this} Resuming the modification queue after session is established!`),this.modificationQueue.resume();const e=new Ms(this.peerconnection.localDescription.sdp);this.sendContentModify(),this.notifyMySSRCUpdate(n,e)}})).then((()=>{ca.debug(`${this} setAnswer task done`)})).catch((e=>{ca.error(`${this} setAnswer task failed: ${e}`)}))}setOfferAnswerCycle(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];ca.debug(`${this} Executing setOfferAnswerCycle task`);const r=[],o=i.filter((e=>e.getType()===Ri.AUDIO)),s=i.filter((e=>e.getType()===Ri.VIDEO));let a=i;s.length>1&&(a=[...o,s[0]]);for(const e of a)r.push(this.peerconnection.addTrack(e,this.isInitiator));const d=this._processNewJingleOfferIq(e),c=_t()(e).find(\'>bridge-session[xmlns="http://jitsi.org/protocol/focus"]\').attr("id");c!==this._bridgeSessionId&&(this._bridgeSessionId=c),Promise.all(r).then((()=>this._renegotiate(d.raw))).then((()=>{this.peerconnection.processLocalSdpForTransceiverInfo(a),this.state===na&&(this.state=ia,!this.isP2P||this._localSendReceiveVideoActive&&!this._sourceReceiverConstraints||this.sendContentModify())})).then((()=>{ca.debug(`${this} setOfferAnswerCycle task done`),t()})).catch((e=>{ca.error(`${this} setOfferAnswerCycle task failed: ${e}`),n(e)}))}setVideoCodecs(e){if(this._assertNotEnded()){ca.info(`${this} setVideoCodecs: ${e}`),this.peerconnection.setVideoCodecs(e);const t=e=>{this._renegotiate().then((()=>this.peerconnection.configureVideoSenderEncodings())).then((()=>(ca.debug(`${this} setVideoCodecs task is done`),e())),(t=>(ca.error(`${this} setVideoCodecs task failed: ${t}`),e(t))))};ca.debug(`${this} Queued setVideoCodecs task`),this.modificationQueue.push(t)}}replaceTransport(e,t,n){if(this.options.enableForcedReload){const e=new Ms(this.peerconnection.localDescription.sdp);return this.sendTransportAccept(e,t,n),void this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_RESTARTED,this)}this.room.eventEmitter.emit(Hi.XMPPEvents.ICE_RESTARTING,this);const i=e.clone();e.find(">content[name=\'data\']").attr("senders","rejected"),e.find(">content>description>source").remove(),e.find(">content>description>ssrc-group").remove();const r=e.find(">content>transport>fingerprint");r.attr("hash","sha-1"),r.text("00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"),ca.debug(`${this} Queued ICE restart task`),this.modificationQueue.push((r=>{this.setOfferAnswerCycle(e,(()=>{this.setOfferAnswerCycle(i,(()=>{const e=new Ms(this.peerconnection.localDescription.sdp);"number"==typeof this.options.channelLastN&&this.options.channelLastN>=0&&(e.initialLastN=this.options.channelLastN),this.sendTransportAccept(e,t,n),this.room.eventEmitter.emit(Hi.XMPPEvents.ICE_RESTART_SUCCESS,this,i),r()}),(e=>r(e)))}),(e=>r(e)))}),(e=>{if(e){if(e instanceof Zs)return ca.debug(`${this} ICE restart task aborted: session terminated`),void t();ca.error(`${this} ICE restart task failed: ${e}`),n(e)}else ca.debug(`${this} ICE restart task done`),t()}))}sendSessionAccept(e,t){const n=new Ms(this.peerconnection.localDescription.sdp),i=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:this.initiatorJid,responder:this.responderJid,sid:this.sid});this.webrtcIceTcpDisable&&(n.removeTcpCandidates=!0),this.webrtcIceUdpDisable&&(n.removeUdpCandidates=!0),this.failICE&&(n.failICE=!0),"number"==typeof this.options.channelLastN&&this.options.channelLastN>=0&&(n.initialLastN=this.options.channelLastN),n.toJingle(i,this.initiatorJid===this.localJid?"initiator":"responder"),ca.info(`${this} Sending session-accept`),ca.debug(i.tree()),this.connection.sendIQ(i,e,this.newJingleErrorHandler(i,(e=>{t(e),this.room.eventEmitter.emit(Hi.XMPPEvents.SESSION_ACCEPT_TIMEOUT,this)})),la)}sendContentModify(){const e=this._localSendReceiveVideoActive?"both":"none",t=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"content-modify",initiator:this.initiatorJid,sid:this.sid}).c("content",{name:Ri.VIDEO,senders:e});void 0!==this._sourceReceiverConstraints&&this._sourceReceiverConstraints.forEach(((e,n)=>{t.c("source-frame-height",{xmlns:"http://jitsi.org/jitmeet/video"}).attrs({sourceName:n,maxHeight:e}),t.up(),ca.info(`${this} sending content-modify for source-name: ${n}, maxHeight: ${e}`)})),ca.debug(t.tree()),this.connection.sendIQ(t,null,this.newJingleErrorHandler(t),la)}setReceiverVideoConstraint(e){ca.info(`${this} setReceiverVideoConstraint - constraints: ${JSON.stringify(e)}`),this._sourceReceiverConstraints=e,this.isP2P&&this.state===ia&&this.sendContentModify()}sendTransportAccept(e,t,n){const i=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-accept",initiator:this.initiatorJid,sid:this.sid});e.media.forEach(((t,n)=>{const r=Ns.parseMLine(t.split("\\r\\n")[0]);i.c("content",{creator:this.initiatorJid===this.localJid?"initiator":"responder",name:r.media}),e.transportToJingle(n,i),i.up()})),ca.info(`${this} Sending transport-accept`),ca.debug(i.tree()),this.connection.sendIQ(i,t,this.newJingleErrorHandler(i,n),la)}sendTransportReject(e,t){const n=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-reject",initiator:this.initiatorJid,sid:this.sid});ca.info(`${this} Sending \'transport-reject\'`),ca.debug(n.tree()),this.connection.sendIQ(n,e,this.newJingleErrorHandler(n,t),la)}setSenderVideoConstraint(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(this._assertNotEnded()){ca.info(`${this} setSenderVideoConstraint: ${e}, sourceName: ${t}`);const n=t?this.rtc.getLocalVideoTracks().find((e=>e.getSourceName()===t)):this.rtc.getLocalVideoTrack();return this.peerconnection.setSenderVideoConstraints(e,n)}return Promise.resolve()}terminate(e,t,n){if(this.state!==ra){if(!n||Boolean(n.sendSessionTerminate)){const i=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-terminate",initiator:this.initiatorJid,sid:this.sid}).c("reason").c(n&&n.reason||"success").up();n&&n.reasonDescription?i.c("text").t(n.reasonDescription).up().up():i.up(),this._bridgeSessionId&&i.c("bridge-session",{xmlns:"http://jitsi.org/protocol/focus",id:this._bridgeSessionId,restart:n&&!0===n.requestRestart}).up(),ca.info(`${this} Sending session-terminate`),ca.debug(i.tree()),this.connection.sendIQ(i,e,this.newJingleErrorHandler(i,t),la)}else ca.info(`${this} Skipped sending session-terminate`);this.connection.jingle.terminate(this.sid)}}onTerminated(e,t){ca.info(`${this} Session terminated`,e,t),this._xmppListeners.forEach((e=>e())),this._xmppListeners=[],this._removeSenderVideoConstraintsChangeListener&&this._removeSenderVideoConstraintsChangeListener(),Ai.isSsrcRewritingSupported()&&this.peerconnection&&this.peerconnection.getRemoteTracks().forEach((e=>{this.room.eventEmitter.emit(bt.TRACK_REMOVED,e)})),this.close()}onXmppStatusChanged(e){e===Lo.Status.CONNECTED&&this._cachedOldLocalSdp&&(ca.info(`${this} Sending SSRC update on reconnect`),this.notifyMySSRCUpdate(this._cachedOldLocalSdp,this._cachedNewLocalSdp))}_parseSsrcInfoFromSourceAdd(e,t){const n=[],i=this;return _t()(e).each(((e,r)=>{const o=_t()(r).attr("name");let s="";_t()(r).find(\'ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each((function(){const e=this.getAttribute("semantics"),t=_t()(this).find(">source").map((function(){return this.getAttribute("ssrc")})).get();t.length&&(s+=`a=ssrc-group:${e} ${t.join(" ")}\\r\\n`)})),_t()(r).find(\'source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each((function(){const e=_t()(this).attr("ssrc");t.containsSSRC(e)?!i.isP2P&&ca.warn(`${i} Source-add request for existing SSRC: ${e}`):_t()(this).find(">parameter").each((function(){s+=`a=ssrc:${e} ${_t()(this).attr("name")}`,_t()(this).attr("value")&&_t()(this).attr("value").length&&(s+=`:${_t()(this).attr("value")}`),s+="\\r\\n"}))}));let a=!1;t.media.forEach(((e,t)=>{Ns.findLine(e,`a=mid:${o}`)&&(n[t]||(n[t]=""),n[t]+=s,a=!0)})),!a&&this.isP2P&&(n[o]=s)})),n}addRemoteStream(e){this._addOrRemoveRemoteStream(!0,e)}removeRemoteStream(e){this._addOrRemoveRemoteStream(!1,e)}processSourceMap(e,t){if(!Ai.isSsrcRewritingSupported())return;const n=[];for(const i of e.mappedSources){const{owner:e,source:r,ssrc:o}=i;if(this.peerconnection.addRemoteSsrc(o,r)){n.push(i),ca.debug(`New SSRC signaled ${o}: owner=${e}, source-name=${r}`);const t=this.peerconnection.remoteSources.get(r);if(t){this._signalingLayer.removeSSRCOwners([t]);const e=this.peerconnection.getTrackBySSRC(t);e&&(e.setSourceName(void 0),e.setOwner(void 0),e._setVideoType(void 0))}}else{ca.debug(`Existing SSRC re-mapped ${o}: new owner=${e}, source-name=${r}`);const n=this.peerconnection.getTrackBySSRC(o);this._signalingLayer.setSSRCOwner(o,e,r),n.setSourceName(r),n.setOwner(e);const i=this._signalingLayer.getPeerMediaInfo(e,t,r);i&&(n._setVideoType(i.videoType),this.peerconnection._sourceMutedChanged(r,i.muted))}}if(n.length){let e=(0,St.$build)("content",{xmlns:"urn:xmpp:jingle:1",name:t}).c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:t});for(const i of n){const{rtx:n,ssrc:r,source:o}=i;let s;if(t===Ri.VIDEO){const t=++this.numRemoteVideoSources;s=`remote-video-${t} remote-video-${t}`,"-1"!==n&&(ha(e,i,n,s),e.c("ssrc-group",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",semantics:"FID"}).c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",ssrc:r}).up().c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",ssrc:n}).up().up())}else{const e=++this.numRemoteAudioSources;s=`remote-audio-${e} remote-audio-${e}`}ha(e,i,r,s),this.peerconnection.remoteSources.set(o,r)}e=e.up(),this._addOrRemoveRemoteStream(!0,e.node)}}removeRemoteStreamsOnLeave(e){ca.debug(`${this} Queued removeRemoteStreamsOnLeave task for participant ${e}`),this.modificationQueue.push((t=>{const n=this.peerconnection.getRemoteSourceInfoByParticipant(e);if(n.length){const e=this._processRemoteRemoveSource(n);this._renegotiate(e.raw).then((()=>t()),(e=>t(e)))}else t()}),(e=>{e?ca.error(`${this} removeRemoteStreamsOnLeave error:`,e):ca.info(`${this} removeRemoteStreamsOnLeave done!`)}))}_addOrRemoveRemoteStream(e,t){const n=e?"addRemoteStream":"removeRemoteStream";e&&this.readSsrcInfo(t),ca.debug(`${this} Queued ${n} task`),this.modificationQueue.push((i=>{if(!this.peerconnection.localDescription||!this.peerconnection.localDescription.sdp){const e=`${n} - localDescription not ready yet`;return ca.error(e),void i(e)}ca.log(`${this} Processing ${n}`);const r=new Ms(this.peerconnection.remoteDescription.sdp),o=e?this._parseSsrcInfoFromSourceAdd(t,r):this._parseSsrcInfoFromSourceRemove(t,r),s=e?this._processRemoteAddSource(o):this._processRemoteRemoveSource(o);this._renegotiate(s.raw).then((()=>{ca.log(`${this} ${n} - OK`),i()}),(e=>{ca.error(`${this} ${n} failed:`,e),i(e)}))}))}_processNewJingleOfferIq(e){const t=new Ms("");return this.webrtcIceTcpDisable&&(t.removeTcpCandidates=!0),this.webrtcIceUdpDisable&&(t.removeUdpCandidates=!0),this.failICE&&(t.failICE=!0),t.fromJingle(e),this.readSsrcInfo(_t()(e).find(">content")),t}_processRemoteRemoveSource(e){var t;const n=new Ms(this.peerconnection.peerconnection.remoteDescription.sdp);let i;return e.forEach((e=>{let t;(e=e.split("\\r\\n")).pop(),i=e.map((e=>{var t;return Number(null===(t=e.split("a=ssrc:")[1])||void 0===t?void 0:t.split(" ")[0])})),e.forEach((e=>{if(t=n.media.findIndex((t=>t.includes(e))),t>-1)if(n.media[t]=n.media[t].replace(`${e}\\r\\n`,""),this.isP2P){var i;const e=null===(i=Ns.parseMLine(n.media[t].split("\\r\\n")[0]))||void 0===i?void 0:i.media,r=this.peerconnection.getDesiredMediaDirection(e,!1);[As.SENDRECV,As.SENDONLY].forEach((e=>{n.media[t]=n.media[t].replace(`a=${e}`,`a=${r}`)}))}else{n.media[t]=n.media[t].replace(`a=${As.SENDONLY}`,`a=${As.INACTIVE}`);const{media:e,port:i}=Ns.parseMLine(n.media[t].split("\\r\\n")[0]);n.media[t]=n.media[t].replace(`m=${e} ${i}`,`m=${e} 0`)}}))})),(null===(t=i)||void 0===t?void 0:t.length)&&this._signalingLayer.removeSSRCOwners(i),n.raw=n.session+n.media.join(""),n}_processRemoteAddSource(e){let t=new Ms(this.peerconnection.remoteDescription.sdp);return e.length>t.media.length&&this.isP2P&&(t.addMlineForNewLocalSource(Ri.VIDEO),t=new Ms(t.raw)),e.forEach(((e,n)=>{if(t.media[n]+=e,this.isP2P){var i;const e=null===(i=Ns.parseMLine(t.media[n].split("\\r\\n")[0]))||void 0===i?void 0:i.media,r=this.peerconnection.getDesiredMediaDirection(e,!0);[As.RECVONLY,As.INACTIVE].forEach((e=>{t.media[n]=t.media[n].replace(`a=${e}`,`a=${r}`)}))}})),t.raw=t.session+t.media.join(""),t}_renegotiate(e){if("closed"===this.peerconnection.signalingState){const e=new Error("Attempted to renegotiate in state closed");return this.room.eventEmitter.emit(Hi.XMPPEvents.RENEGOTIATION_FAILED,e,this),Promise.reject(e)}const t=e||this.peerconnection.remoteDescription.sdp;if(!t){const e=new Error(`Can not renegotiate without remote description, current state: ${this.state}`);return this.room.eventEmitter.emit(Hi.XMPPEvents.RENEGOTIATION_FAILED,e,this),Promise.reject(e)}const n=new RTCSessionDescription({type:"offer",sdp:t}),i=this.peerconnection.localDescription.sdp;return ca.debug(`${this} Renegotiate: setting remote description`),this.peerconnection.setRemoteDescription(n).then((()=>(ca.debug(`${this} Renegotiate: creating answer`),this.peerconnection.createAnswer(this.mediaConstraints)))).then((e=>(ca.debug(`${this} Renegotiate: setting local description`),this.peerconnection.setLocalDescription(e)))).then((()=>{i&&this.notifyMySSRCUpdate(new Ms(i),new Ms(this.peerconnection.localDescription.sdp))}))}addTracks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(null!=e&&e.length||Promise.reject(new Error("No tracks passed")),e.find((e=>e.getType()!==Ri.VIDEO)))return Promise.reject(new Error("Multiple tracks of the given media type are not supported"));const t=[],n=n=>{const i=new Ms(this.peerconnection.peerconnection.remoteDescription.sdp),r=this.peerconnection.peerconnection.getTransceivers().find((e=>e.receiver.track.kind===Ri.VIDEO&&e.direction===As.RECVONLY&&e.currentDirection===As.RECVONLY));for(const t of e)this.isP2P&&r||i.addMlineForNewLocalSource(t.getType());this._renegotiate(i.raw).then((()=>{for(const n of e)t.push(this.peerconnection.replaceTrack(null,n));return Promise.all(t)})).then((()=>this._renegotiate())).then((()=>n()),(e=>n(e)))};return new Promise(((e,t)=>{ca.debug(`${this} Queued renegotiation after addTrack`),this.modificationQueue.push(n,(n=>{if(n){if(n instanceof Zs)return ca.debug(`${this} renegotiation after addTrack aborted: session terminated`),void e();ca.error(`${this} renegotiation after addTrack error`,n),t(n)}else ca.debug(`${this} renegotiation after addTrack executed - OK`),e()}))}))}setMediaTransferActive(e){return this.peerconnection.audioTransferActive!==e||this.peerconnection.videoTransferActive!==e?this.peerconnection.tpcUtils.setMediaTransferActive(e).then((()=>{this.peerconnection.audioTransferActive=e,this.peerconnection.videoTransferActive=e;const t=[];return t.push(this.peerconnection.configureVideoSenderEncodings()),t.push(this.peerconnection.configureAudioSenderEncodings()),Promise.allSettled(t)})):Promise.resolve()}replaceTrack(e,t){const n=n=>{ca.debug(`${this} replaceTrack worker started. oldTrack = ${e}, newTrack = ${t}`),this.peerconnection.replaceTrack(e,t).then((n=>{let i=Promise.resolve();return ca.debug(`${this} TPC.replaceTrack finished. shouldRenegotiate = ${n}, JingleSessionState = ${this.state}`),n&&(e||t)&&this.state===ia&&(i=this._renegotiate()),i.then((()=>{e&&t&&e.isVideoTrack()&&t.setSourceName(e.getSourceName())}))})).then((()=>n()),(e=>n(e)))};return new Promise(((i,r)=>{ca.debug(`${this} Queued replaceTrack task. Old track = ${e}, new track = ${t}`),this.modificationQueue.push(n,(e=>{if(e){if(e instanceof Zs)return ca.debug("Replace track aborted: session terminated"),void i();ca.error(`${this} Replace track error:`,e),r(e)}else ca.info(`${this} Replace track done!`),i()}))}))}_parseSsrcInfoFromSourceRemove(e,t){const n=[];return _t()(e).each(((e,i)=>{const r=_t()(i).attr("name");let o="";_t()(i).find(\'ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each((function(){const e=this.getAttribute("semantics"),t=_t()(this).find(">source").map((function(){return this.getAttribute("ssrc")})).get();t.length&&(o+=`a=ssrc-group:${e} ${t.join(" ")}\\r\\n`)}));const s=[];_t()(i).find(\'source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each((function(){const e=_t()(this).attr("ssrc");s.push(e)})),t.media.forEach(((e,t)=>{Ns.findLine(e,`a=mid:${r}`)&&(n[t]||(n[t]=""),s.forEach((i=>{const r=Ns.findLines(e,`a=ssrc:${i}`);r.length&&(n[t]+=`${r.join("\\r\\n")}\\r\\n`)})),n[t]+=o)}))})),n}addTrackToPc(e){return this._addRemoveTrack(!1,e).then((()=>{if(e.isVideoTrack())return this.peerconnection.configureVideoSenderEncodings(e)}))}removeTrackFromPc(e){return this._addRemoveTrack(!0,e)}_addRemoveTrack(e,t){if(!t)return Promise.reject(\'invalid "track" argument value\');const n=e?"removeTrack":"addTrack",i=i=>{const r=this.peerconnection;r?(e?r.removeTrackFromPc(t):r.addTrackToPc(t)).then((e=>{e?this._renegotiate().then(i):i()}),i):i(`Error: tried ${n} track with no active peer connection`)};return ca.debug(`${this} Queued ${n} task`),new Promise(((e,t)=>{this.modificationQueue.push(i,(i=>{if(i){if(i instanceof Zs)return ca.debug(`${this} ${n} aborted: session terminated`),void e();ca.error(`${this} ${n} failed`),t(i)}else ca.debug(`${this} ${n} done`),e()}))}))}setP2pVideoTransferActive(e){return this.peerconnection?this._localSendReceiveVideoActive!==e?(this._localSendReceiveVideoActive=e,this.isP2P&&this.state===ia&&this.sendContentModify(),this.peerconnection.setVideoTransferActive(this._localSendReceiveVideoActive&&this._remoteSendReceiveVideoActive)):Promise.resolve():Promise.reject(\'Can not modify video transfer active state, before "initialize" is called\')}modifyContents(e){const t=ua.parseVideoSenders(e),n=ua.parseSourceMaxFrameHeight(e);if(n&&(this.remoteSourceMaxFrameHeights=n,this.eventEmitter.emit(da.REMOTE_SOURCE_CONSTRAINTS_CHANGED,this,n)),null===t)return void ca.error(`${this} - failed to parse video "senders" attribute in "content-modify" action`);if(!this._assertNotEnded())return;const i="both"===t||"initiator"===t&&this.isInitiator||"responder"===t&&!this.isInitiator;i!==this._remoteSendReceiveVideoActive&&(ca.debug(`${this} new remote video active: ${i}`),this._remoteSendReceiveVideoActive=i,this.peerconnection.setVideoTransferActive(this._localSendReceiveVideoActive&&this._remoteSendReceiveVideoActive))}notifyMySSRCUpdate(e,t){if(this.state!==ia)return void ca.warn(`${this} Skipping SSRC update in \'${this.state} \' state.`);if(!this.connection.connected)return this._cachedOldLocalSdp||(this._cachedOldLocalSdp=e),this._cachedNewLocalSdp=t,void ca.warn(`${this} Not sending SSRC update while the signaling is disconnected`);this._cachedOldLocalSdp=void 0,this._cachedNewLocalSdp=void 0;const n=e=>{const t=e.getNewMedia();let n=[],i=null;return Object.keys(t).forEach((e=>{const r=Object.keys(t[e].ssrcs);i=t[e].mid,null!=r&&r.length&&(n=n.concat(r))})),{mediaType:i,ssrcs:n}};let i=new Fs(t,e);const r=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"source-remove",initiator:this.initiatorJid,sid:this.sid});i.toJingle(r);const o={},s=n(i);s.ssrcs.length&&(ca.info(`${this} Sending source-remove for ${s.mediaType} ssrcs=${s.ssrcs}`),this.connection.sendIQ(r,(()=>{this.room.eventEmitter.emit(Hi.XMPPEvents.SOURCE_REMOVE,this,o)}),this.newJingleErrorHandler(r,(e=>{this.room.eventEmitter.emit(Hi.XMPPEvents.SOURCE_REMOVE_ERROR,this,e,o)})),la)),i=new Fs(e,t);const a=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"source-add",initiator:this.initiatorJid,sid:this.sid});i.toJingle(a);const d=n(i);d.ssrcs.length&&(ca.info(`${this} Sending source-add for ${d.mediaType} ssrcs=${d.ssrcs}`),this.connection.sendIQ(a,(()=>{this.room.eventEmitter.emit(Hi.XMPPEvents.SOURCE_ADD,this,o)}),this.newJingleErrorHandler(a,(e=>{this.room.eventEmitter.emit(Hi.XMPPEvents.SOURCE_ADD_ERROR,this,e,d.mediaType,o)})),la))}newJingleErrorHandler(e,t){return e=>{const n={},i=_t()(e).find("error");if(i.length){n.code=i.attr("code");const t=_t()(e).find("error :first");t.length&&(n.reason=t[0].tagName);const r=i.find(">text");r.length&&(n.msg=r.text())}e||(n.reason="timeout"),n.session=this.toString(),t?t(n):this.state===ra&&"item-not-found"===n.reason?ca.debug(`${this} Jingle error: ${JSON.stringify(n)}`):ca.error(`Jingle error: ${JSON.stringify(n)}`)}}getIceConnectionState(){return this.peerconnection.getConnectionState()}close(){this.state=ra,this.establishmentDuration=void 0,this.peerconnection&&(this.peerconnection.onicecandidate=null,this.peerconnection.oniceconnectionstatechange=null,this.peerconnection.onnegotiationneeded=null,this.peerconnection.onsignalingstatechange=null),ca.debug(`${this} Clearing modificationQueue`),this.modificationQueue.clear(),ca.debug(`${this} Queued PC close task`),this.modificationQueue.push((e=>{this.peerconnection&&this.peerconnection.close(),e(),ca.debug(`${this} PC close task done!`)})),ca.debug(`${this} Shutdown modificationQueue!`),this.modificationQueue.shutdown()}toString(){return`JingleSessionPC[session=${this.isP2P?"P2P":"JVB"},initiator=${this.isInitiator},sid=${this.sid}]`}}const pa=(0,E.getLogger)("modules/xmpp/strophe.jingle.js");function ma(e){const t=_t()(e).find(">candidate"),n=[];return t.each(((e,t)=>{const i=t.attributes,r=[];for(let e=0;ejson-message");if(null!=d&&d.length){var c;let t;pa.info(`Found a JSON-encoded element in ${n}, translating to standard Jingle.`);for(let n=0;nstartmuted");if(a&&pa.debug(`Received ${n} from ${i}`),null!=t&&t.length){const e=t.attr(Ri.AUDIO),n=t.attr(Ri.VIDEO);this.eventEmitter.emit(Hi.XMPPEvents.START_MUTED_FROM_FOCUS,"true"===e,"true"===n)}const r=a?this.p2pIceConfig:this.jvbIceConfig;o=new ua(_t()(e).find("jingle").attr("sid"),_t()(e).attr("to"),i,this.connection,this.mediaConstraints,Ss()(r),a,!1),this.sessions[o.sid]=o,this.eventEmitter.emit(Hi.XMPPEvents.CALL_INCOMING,o,_t()(e).find(">jingle"),s);break}case"session-accept":{const t=[],r=_t()(e).find("jingle>content");for(const e of r){const n=_t()(e).find("description").attr("ssrc");n&&t.push(n)}pa.debug(`Received ${n} from ${i} with ssrcs=${t}`),this.eventEmitter.emit(Hi.XMPPEvents.CALL_ACCEPTED,o,_t()(e).find(">jingle"));break}case"content-modify":pa.debug(`Received ${n} from ${i}`),o.modifyContents(_t()(e).find(">jingle"));break;case"transport-info":{const t=ma(_t()(e).find("jingle>content>transport"));pa.debug(`Received ${n} from ${i} for candidates=${t.join(", ")}`),this.eventEmitter.emit(Hi.XMPPEvents.TRANSPORT_INFO,o,_t()(e).find(">jingle"));break}case"session-terminate":{pa.log("terminating...",o.sid);let t=null,r=null;_t()(e).find(">jingle>reason").length&&(t=_t()(e).find(">jingle>reason>:first")[0].tagName,r=_t()(e).find(">jingle>reason>text").text()),pa.debug(`Received ${n} from ${i} disconnect reason=${r}`),this.terminate(o.sid,t,r),this.eventEmitter.emit(Hi.XMPPEvents.CALL_ENDED,o,t,r);break}case"transport-replace":{var l;pa.info("(TIME) Start transport replace:\\t",s);const t=_t()(e).find("jingle>content>transport"),r=ma(t),d=_t()(t).attr("ufrag"),c=_t()(t).attr("pwd"),h=null===(l=_t()(t).find(">fingerprint"))||void 0===l?void 0:l.text();pa.debug(`Received ${n} from ${i} with iceUfrag=${d}, icePwd=${c}, DTLS fingerprint=${h}, candidates=${r.join(", ")}`),Mi.sendAnalytics(dn(Jt,{p2p:a,value:s})),o.replaceTransport(_t()(e).find(">jingle"),(()=>{const e=window.performance.now();pa.info("(TIME) Transport replace success:\\t",e),Mi.sendAnalytics(dn(Bt,{p2p:a,value:e}))}),(e=>{pa.error("Transport replace failed",e),o.sendTransportReject()}));break}case"source-add":o.addRemoteStream(_t()(e).find(">jingle>content"));break;case"source-remove":o.removeRemoteStream(_t()(e).find(">jingle>content"));break;default:pa.warn("jingle action not implemented",n),r.attrs({type:"error"}),r.c("error",{type:"cancel"}).c("bad-request",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up()}return this.connection.send(r),!0}newP2PJingleSession(e,t){const n=new ua(co().randomHexString(12),e,t,this.connection,this.mediaConstraints,this.p2pIceConfig,!0,!0);return this.sessions[n.sid]=n,n}terminate(e,t,n){this.sessions.hasOwnProperty(e)&&("ended"!==this.sessions[e].state&&this.sessions[e].onTerminated(t,n),delete this.sessions[e])}getStunAndTurnCredentials(){this.connection.sendIQ((0,St.$iq)({type:"get",to:this.xmpp.options.hosts.domain}).c("services",{xmlns:"urn:xmpp:extdisco:2"}),(e=>this.onReceiveStunAndTurnCredentials(e)),(()=>{pa.warn("getting turn credentials with extdisco:2 failed, trying extdisco:1"),this.connection.sendIQ((0,St.$iq)({type:"get",to:this.xmpp.options.hosts.domain}).c("services",{xmlns:"urn:xmpp:extdisco:1"}),(e=>this.onReceiveStunAndTurnCredentials(e)),(()=>{pa.warn("getting turn credentials failed"),pa.warn("is mod_turncredentials or similar installed and configured?")}))}))}onReceiveStunAndTurnCredentials(e){let t=[];_t()(e).find(">services>service").each(((e,n)=>{const i={},r=(n=_t()(n)).attr("type");switch(r){case"stun":i.urls=`stun:${n.attr("host")}`,n.attr("port")&&(i.urls+=`:${n.attr("port")}`),t.push(i);break;case"turn":case"turns":{i.urls=`${r}:`,i.username=n.attr("username"),i.urls+=n.attr("host");const e=n.attr("port");e&&(i.urls+=`:${e}`);const o=n.attr("transport");o&&"udp"!==o&&(i.urls+=`?transport=${o}`),i.credential=n.attr("password")||i.credential,t.push(i);break}}}));const n=this.xmpp.options,{iceServersOverride:i=[]}=n;i.forEach((e=>{let{targetType:n,urls:i,username:r,credential:o}=e;if(!["turn","turns","stun"].includes(n))return;const s=`${n}:`;void 0===i&&void 0===r&&void 0===o||(null===i&&(t=t.filter((e=>!e.urls.startsWith(s)))),t.forEach((e=>{e.urls.startsWith(s)&&(e.urls=null!=i?i:e.urls,null===r?delete e.username:e.username=null!=r?r:e.username,null===o?delete e.credential:e.credential=null!=o?o:e.credential)})))}));for(let e=t.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1)),i=t[e];t[e]=t[n],t[n]=i}let r;return r=n.useTurnUdp?e=>e.urls.startsWith("turn"):e=>e.urls.startsWith("turn")&&e.urls.indexOf("transport=tcp")>=0,this.jvbIceConfig.iceServers=t.filter(r),this.p2pIceConfig.iceServers=t,t.length>0}getLog(){const e={};return Object.keys(this.sessions).forEach((t=>{const n=this.sessions[t].peerconnection;n&&n.updateLog&&(e[`jingle_${t}`]={updateLog:n.updateLog,stats:n.stats,url:window.location.href})})),e}}class fa extends Do{constructor(){super(),this.log=[]}init(e){super.init(e),this.connection.rawInput=this.logIncoming.bind(this),this.connection.rawOutput=this.logOutgoing.bind(this)}logIncoming(e){this.log.push([(new Date).getTime(),"incoming",e])}logOutgoing(e){this.log.push([(new Date).getTime(),"outgoing",e])}}const va=(0,E.getLogger)("modules/xmpp/strophe.rayo.js"),_a="urn:xmpp:rayo:1";class ya extends Do{init(e){super.init(e),this.connection.addHandler(this.onRayo.bind(this),_a,"iq","set",null,null)}onRayo(e){va.info("Rayo IQ",e)}dial(e,t,n,i,r){return new Promise(((o,s)=>{if(!r)return void s(new Error("Internal error!"));const a=(0,St.$iq)({type:"set",to:r});a.c("dial",{xmlns:_a,to:e,from:t}),a.c("header",{name:"JvbRoomName",value:n}).up(),i&&i.length&&a.c("header",{name:"JvbRoomPassword",value:i}).up(),this.connection.sendIQ(a,(e=>{va.info("Dial result ",e);const t=_t()(e).find("ref").attr("uri");this.callResource=t.substr("xmpp:".length),va.info(`Received call resource: ${this.callResource}`),o()}),(e=>{va.info("Dial error ",e),s(e)}))}))}hangup(){return new Promise(((e,t)=>{if(!this.callResource)return t(new Error("No call in progress")),void va.warn("No call in progress");const n=(0,St.$iq)({type:"set",to:this.callResource});n.c("hangup",{xmlns:_a}),this.connection.sendIQ(n,(t=>{va.info("Hangup result ",t),this.callResource=null,e()}),(e=>{va.info("Hangup error ",e),this.callResource=null,t(new Error("Hangup error "))}))}))}}const Ea=(0,E.getLogger)("modules/xmpp/strophe.util.js");let Sa=-1;const ba=/request id \\d+.\\d+ got 200/,Ta=/request errored, status: (\\d+), number of errors: \\d+/,Ca=(0,E.getLogger)("modules/xmpp/xmpp.js"),xa=/(.*)<\\/text><\\/failure>/gi;const Ra=[{urls:"stun:meet-jit-si-turnrelay.jitsi.net:443"}],Aa="type",wa="http://jitsi.org/protocol/jigasi",Ia="https://jitsi.org/meet/e2ee";class Pa extends xr{constructor(e,t){if(super(),e.bosh&&!e.serviceUrl)throw new Error(\'The "bosh" option is no longer supported, please use "serviceUrl" instead\');this.connection=null,this.disconnectInProgress=!1,this.connectionTimes={},this.options=e,this.token=t,this.authenticatedUser=!1,this.options.deploymentInfo||(this.options.deploymentInfo={}),this._components=[],St.Strophe.log=function(e,t){switch(Ea.trace("Strophe",e,t),"string"==typeof t&&-1!==t.indexOf("Request ")&&-1!==t.indexOf("timed out (secondary), restarting")&&(e=St.Strophe.LogLevel.WARN),e){case St.Strophe.LogLevel.DEBUG:-1!==Sa&&ba.test(t)&&(Ea.debug("Reset lastErrorStatus"),Sa=-1);break;case St.Strophe.LogLevel.WARN:Ea.warn(`Strophe: ${t}`);const e=Ta.exec(t);e&&2===e.length&&(Sa=parseInt(e[1],10),Ea.debug(`lastErrorStatus set to: ${Sa}`));break;case St.Strophe.LogLevel.ERROR:case St.Strophe.LogLevel.FATAL:Ea.error(`Strophe: ${t}`,t)}},St.Strophe.getLastErrorStatus=function(){return Sa},St.Strophe.getStatusString=function(e){switch(e){case St.Strophe.Status.BINDREQUIRED:return"BINDREQUIRED";case St.Strophe.Status.ERROR:return"ERROR";case St.Strophe.Status.CONNECTING:return"CONNECTING";case St.Strophe.Status.CONNFAIL:return"CONNFAIL";case St.Strophe.Status.AUTHENTICATING:return"AUTHENTICATING";case St.Strophe.Status.AUTHFAIL:return"AUTHFAIL";case St.Strophe.Status.CONNECTED:return"CONNECTED";case St.Strophe.Status.DISCONNECTED:return"DISCONNECTED";case St.Strophe.Status.DISCONNECTING:return"DISCONNECTING";case St.Strophe.Status.ATTACHED:return"ATTACHED";default:return"unknown"}},St.Strophe.addConnectionPlugin("logger",new fa);const n=e.xmppPing||{};n.domain=e.hosts.domain,this.connection=function(e){let{enableWebsocketResume:t,serviceUrl:n="/http-bind",shard:i,token:r,websocketKeepAlive:o,websocketKeepAliveUrl:s,xmppPing:a}=e;return r&&(n+=`${-1===n.indexOf("?")?"?":"&"}token=${r}`),new Lo({enableWebsocketResume:t,serviceUrl:n,websocketKeepAlive:o,websocketKeepAliveUrl:s,xmppPing:a,shard:i})}({enableWebsocketResume:e.enableWebsocketResume,serviceUrl:e.serviceUrl,token:t,websocketKeepAlive:e.websocketKeepAlive,websocketKeepAliveUrl:e.websocketKeepAliveUrl,xmppPing:n,shard:e.deploymentInfo.shard}),this.moderator=new Ko(this),this.connection.on(Lo.Events.CONN_SHARD_CHANGED,(()=>{const e={shard_changed:!0,suspend_time:this.connection.ping.getPingSuspendTime(),time_since_last_success:this.connection.getTimeSinceLastSuccess()};this.eventEmitter.emit(ur,Sr,void 0,void 0,e)})),this._initStrophePlugins(),this.caps=new bo(this.connection,"https://jitsi.org/jitsi-meet"),this.initFeaturesList(),_t()(window).on((this.options.disableBeforeUnloadHandlers?"":"beforeunload ")+"unload",(e=>{this.disconnect(e).catch((()=>{}))}))}initFeaturesList(){this.caps.addFeature("urn:xmpp:jingle:1"),this.caps.addFeature("urn:xmpp:jingle:apps:rtp:1"),this.caps.addFeature("urn:xmpp:jingle:transports:ice-udp:1"),this.caps.addFeature("urn:xmpp:jingle:apps:dtls:0"),this.caps.addFeature("urn:xmpp:jingle:transports:dtls-sctp:1"),this.caps.addFeature("urn:xmpp:jingle:apps:rtp:audio"),this.caps.addFeature("urn:xmpp:jingle:apps:rtp:video"),this.caps.addFeature("http://jitsi.org/json-encoded-sources"),!this.options.disableRtx&&ci.supportsRTX()&&this.caps.addFeature("urn:ietf:rfc:4588"),!0===this.options.enableOpusRed&&ci.supportsAudioRed()&&this.caps.addFeature("http://jitsi.org/opus-red"),(void 0===this.options.enableRemb||this.options.enableRemb)&&this.caps.addFeature("http://jitsi.org/remb"),ci.isFirefox()&&ci.isVersionLessThan(115)||void 0!==this.options.enableTcc&&!this.options.enableTcc||this.caps.addFeature("http://jitsi.org/tcc"),this.connection.rayo&&this.caps.addFeature("urn:xmpp:rayo:client:1"),so.isSupported(this.options)&&this.caps.addFeature(Ia,!1,!0),Ca.debug("Source-name signaling is enabled"),this.caps.addFeature("http://jitsi.org/source-name"),Ca.debug("Receiving multiple video streams is enabled"),this.caps.addFeature("http://jitsi.org/receive-multiple-video-streams"),Ai.isSsrcRewritingSupported()&&this.caps.addFeature("http://jitsi.org/ssrc-rewriting-1"),this.caps.addFeature("http://jitsi.org/visitors-1")}getConnection(){return this.connection}connectionHandler(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;const i=window.performance.now(),r=St.Strophe.getStatusString(t).toLowerCase();if(this.connectionTimes[r]=i,Ca.log(`(TIME) Strophe ${r}${n?`[${n}]`:""}:\\t`,i),this.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_STATUS_CHANGED,e,t,n),this._maybeSendDeploymentInfoStat(),t===St.Strophe.Status.CONNECTED||t===St.Strophe.Status.ATTACHED)this._sysMessageHandler&&(this.connection._stropheConn.deleteHandler(this._sysMessageHandler),this._sysMessageHandler=null),this.sendDiscoInfo&&this.connection.jingle.getStunAndTurnCredentials(),Ca.info(`My Jabber ID: ${this.connection.jid}`),this._resetState(),this.sendDeploymentInfo=!1,this.sendDiscoInfo&&this.caps.getFeaturesAndIdentities(this.options.hosts.domain).then((e=>{let{features:t,identities:n}=e;t.has(St.Strophe.NS.PING)||Ca.error(`Ping NOT supported by ${this.options.hosts.domain} - please enable ping in your XMPP server config`),this._processDiscoInfoIdentities(n,void 0)})).catch((e=>{Ca.error("Feature discovery error",e),this._maybeSendDeploymentInfoStat(!0)})),this.sendDiscoInfo=!1,e.password&&(this.authenticatedUser=!0),this.connection&&this.connection.connected&&St.Strophe.getResourceFromJid(this.connection.jid)&&this.eventEmitter.emit(hr,St.Strophe.getResourceFromJid(this.connection.jid));else if(t===St.Strophe.Status.CONNFAIL)"x-strophe-bad-non-anon-jid"===n?this.anonymousConnectionFailed=!0:this.connectionFailed=!0,this.lastErrorMsg=n,"giving-up"===n&&this.eventEmitter.emit(ur,Sr,n);else if(t===St.Strophe.Status.ERROR)this.lastErrorMsg=n;else if(t===St.Strophe.Status.DISCONNECTED){this.connection.ping.stopInterval();const e=Boolean(this.disconnectInProgress),t=n||this.lastErrorMsg;if(this.anonymousConnectionFailed)this.eventEmitter.emit(ur,br);else if(this.connectionFailed)this.eventEmitter.emit(ur,Sr,t,void 0,this._getConnectionFailedReasonDetails());else if(e)this.eventEmitter.emit(lr,t);else{Ca.error("XMPP connection dropped!");const e=St.Strophe.getLastErrorStatus();e>=500&&e<600?this.eventEmitter.emit(ur,Tr,t||"server-error",void 0,this._getConnectionFailedReasonDetails()):this.eventEmitter.emit(ur,Er,t||"connection-dropped-error",void 0,this._getConnectionFailedReasonDetails())}}else if(t===St.Strophe.Status.AUTHFAIL){const t=this.getConnection().getLastFailedMessage();this.eventEmitter.emit(ur,br,n||this._parseConnectionFailedMessage(t),e)}}_processDiscoInfoIdentities(e,t){e.forEach((e=>{if("av_moderation"===e.type&&(this.avModerationComponentAddress=e.name,this._components.push(this.avModerationComponentAddress)),"end_conference"===e.type&&(this.endConferenceComponentAddress=e.name,this._components.push(this.endConferenceComponentAddress)),"speakerstats"===e.type&&(this.speakerStatsComponentAddress=e.name,this._components.push(this.speakerStatsComponentAddress)),"lobbyrooms"===e.type){this.lobbySupported=!0;const n=e=>{e.forEach((e=>{e.endsWith("#displayname_required")&&this.eventEmitter.emit(gr)}))};t?n(t):e.name&&this.caps.getFeaturesAndIdentities(e.name,e.type).then((e=>{let{features:t}=e;return n(t)})).catch((e=>Ca.warn("Error getting features from lobby.",e&&e.message)))}if("shard"===e.type&&(this.options.deploymentInfo.shard=this.connection.shard=e.name),"region"===e.type&&(this.options.deploymentInfo.region=this.connection.region=e.name),"release"===e.type&&(this.options.deploymentInfo.backendRelease=e.name),"breakout_rooms"===e.type){this.breakoutRoomsComponentAddress=e.name,this._components.push(this.breakoutRoomsComponentAddress);const n=e=>{this.breakoutRoomsFeatures={},e.forEach((e=>{e.endsWith("#rename")&&(this.breakoutRoomsFeatures.rename=!0)}))};t?n(t):e.name&&this.caps.getFeaturesAndIdentities(e.name,e.type).then((e=>{let{features:t}=e;return n(t)})).catch((e=>Ca.warn("Error getting features for breakout rooms.",e&&e.message)))}"room_metadata"===e.type&&(this.roomMetadataComponentAddress=e.name,this._components.push(this.roomMetadataComponentAddress)),"visitors"===e.type&&this._components.push(e.name)})),this._maybeSendDeploymentInfoStat(!0),this._components.length>0&&this.connection.addHandler(this._onPrivateMessage.bind(this),null,"message",null,null)}_parseConnectionFailedMessage(e){if(!e)return null;xa.lastIndex=0;const t=xa.exec(e);return t?t[1]:null}_connect(e,t){this._resetState(),this.sendDiscoInfo=!0,this.sendDeploymentInfo=!0,this.connection._stropheConn&&this.connection._stropheConn._addSysHandler?this._sysMessageHandler=this.connection._stropheConn._addSysHandler(this._onSystemMessage.bind(this),null,"message"):Ca.warn("Cannot attach strophe system handler, jiconop cannot operate"),this.connection.connect(e,t,this.connectionHandler.bind(this,{jid:e,password:t}))}_onSystemMessage(e){if(0===_t()(e).find(">services").length&&0===_t()(e).find(">query").length)return;this.sendDiscoInfo=!1;const t=this.connection.jingle.onReceiveStunAndTurnCredentials(e),{features:n,identities:i}=So(e);this._processDiscoInfoIdentities(i,n),(t||i.size>0||n.size>0)&&(this.connection._stropheConn.deleteHandler(this._sysMessageHandler),this._sysMessageHandler=null)}attach(e){this._resetState(),this.sendDiscoInfo=!0;const t=this.connectionTimes.attaching=window.performance.now();Ca.log("(TIME) Strophe Attaching:\\t",t),this.connection.attach(e.jid,e.sid,parseInt(e.rid,10)+1,this.connectionHandler.bind(this,{jid:e.jid,password:e.password}))}_resetState(){this.anonymousConnectionFailed=!1,this.connectionFailed=!1,this.lastErrorMsg=void 0,this.disconnectInProgress=void 0}connect(e,t){if(!e){const{anonymousdomain:t,domain:n}=this.options.hosts;let i=t||n;const{location:r}=window;if(t){const e=r&&r.search;(e&&-1!==e.indexOf("login=true")||this.token)&&(i=n)}e=i||r&&r.hostname}return this._startConnecting=!0,this._connect(e,t)}createRoom(e,t,n){const i=e.domain||t.customDomain;let r=`${this.getRoomJid(e,i)}/`;const o=n?n(this.connection.jid,this.authenticatedUser):co().randomHexString(8).toLowerCase();return Ca.info(`JID ${this.connection.jid} using MUC nickname ${o}`),r+=o,this.connection.emuc.createRoom(r,null,t)}getRoomJid(e,t){return`${e}@${t||this.options.hosts.muc.toLowerCase()}`}isRoomCreated(e,t){return this.connection.emuc.isRoomCreated(this.getRoomJid(e,t))}getJid(){return this.connection.jid}getJingleLog(){const e=this.connection.jingle;return e?e.getLog():{}}getXmppLog(){return(this.connection.logger||{}).log||null}dial(){this.connection.rayo.dial(...arguments)}ping(e){return new Promise(((t,n)=>{this.connection.ping.ping(this.connection.pingDomain,t,n,e)}))}getSessions(){return this.connection.jingle.sessions}disconnect(e){return this.disconnectInProgress?this.disconnectInProgress:this.connection&&this._startConnecting?(this.disconnectInProgress=new Promise((e=>{const t=(n,i)=>{i===St.Strophe.Status.DISCONNECTED&&(this.eventEmitter.removeListener(Hi.XMPPEvents.CONNECTION_STATUS_CHANGED,t),e())};this.eventEmitter.on(Hi.XMPPEvents.CONNECTION_STATUS_CHANGED,t)})),this._cleanupXmppConnection(e),this.disconnectInProgress):Promise.resolve()}_cleanupXmppConnection(e){if(!this.connection.isUsingWebSocket&&this.connection.flush(),!this.connection.isUsingWebSocket&&null!=e){const t=e.type;if(("beforeunload"===t||"unload"===t)&&(this.connection.options.sync=!0,this.connection.sendUnavailableBeacon()))return}this.connection.disconnect(),this._startConnecting=!1,!0!==this.connection.options.sync&&this.connection.flush()}_initStrophePlugins(){const e={jvb:{iceServers:[]},p2p:{iceServers:[]}},t=this.options.p2p&&this.options.p2p.stunServers||Ra;Array.isArray(t)&&(Ca.info("P2P STUN servers: ",t),e.p2p.iceServers=t),this.options.p2p&&this.options.p2p.iceTransportPolicy&&(Ca.info("P2P ICE transport policy: ",this.options.p2p.iceTransportPolicy),e.p2p.iceTransportPolicy=this.options.p2p.iceTransportPolicy),this.connection.addConnectionPlugin("emuc",new ys(this)),this.connection.addConnectionPlugin("jingle",new ga(this,this.eventEmitter,e)),this.connection.addConnectionPlugin("rayo",new ya)}_getConnectionFailedReasonDetails(){const e={};if(this.options.deploymentInfo&&this.options.deploymentInfo.shard&&this.connection.lastResponseHeaders){const t=this.connection.lastResponseHeaders.trim().split(/[\\r\\n]+/),n={};t.forEach((e=>{const t=e.split(": "),i=t.shift(),r=t.join(": ");n[i]=r})),e.shard_changed=this.options.deploymentInfo.shard!==n["x-jitsi-shard"]}return e.suspend_time=this.connection.ping.getPingSuspendTime(),e.time_since_last_success=this.connection.getTimeSinceLastSuccess(),e}sendDominantSpeakerEvent(e,t){if(!this.speakerStatsComponentAddress||!e)return;const n=(0,St.$msg)({to:this.speakerStatsComponentAddress});n.c("speakerstats",{xmlns:"http://jitsi.org/jitmeet",room:e,silence:t}).up(),this.connection.send(n)}sendFaceLandmarksEvent(e,t){if(!this.speakerStatsComponentAddress||!e)return;const n=(0,St.$msg)({to:this.speakerStatsComponentAddress});n.c("faceLandmarks",{xmlns:"http://jitsi.org/jitmeet",room:e,faceExpression:t.faceExpression,timestamp:t.timestamp,duration:t.duration}).up(),this.connection.send(n)}tryParseJSONAndVerify(e){if(!e)return!1;try{const t=_r(e);if(t&&"object"==typeof t){const e=t[Aa];if(void 0!==e)return t;Ca.debug("parsing valid json but does not have correct structure","topic: ",e)}}catch(t){return Ca.error(`Error parsing json ${e}`,t),!1}return!1}_onPrivateMessage(e){const t=e.getAttribute("from");if(!this._components.includes(t))return!0;const n=_t()(e).find(">json-message").text(),i=this.tryParseJSONAndVerify(n);return!i||("speakerstats"===i[Aa]&&i.users?this.eventEmitter.emit(Hi.XMPPEvents.SPEAKER_STATS_RECEIVED,i.users):"av_moderation"===i[Aa]?this.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_RECEIVED,i):"breakout_rooms"===i[Aa]?this.eventEmitter.emit(Hi.XMPPEvents.BREAKOUT_ROOMS_EVENT,i):"room_metadata"===i[Aa]?this.eventEmitter.emit(Hi.XMPPEvents.ROOM_METADATA_EVENT,i):"visitors"===i[Aa]&&this.eventEmitter.emit(Hi.XMPPEvents.VISITORS_MESSAGE,i),!0)}_maybeSendDeploymentInfoStat(e){const t=[St.Strophe.Status.ERROR,St.Strophe.Status.CONNFAIL,St.Strophe.Status.AUTHFAIL,St.Strophe.Status.DISCONNECTED,St.Strophe.Status.CONNTIMEOUT];if(!(e||t.includes(this.connection.status)&&this.sendDeploymentInfo))return;const n=this.options.deploymentInfo;if(n&&Object.keys(n).length>0){const e={};for(const t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);Mi.analytics.addPermanentProperties({...e}),e.id="deployment_info";const t=JSON.stringify(e);Ca.info(t)}this.sendDeploymentInfo=!1;const{region:i,shard:r}=n;(i||r)&&this.eventEmitter.emit(fr,JSON.parse(JSON.stringify({region:i,shard:r})))}}function Da(e){let t,{id:n,password:i,onCreateResource:r,onLoginSuccessful:o}=e,s=!1,a=new Pa(this.connection.options);const d=new Promise(((e,d)=>{t=d,a.addListener(lr,(()=>{a=void 0})),a.addListener(hr,(()=>{if(s)return;o&&o();const t=a.createRoom(this.options.name,this.options.config,r);t.xmpp.moderator.authenticate(t.roomjid).then((()=>{a&&a.disconnect(),s||this.room.xmpp.moderator.sendConferenceRequest(this.room.roomjid).finally(e)})).catch((e=>{let{error:t,message:n}=e;a.disconnect(),d({authenticationError:t,message:n})}))})),a.addListener(ur,((e,t,n)=>{d({connectionError:e,credentials:n,message:t}),a=void 0})),s||a.connect(n,i)}));return d.cancel=()=>{s=!0,t({}),a&&a.disconnect()},d}const Oa=(0,E.getLogger)("modules/RTC/CodecSelection.js"),ka=[Ds.VP9,Ds.VP8,Ds.H264,Ds.AV1],Na=[Ds.H264,Ds.VP8,Ds.VP9,Ds.AV1],Ma=[Ds.VP8,Ds.VP9,Ds.H264,Ds.AV1];class La{constructor(e,t){this.conference=e,this.options=t,this.codecPreferenceOrder={},this.visitorCodecs=[];for(const e of Object.keys(t)){let{disabledCodec:r,preferredCodec:o,preferenceOrder:s}=t[e];const a=new Set(this._getSupportedVideoCodecs(e));let d=Array.from(a);if(s)s=s.map((e=>e.toLowerCase())),d=s.filter((e=>a.has(e)));else if(o||r){var n,i;r=null===(n=r)||void 0===n?void 0:n.toLowerCase(),o=null===(i=o)||void 0===i?void 0:i.toLowerCase(),r&&r!==Ds.VP8&&(d=d.filter((e=>e!==r)));const e=d.findIndex((e=>e===o));o&&-1!==e&&(d.splice(e,1),d.unshift(o))}if(!(ci.supportsVP9()||ci.isWebKitBased()&&"p2p"===e)||this.conference.isE2EEEnabled()){const e=d.findIndex((e=>e===Ds.VP9));-1!==e&&(d.splice(e,1),this.conference.isE2EEEnabled()||d.push(Ds.VP9))}Oa.info(`Codec preference order for ${e} connection is ${d}`),this.codecPreferenceOrder[e]=d}this.conference.on(q,(e=>this._selectPreferredCodec(e))),this.conference.on(ue,(e=>this._updateVisitorCodecs(e))),this.conference.on(at,(()=>this._selectPreferredCodec())),this.conference.on(dt,(()=>this._selectPreferredCodec()))}_getSupportedVideoCodecs(e){const t=(ci.isMobileDevice()&&"p2p"===e?Na:ci.isMobileDevice()?Ma:ka).filter((e=>{var t,n,i,r;return(null!==(t=null===(n=window.RTCRtpReceiver)||void 0===n||null===(i=n.getCapabilities)||void 0===i||null===(r=i.call(n,Ri.VIDEO))||void 0===r?void 0:r.codecs)&&void 0!==t?t:[]).some((t=>t.mimeType.toLowerCase()===`${Ri.VIDEO}/${e}`))}));return!t.length&&t.push(Ds.VP8),t}_selectPreferredCodec(e){const t=e||this.conference.jvbJingleSession;if(!t)return;const n=t.peerconnection.getConfiguredVideoCodecs(),i=t===this.conference.jvbJingleSession;let r=i?this.codecPreferenceOrder.jvb:this.codecPreferenceOrder.p2p;this.conference.isE2EEEnabled()&&i&&(r=[Ds.VP8]);const o=this.conference.getParticipants().map((e=>e.getId())),s=null==o?void 0:o.map((e=>{const n=t._signalingLayer.getPeerMediaInfo(e,Ri.VIDEO);return null!=n&&n.codecList?n.codecList:null!=n&&n.codecType?[n.codecType]:[]}));this.visitorCodecs.length&&s.push(this.visitorCodecs);const a=r.reduce(((e,n)=>{let i=!1;if(!t.isP2P)for(const e of s)e.length&&(i=i||!e.find((e=>e===n)));return i||e.push(n),e}),[]);a.length?a.every(((e,t)=>e===n[t]))||t.setVideoCodecs(a):Oa.warn("Invalid codec list generated because of a user joining/leaving the call")}_updateVisitorCodecs(e){this.visitorCodecs!==e&&(this.visitorCodecs=e,this._selectPreferredCodec())}getCodecPreferenceList(e){return this.codecPreferenceOrder[e]}}const Fa=(0,E.getLogger)("modules/RTC/BridgeChannel.js");class ja{constructor(e,t,n,i){if(!e&&!t)throw new TypeError("At least peerconnection or wsUrl must be given");if(e&&t)throw new TypeError("Just one of peerconnection or wsUrl must be given");if(e?Fa.debug("constructor() with peerconnection"):Fa.debug(`constructor() with wsUrl:"${t}"`),this._channel=null,this._conference=i,this._connected=void 0,this._eventEmitter=n,this._mode=null,this._areRetriesEnabled=!1,this._closedFromClient=!1,e){const t=e.createDataChannel("JVB data channel",{protocol:"http://jitsi.org/protocols/colibri"});this._handleChannel(t),this._mode="datachannel"}else t&&(this._areRetriesEnabled=!0,this._wsUrl=t,this._initWebSocket())}_initWebSocket(){const e=new WebSocket(this._wsUrl);this._handleChannel(e),this._mode="websocket"}_startConnectionRetries(){let e=1;const t=()=>{!this._channel||"connecting"!==this._channel.readyState&&this._channel.readyState!==WebSocket.CONNECTING?this.isOpen()||(this._initWebSocket(this._wsUrl),e=Math.min(2*e,60),this._retryTimeout=setTimeout(t,1e3*e)):this._retryTimeout=setTimeout(t,1e3*e)};this._retryTimeout=setTimeout(t,1e3*e)}_stopConnectionRetries(){this._retryTimeout&&(clearTimeout(this._retryTimeout),this._retryTimeout=void 0)}_retryWebSocketConnection(e){if(!this._areRetriesEnabled)return;const{code:t,reason:n}=e;Mi.sendAnalytics(((e,t)=>({type:kt.TYPE_OPERATIONAL,action:"bridge-channel.error",attributes:{code:e,reason:t}}))(t,n)),this._areRetriesEnabled=!1,this._eventEmitter.once(ji.default.DATA_CHANNEL_OPEN,(()=>{this._stopConnectionRetries(),this._areRetriesEnabled=!0})),this._startConnectionRetries()}get mode(){return this._mode}close(){if(this._closedFromClient=!0,this._stopConnectionRetries(),this._areRetriesEnabled=!1,this._channel){try{this._channel.close()}catch(e){}this._channel=null}}isOpen(){return this._channel&&("open"===this._channel.readyState||this._channel.readyState===WebSocket.OPEN)}sendEndpointStatsMessage(e){this._send({colibriClass:"EndpointStats",...e})}sendMessage(e,t){this._send({colibriClass:"EndpointMessage",msgPayload:t,to:e})}sendSetLastNMessage(e){Fa.log(`Sending lastN=${e}.`),this._send({colibriClass:"LastNChangedEvent",lastN:e})}sendReceiverVideoConstraintsMessage(e){Fa.log(`Sending ReceiverVideoConstraints with ${JSON.stringify(e)}`),this._send({colibriClass:"ReceiverVideoConstraints",...e})}sendSourceVideoTypeMessage(e,t){Fa.info(`Sending SourceVideoTypeMessage with video type ${e}: ${t}`),this._send({colibriClass:"SourceVideoTypeMessage",sourceName:e,videoType:t})}_handleChannel(e){const t=this._eventEmitter;e.onopen=()=>{Fa.info(`${this._mode} channel opened`),this._connected=!0,t.emit(ji.default.DATA_CHANNEL_OPEN)},e.onerror=e=>{"websocket"!==this._mode&&Fa.error(`Channel error: ${e.message}`)},e.onmessage=e=>{let n,{data:i}=e;try{n=_r(i)}catch(e){return void Fa.error("Failed to parse channel message as JSON: ",i,e)}const r=n.colibriClass;switch(r){case"DominantSpeakerEndpointChangeEvent":{const{dominantSpeakerEndpoint:e,previousSpeakers:i=[],silence:r}=n;Fa.debug(`Dominant speaker: ${e}, previous speakers: ${i}`),t.emit(ji.default.DOMINANT_SPEAKER_CHANGED,e,i,r);break}case"EndpointConnectivityStatusChangeEvent":{const e=n.endpoint,i="true"===n.active;Fa.info(`Endpoint connection status changed: ${e} active=${i}`),t.emit(ji.default.ENDPOINT_CONN_STATUS_CHANGED,e,i);break}case"EndpointMessage":t.emit(ji.default.ENDPOINT_MESSAGE_RECEIVED,n.from,n.msgPayload);break;case"EndpointStats":t.emit(ji.default.ENDPOINT_STATS_RECEIVED,n.from,n);break;case"ForwardedSources":{const e=n.forwardedSources;Fa.info(`New forwarded sources: ${e}`),t.emit(ji.default.FORWARDED_SOURCES_CHANGED,e);break}case"SenderSourceConstraints":"string"==typeof n.sourceName&&"number"==typeof n.maxHeight?(Fa.info(`SenderSourceConstraints: ${n.sourceName} - ${n.maxHeight}`),t.emit(ji.default.SENDER_VIDEO_CONSTRAINTS_CHANGED,n)):Fa.error(`Invalid SenderSourceConstraints: ${n.sourceName} - ${n.maxHeight}`);break;case"ServerHello":Fa.info(`Received ServerHello, version=${n.version}.`);break;case"VideoSourcesMap":Fa.info(`Received VideoSourcesMap: ${JSON.stringify(n.mappedSources)}`),t.emit(ji.default.VIDEO_SSRCS_REMAPPED,n);break;case"AudioSourcesMap":Fa.info(`Received AudioSourcesMap: ${JSON.stringify(n.mappedSources)}`),t.emit(ji.default.AUDIO_SSRCS_REMAPPED,n);break;default:Fa.debug("Channel JSON-formatted message: ",n),t.emit(`rtc.datachannel.${r}`,n)}},e.onclose=n=>{if(Fa.debug("Channel closed by "+(this._closedFromClient?"client":"server")),e===this._channel){if(!(this._closedFromClient||1001===n.code&&1===this._conference.getParticipantCount())){const{code:e,reason:i}=n;Fa.error(`Channel closed: ${e} ${i}`),"websocket"===this._mode&&(this._retryWebSocketConnection(n),!1!==this._connected&&t.emit(ji.default.DATA_CHANNEL_CLOSED,{code:e,reason:i}))}this._connected=!1,this._channel=null}else Fa.debug("Skip close handler, channel instance is not equal to stored one")},this._channel=e}_send(e){const t=this._channel;if(!this.isOpen())throw Fa.error("Bridge Channel send: no opened channel."),new Error("No opened channel");t.send(JSON.stringify(e))}}let Va;!function(e){e.ENVIRONMENT="environment",e.USER="user"}(Va||(Va={}));let Ua=!0,Ha=!0;function $a(e,t,n){const i=e.match(t);return i&&i.length>=n&&parseInt(i[n],10)}function Ja(e,t,n){if(!e.RTCPeerConnection)return;const i=e.RTCPeerConnection.prototype,r=i.addEventListener;i.addEventListener=function(e,i){if(e!==t)return r.apply(this,arguments);const o=e=>{const t=n(e);t&&(i.handleEvent?i.handleEvent(t):i(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(i,o),r.apply(this,[e,o])};const o=i.removeEventListener;i.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[t])return o.apply(this,arguments);if(!this._eventMap[t].has(n))return o.apply(this,arguments);const i=this._eventMap[t].get(n);return this._eventMap[t].delete(n),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,o.apply(this,[e,i])},Object.defineProperty(i,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function Ba(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Ua=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function qa(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Ha=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function Ga(){if("object"==typeof window){if(Ua)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function za(e,t){Ha&&console.warn(e+" is deprecated, please use "+t+" instead.")}function Ka(e){return"[object Object]"===Object.prototype.toString.call(e)}function Wa(e){return Ka(e)?Object.keys(e).reduce((function(t,n){const i=Ka(e[n]),r=i?Wa(e[n]):e[n],o=i&&!Object.keys(r).length;return void 0===r||o?t:Object.assign(t,{[n]:r})}),{}):e}function Xa(e,t,n){t&&!n.has(t.id)&&(n.set(t.id,t),Object.keys(t).forEach((i=>{i.endsWith("Id")?Xa(e,e.get(t[i]),n):i.endsWith("Ids")&&t[i].forEach((t=>{Xa(e,e.get(t),n)}))})))}function Ya(e,t,n){const i=n?"outbound-rtp":"inbound-rtp",r=new Map;if(null===t)return r;const o=[];return e.forEach((e=>{"track"===e.type&&e.trackIdentifier===t.id&&o.push(e)})),o.forEach((t=>{e.forEach((n=>{n.type===i&&n.trackId===t.id&&Xa(e,n,r)}))})),r}const Qa=Ga;function Za(e,t){const n=e&&e.navigator;if(!n.mediaDevices)return;const i=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach((n=>{if("require"===n||"advanced"===n||"mediaSource"===n)return;const i="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==i.exact&&"number"==typeof i.exact&&(i.min=i.max=i.exact);const r=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==i.ideal){t.optional=t.optional||[];let e={};"number"==typeof i.ideal?(e[r("min",n)]=i.ideal,t.optional.push(e),e={},e[r("max",n)]=i.ideal,t.optional.push(e)):(e[r("",n)]=i.ideal,t.optional.push(e))}void 0!==i.exact&&"number"!=typeof i.exact?(t.mandatory=t.mandatory||{},t.mandatory[r("",n)]=i.exact):["min","max"].forEach((e=>{void 0!==i[e]&&(t.mandatory=t.mandatory||{},t.mandatory[r(e,n)]=i[e])}))})),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},r=function(e,r){if(t.version>=61)return r(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=i(e.audio)}if(e&&"object"==typeof e.video){let o=e.video.facingMode;o=o&&("object"==typeof o?o:{ideal:o});const s=t.version<66;if(o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!n.mediaDevices.getSupportedConstraints||!n.mediaDevices.getSupportedConstraints().facingMode||s)){let t;if(delete e.video.facingMode,"environment"===o.exact||"environment"===o.ideal?t=["back","rear"]:"user"!==o.exact&&"user"!==o.ideal||(t=["front"]),t)return n.mediaDevices.enumerateDevices().then((n=>{let s=(n=n.filter((e=>"videoinput"===e.kind))).find((e=>t.some((t=>e.label.toLowerCase().includes(t)))));return!s&&n.length&&t.includes("back")&&(s=n[n.length-1]),s&&(e.video.deviceId=o.exact?{exact:s.deviceId}:{ideal:s.deviceId}),e.video=i(e.video),Qa("chrome: "+JSON.stringify(e)),r(e)}))}e.video=i(e.video)}return Qa("chrome: "+JSON.stringify(e)),r(e)},o=function(e){return t.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(n.getUserMedia=function(e,t,i){r(e,(e=>{n.webkitGetUserMedia(e,t,(e=>{i&&i(o(e))}))}))}.bind(n),n.mediaDevices.getUserMedia){const e=n.mediaDevices.getUserMedia.bind(n.mediaDevices);n.mediaDevices.getUserMedia=function(t){return r(t,(t=>e(t).then((e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach((e=>{e.stop()})),new DOMException("","NotFoundError");return e}),(e=>Promise.reject(o(e))))))}}}function ed(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&("function"==typeof t?e.navigator.mediaDevices.getDisplayMedia=function(n){return t(n).then((t=>{const i=n.video&&n.video.width,r=n.video&&n.video.height,o=n.video&&n.video.frameRate;return n.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:o||3}},i&&(n.video.mandatory.maxWidth=i),r&&(n.video.mandatory.maxHeight=r),e.navigator.mediaDevices.getUserMedia(n)}))}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}function td(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function nd(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",(n=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===n.track.id)):{track:n.track};const r=new Event("track");r.track=n.track,r.receiver=i,r.transceiver={receiver:i},r.streams=[t.stream],this.dispatchEvent(r)})),t.stream.getTracks().forEach((n=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===n.id)):{track:n};const r=new Event("track");r.track=n,r.receiver=i,r.transceiver={receiver:i},r.streams=[t.stream],this.dispatchEvent(r)}))},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else Ja(e,"track",(e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e)))}function id(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,i){let r=n.apply(this,arguments);return r||(r=t(this,e),this._senders.push(r)),r};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){i.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach((e=>{this._senders.push(t(this,e))}))};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],i.apply(this,[e]),e.getTracks().forEach((e=>{const t=this._senders.find((t=>t.track===e));t&&this._senders.splice(this._senders.indexOf(t),1)}))}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function rd(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,n,i]=arguments;if(arguments.length>0&&"function"==typeof e)return t.apply(this,arguments);if(0===t.length&&(0===arguments.length||"function"!=typeof e))return t.apply(this,[]);const r=function(e){const t={};return e.result().forEach((e=>{const n={id:e.id,timestamp:e.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[e.type]||e.type};e.names().forEach((t=>{n[t]=e.stat(t)})),t[n.id]=n})),t},o=function(e){return new Map(Object.keys(e).map((t=>[t,e[t]])))};if(arguments.length>=2){const i=function(e){n(o(r(e)))};return t.apply(this,[i,e])}return new Promise(((e,n)=>{t.apply(this,[function(t){e(o(r(t)))},n])})).then(n,i)}}function od(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>Ya(t,e.track,!0)))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),Ja(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>Ya(t,e.track,!1)))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,n,i;return this.getSenders().forEach((n=>{n.track===e&&(t?i=!0:t=n)})),this.getReceivers().forEach((t=>(t.track===e&&(n?i=!0:n=t),t.track===e))),i||t&&n?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():n?n.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function sd(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((e=>this._shimmedLocalStreams[e][0]))};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const i=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?-1===this._shimmedLocalStreams[n.id].indexOf(i)&&this._shimmedLocalStreams[n.id].push(i):this._shimmedLocalStreams[n.id]=[n,i],i};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")}));const t=this.getSenders();n.apply(this,arguments);const i=this.getSenders().filter((e=>-1===t.indexOf(e)));this._shimmedLocalStreams[e.id]=[e].concat(i)};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],i.apply(this,arguments)};const r=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach((t=>{const n=this._shimmedLocalStreams[t].indexOf(e);-1!==n&&this._shimmedLocalStreams[t].splice(n,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]})),r.apply(this,arguments)}}function ad(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return sd(e);const n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map((e=>this._reverseStreams[e.id]))};const i=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")})),!this._reverseStreams[t.id]){const n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}i.apply(this,[t])};const r=e.RTCPeerConnection.prototype.removeStream;function o(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const i=e._reverseStreams[t],r=e._streams[i.id];n=n.replace(new RegExp(r.id,"g"),i.id)})),new RTCSessionDescription({type:t.type,sdp:n})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},r.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection\'s signalingState is \'closed\'.","InvalidStateError");const i=[].slice.call(arguments,1);if(1!==i.length||!i[0].getTracks().find((e=>e===t)))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find((e=>e.track===t)))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const r=this._streams[n.id];if(r)r.addTrack(t),Promise.resolve().then((()=>{this.dispatchEvent(new Event("negotiationneeded"))}));else{const i=new e.MediaStream([t]);this._streams[n.id]=i,this._reverseStreams[i.id]=n,this.addStream(i)}return this.getSenders().find((e=>e.track===t))},["createOffer","createAnswer"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?n.apply(this,[t=>{const n=o(this,t);e[0].apply(null,[n])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):n.apply(this,arguments).then((e=>o(this,e)))}};e.RTCPeerConnection.prototype[t]=i[t]}));const s=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const i=e._reverseStreams[t],r=e._streams[i.id];n=n.replace(new RegExp(i.id,"g"),r.id)})),new RTCSessionDescription({type:t.type,sdp:n})}(this,arguments[0]),s.apply(this,arguments)):s.apply(this,arguments)};const a=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=a.get.apply(this);return""===e.type?e:o(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection\'s signalingState is \'closed\'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(e._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach((n=>{this._streams[n].getTracks().find((t=>e.track===t))&&(t=this._streams[n])})),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function dd(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]}))}function cd(e,t){Ja(e,"negotiationneeded",(e=>{const n=e.target;if(!(t.version<72||n.getConfiguration&&"plan-b"===n.getConfiguration().sdpSemantics)||"stable"===n.signalingState)return e}))}function ld(e,t){const n=e&&e.navigator,i=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,i){za("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),n.mediaDevices.getUserMedia(e).then(t,i)},!(t.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){const e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(n){return"object"==typeof n&&"object"==typeof n.audio&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,"autoGainControl","mozAutoGainControl"),e(n.audio,"noiseSuppression","mozNoiseSuppression")),t(n)},i&&i.prototype.getSettings){const t=i.prototype.getSettings;i.prototype.getSettings=function(){const n=t.apply(this,arguments);return e(n,"mozAutoGainControl","autoGainControl"),e(n,"mozNoiseSuppression","noiseSuppression"),n}}if(i&&i.prototype.applyConstraints){const t=i.prototype.applyConstraints;i.prototype.applyConstraints=function(n){return"audio"===this.kind&&"object"==typeof n&&(n=JSON.parse(JSON.stringify(n)),e(n,"autoGainControl","mozAutoGainControl"),e(n,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[n])}}}}function hd(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!n||!n.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===n.video?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)})}function ud(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function pd(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]}));const n={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},i=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,r,o]=arguments;return i.apply(this,[e||null]).then((e=>{if(t.version<53&&!r)try{e.forEach((e=>{e.type=n[e.type]||e.type}))}catch(t){if("TypeError"!==t.name)throw t;e.forEach(((t,i)=>{e.set(i,Object.assign({},t,{type:n[t.type]||t.type}))}))}return e})).then(r,o)}}function md(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function gd(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),Ja(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function fd(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){za("removeStream","removeTrack"),this.getSenders().forEach((t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)}))})}function vd(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function _d(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const e=arguments[1],n=e&&"sendEncodings"in e;n&&e.sendEncodings.forEach((e=>{if("rid"in e&&!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")}));const i=t.apply(this,arguments);if(n){const{sender:t}=i,n=t.getParameters();(!("encodings"in n)||1===n.encodings.length&&0===Object.keys(n.encodings[0]).length)&&(n.encodings=e.sendEncodings,t.sendEncodings=e.sendEncodings,this.setParametersPromises.push(t.setParameters(n).then((()=>{delete t.sendEncodings})).catch((()=>{delete t.sendEncodings}))))}return i})}function yd(e){if("object"!=typeof e||!e.RTCRtpSender)return;const t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){const e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function Ed(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}function Sd(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}function bd(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach((n=>t.call(this,n,e))),e.getVideoTracks().forEach((n=>t.call(this,n,e)))},e.RTCPeerConnection.prototype.addTrack=function(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]})),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const n=e.getTracks();this.getSenders().forEach((e=>{n.includes(e.track)&&this.removeTrack(e)}))})}}function Td(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach((e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)}))})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach((t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const n=new Event("addstream");n.stream=t,e.dispatchEvent(n)}))}),t.apply(e,arguments)}}}function Cd(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,n=t.createOffer,i=t.createAnswer,r=t.setLocalDescription,o=t.setRemoteDescription,s=t.addIceCandidate;t.createOffer=function(e,t){const i=arguments.length>=2?arguments[2]:arguments[0],r=n.apply(this,[i]);return t?(r.then(e,t),Promise.resolve()):r},t.createAnswer=function(e,t){const n=arguments.length>=2?arguments[2]:arguments[0],r=i.apply(this,[n]);return t?(r.then(e,t),Promise.resolve()):r};let a=function(e,t,n){const i=r.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i};t.setLocalDescription=a,a=function(e,t,n){const i=o.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i},t.setRemoteDescription=a,a=function(e,t,n){const i=s.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i},t.addIceCandidate=a}function xd(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,n=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>n(Rd(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,n,i){t.mediaDevices.getUserMedia(e).then(n,i)}.bind(t))}function Rd(e){return e&&void 0!==e.video?Object.assign({},e,{video:Wa(e.video)}):e}function Ad(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,n){if(e&&e.iceServers){const t=[];for(let n=0;nt.generateCertificate})}function wd(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Id(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find((e=>"audio"===e.receiver.track.kind));!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio",{direction:"recvonly"}),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const n=this.getTransceivers().find((e=>"video"===e.receiver.track.kind));!1===e.offerToReceiveVideo&&n?"sendrecv"===n.direction?n.setDirection?n.setDirection("sendonly"):n.direction="sendonly":"recvonly"===n.direction&&(n.setDirection?n.setDirection("inactive"):n.direction="inactive"):!0!==e.offerToReceiveVideo||n||this.addTransceiver("video",{direction:"recvonly"})}return t.apply(this,arguments)}}function Pd(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}function Dd(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;const t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substr(2)),e.candidate&&e.candidate.length){const n=new t(e),i=Wn().parseCandidate(e.candidate),r=Object.assign(n,i);return r.toJSON=function(){return{candidate:r.candidate,sdpMid:r.sdpMid,sdpMLineIndex:r.sdpMLineIndex,usernameFragment:r.usernameFragment}},r}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,Ja(e,"icecandidate",(t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t)))}function Od(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){const{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(function(e){if(!e||!e.sdp)return!1;const t=Wn().splitSections(e.sdp);return t.shift(),t.some((e=>{const t=Wn().parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")}))}(arguments[0])){const e=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);if(null===t||t.length<2)return-1;const n=parseInt(t[1],10);return n!=n?-1:n}(arguments[0]),n=function(e){let n=65536;return"firefox"===t.browser&&(n=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),n}(e),i=function(e,n){let i=65536;"firefox"===t.browser&&57===t.version&&(i=65535);const r=Wn().matchPrefix(e.sdp,"a=max-message-size:");return r.length>0?i=parseInt(r[0].substr(19),10):"firefox"===t.browser&&-1!==n&&(i=2147483637),i}(arguments[0],e);let r;r=0===n&&0===i?Number.POSITIVE_INFINITY:0===n||0===i?Math.max(n,i):Math.min(n,i);const o={};Object.defineProperty(o,"maxMessageSize",{get:()=>r}),this._sctp=o}return n.apply(this,arguments)}}function kd(e){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const n=e.send;e.send=function(){const i=arguments[0],r=i.length||i.size||i.byteLength;if("open"===e.readyState&&t.sctp&&r>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return n.apply(e,arguments)}}const n=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=n.apply(this,arguments);return t(e,this),e},Ja(e,"datachannel",(e=>(t(e.channel,e.target),e)))}function Nd(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((e=>{const n=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const n=new Event("connectionstatechange",e);t.dispatchEvent(n)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),n.apply(this,arguments)}}))}function Md(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t.version>=605)return;const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\\na=extmap-allow-mixed")){const n=t.sdp.split("\\n").filter((e=>"a=extmap-allow-mixed"!==e.trim())).join("\\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:n}):t.sdp=n}return n.apply(this,arguments)}}function Ld(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.addIceCandidate;n&&0!==n.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&t.version<78||"firefox"===t.browser&&t.version<68||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Fd(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.setLocalDescription;n&&0!==n.length&&(e.RTCPeerConnection.prototype.setLocalDescription=function(){let e=arguments[0]||{};if("object"!=typeof e||e.type&&e.sdp)return n.apply(this,arguments);if(e={type:e.type,sdp:e.sdp},!e.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":e.type="offer";break;default:e.type="answer"}return e.sdp||"offer"!==e.type&&"answer"!==e.type?n.apply(this,[e]):("offer"===e.type?this.createOffer:this.createAnswer).apply(this).then((e=>n.apply(this,[e])))})}!function(){let{window:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0};const n=Ga,i=function(e){const t={browser:null,version:null};if(void 0===e||!e.navigator)return t.browser="Not a browser.",t;const{navigator:n}=e;if(n.mozGetUserMedia)t.browser="firefox",t.version=$a(n.userAgent,/Firefox\\/(\\d+)\\./,1);else if(n.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection&&!e.RTCIceGatherer)t.browser="chrome",t.version=$a(n.userAgent,/Chrom(e|ium)\\/(\\d+)\\./,2);else{if(!e.RTCPeerConnection||!n.userAgent.match(/AppleWebKit\\/(\\d+)\\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=$a(n.userAgent,/AppleWebKit\\/(\\d+)\\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype}return t}(e),r={browserDetails:i,commonShim:m,extractVersion:$a,disableLog:Ba,disableWarnings:qa,sdp:Kn};switch(i.browser){case"chrome":if(!h||!dd||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),r;if(null===i.version)return n("Chrome shim can not determine version, not shimming."),r;n("adapter.js shimming chrome."),r.browserShim=h,Ld(e,i),Fd(e),Za(e,i),td(e),dd(e,i),nd(e),ad(e,i),id(e),rd(e),od(e),cd(e,i),Dd(e),Nd(e),Od(e,i),kd(e),Md(e,i);break;case"firefox":if(!u||!pd||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),r;n("adapter.js shimming firefox."),r.browserShim=u,Ld(e,i),Fd(e),ld(e,i),pd(e,i),ud(e),fd(e),md(e),gd(e),vd(e),_d(e),yd(e),Ed(e),Sd(e),Dd(e),Nd(e),Od(e,i),kd(e);break;case"safari":if(!p||!t.shimSafari)return n("Safari shim is not included in this adapter release."),r;n("adapter.js shimming safari."),r.browserShim=p,Ld(e,i),Fd(e),Ad(e),Id(e),Cd(e),bd(e),Td(e),wd(e),xd(e),Pd(e),Dd(e),Od(e,i),kd(e),Md(e,i);break;default:n("Unsupported browser!")}}({window:"undefined"==typeof window?void 0:window});var jd=n(125),Vd=n.n(jd);const Ud=(0,E.getLogger)("modules/RTC/RTCUtils.js"),Hd={video:{height:{ideal:720,max:720,min:180},width:{ideal:1280,max:1280,min:320}}};let $d="default",Jd=!1,Bd=!1,qd=!1,Gd=!1,zd=!1,Kd=null;const Wd=document.createElement("audio"),Xd=void 0!==Wd.setSinkId;let Yd,Qd=[];function Zd(){}function ec(e){const t=e.filter((e=>"audioinput"===e.kind)).length,n=e.filter((e=>"audiooutput"===e.kind)).length,i=e.filter((e=>"videoinput"===e.kind)).length,r=e.filter((e=>"videooutput"===e.kind)).length;e.forEach((e=>{const o={audio_input_device_count:t,audio_output_device_count:n,video_input_device_count:i,video_output_device_count:r,device_id:e.deviceId,device_group_id:e.groupId,device_kind:e.kind,device_label:e.label};Mi.sendAnalytics(Wt,o)}))}const tc=new class extends xr{init(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var n;"boolean"==typeof t.disableAEC&&(qd=t.disableAEC,Ud.info(`Disable AEC: ${qd}`)),"boolean"==typeof t.disableNS&&(Gd=t.disableNS,Ud.info(`Disable NS: ${Gd}`)),"boolean"==typeof t.disableAP&&(Bd=t.disableAP,Ud.info(`Disable AP: ${Bd}`)),"boolean"==typeof t.disableAGC&&(zd=t.disableAGC,Ud.info(`Disable AGC: ${zd}`)),"boolean"==typeof(null===(e=t.audioQuality)||void 0===e?void 0:e.stereo)&&(Kd=t.audioQuality.stereo,Ud.info(`Stereo: ${Kd}`)),window.clearInterval(Yd),Yd=void 0,ci.isReactNative()||(this.attachMediaStream=(n=(e,t)=>{e&&(e.srcObject=t)},function(e,t){return n.apply(tc,arguments),t&&tc.isDeviceChangeAvailable("output")&&t.getAudioTracks&&t.getAudioTracks().length&&Jd?e.setSinkId(tc.getAudioOutputDevice()).catch((t=>{const n=new dr(t,null,["audiooutput"]);throw Ud.warn("Failed to set audio output device for the element. Default audio output device will be used instead",null==e?void 0:e.id,n),n})):Promise.resolve()})),this.pcConstraints={},Is.init(t),this.isDeviceListAvailable()&&this.enumerateDevices((e=>{Qd=e.slice(0),Ud.debug("Available devices: ",Qd),ec(Qd),this.eventEmitter.emit(ji.default.DEVICE_LIST_AVAILABLE,Qd),ci.supportsDeviceChangeEvent()?navigator.mediaDevices.addEventListener("devicechange",(()=>this.enumerateDevices(Zd))):Yd=window.setInterval((()=>this.enumerateDevices(Zd)),3e3)}))}enumerateDevices(e){navigator.mediaDevices.enumerateDevices().then((t=>{this._updateKnownDevices(t),e(t)})).catch((t=>{Ud.warn(`Failed to enumerate devices. ${t}`),this._updateKnownDevices([]),e([])}))}_getUserMedia(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return new Promise(((i,r)=>{let o,s=!1;"number"==typeof n&&!isNaN(n)&&n>0&&(o=setTimeout((()=>{s=!0,o=void 0,r(new dr(er))}),n)),navigator.mediaDevices.getUserMedia(t).then((t=>{Ud.log("onUserMediaSuccess"),this._updateGrantedPermissions(e,t),s||(void 0!==o&&clearTimeout(o),i(t))})).catch((n=>{Ud.warn(`Failed to get access to local media. ${n} ${JSON.stringify(t)}`);const i=new dr(n,t,e);s||(void 0!==o&&clearTimeout(o),r(i)),i.name===Yi&&this._updateGrantedPermissions(e,void 0)}))}))}_getDesktopMedia(e){return Is.isSupported()?new Promise(((t,n)=>{Is.obtainStream((e=>{t(e)}),(e=>{n(e)}),e)})):Promise.reject(new Error("Desktop sharing is not supported!"))}_getMissingTracks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0;const n=[],i=e.includes("audio"),r=t&&t.getAudioTracks().length>0;i&&!r&&n.push("audio");const o=e.includes("video"),s=t&&t.getVideoTracks().length>0;return o&&!s&&n.push("video"),n}_onMediaDevicesListChanged(e){Qd=e.slice(0),Ud.info("list of media devices has changed:",Qd),ec(Qd),this.eventEmitter.emit(ji.default.DEVICE_LIST_WILL_CHANGE,Qd),this.eventEmitter.emit(ji.default.DEVICE_LIST_CHANGED,Qd)}_updateKnownDevices(e){(function(e){return e.length!==Qd.length||e.map(t).sort().join("")!==Qd.map(t).sort().join("");function t(e){return JSON.stringify({kind:e.kind,deviceId:e.deviceId,groupId:e.groupId,label:e.label,facing:e.facing})}})(e)&&this._onMediaDevicesListChanged(e)}_updateGrantedPermissions(e,t){const n=Boolean(t)&&t.getAudioTracks().length>0,i=Boolean(t)&&t.getVideoTracks().length>0,r={};-1!==e.indexOf("video")&&(r.video=i),-1!==e.indexOf("audio")&&(r.audio=n),this.eventEmitter.emit(ji.default.PERMISSIONS_CHANGED,r)}obtainAudioAndVideoPermissions(e){const{timeout:t,...n}=e,i=[];let r={};const o=function(){if(-1===(n.devices||[]).indexOf("desktop"))return Promise.resolve();const{desktopSharingSourceDevice:e,desktopSharingSources:i}=n;if(e){const n=Qd&&Qd.find((t=>"videoinput"===t.kind&&(t.deviceId===e||t.label===e)));if(!n)return Promise.reject(new dr({name:"ConstraintNotSatisfiedError"},{},[e]));const i=["video"],r={video:{deviceId:n.deviceId}};return this._getUserMedia(i,r,t).then((e=>({sourceType:"device",stream:e})))}return this._getDesktopMedia({desktopSharingSources:i})}.bind(this),s=function(){const e=(n.devices||["audio","video"]).filter((e=>"audio"===e||"video"===e));return e.length?(r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Ss()(t.constraints||Hd);if(e.indexOf("video")>=0){if(Vd()[t.resolution]){const e=Vd()[t.resolution];n.video.height={ideal:e.height},n.video.width={ideal:e.width}}if(n.video||(n.video={}),ci.isWebKitBased()&&(n.video.height&&n.video.height.ideal?n.video.height={ideal:n.video.height.ideal}:Ud.warn("Ideal camera height missing, camera may not start properly"),n.video.width&&n.video.width.ideal?n.video.width={ideal:n.video.width.ideal}:Ud.warn("Ideal camera width missing, camera may not start properly")),t.cameraDeviceId)n.video.deviceId={exact:t.cameraDeviceId};else{const e=t.facingMode||Va.USER;n.video.facingMode=e}}else n.video=!1;return e.indexOf("audio")>=0?(n.audio&&"boolean"!=typeof n.audio||(n.audio={}),n.audio={autoGainControl:!zd&&!Bd,echoCancellation:!qd&&!Bd,noiseSuppression:!Gd&&!Bd},t.micDeviceId&&(n.audio.deviceId={exact:t.micDeviceId}),Kd&&Object.assign(n.audio,{channelCount:2})):n.audio=!1,n}(e,n),Ud.info("Got media constraints: ",JSON.stringify(r)),this._getUserMedia(e,r,t)):Promise.resolve()}.bind(this);return o().then((function(e){if(!e)return;const{stream:t,sourceId:n,sourceType:r}=e,o=t.getAudioTracks();if(o.length){const e=new MediaStream(o);i.push({stream:e,sourceId:n,sourceType:r,track:e.getAudioTracks()[0]})}const s=t.getVideoTracks();if(s.length){const e=new MediaStream(s);i.push({stream:e,sourceId:n,sourceType:r,track:e.getVideoTracks()[0],videoType:Qo.VideoType.DESKTOP})}})).then(s).then((function(e){if(!e)return;const t=e.getAudioTracks();if(t.length){const e=new MediaStream(t);i.push({constraints:r.audio,stream:e,track:e.getAudioTracks()[0],effects:n.effects})}const o=e.getVideoTracks();if(o.length){const e=new MediaStream(o);i.push({constraints:r.video,stream:e,track:e.getVideoTracks()[0],videoType:Qo.VideoType.CAMERA,effects:n.effects})}})).then((()=>i)).catch((e=>(i.forEach((e=>{let{stream:t}=e;this.stopMediaStream(t)})),Promise.reject(e))))}isDeviceListAvailable(){return Boolean(navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices)}isDeviceChangeAvailable(e){return"output"!==e&&"audiooutput"!==e||Xd}stopMediaStream(e){e&&(e.getTracks().forEach((e=>{e.stop&&e.stop()})),e.stop&&e.stop(),e.release&&e.release())}isDesktopSharingEnabled(){return Is.isSupported()}setAudioOutputDevice(e){return this.isDeviceChangeAvailable("output")?Wd.setSinkId(e).then((()=>{$d=e,Jd=!0,Ud.log(`Audio output device set to ${e}`),this.eventEmitter.emit(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,e)})):Promise.reject(new Error("Audio output device change is not supported"))}setDesktopSharingFrameRate(e){Is.setDesktopSharingFrameRate(e)}getAudioOutputDevice(){return $d}getCurrentlyAvailableMediaDevices(){return Qd}arePermissionsGrantedForAvailableDevices(){return Qd.some((e=>Boolean(e.label)))}getEventDataForActiveDevice(e){const t=[],n={deviceId:e.deviceId,kind:e.kind,label:e.label,groupId:e.groupId};return t.push(n),{deviceList:t}}isUserStreamById(e){return e&&"mixedmslabel"!==e&&"default"!==e}},nc=tc,ic=(0,E.getLogger)("modules/RTC/JitsiTrack.js"),rc={track_mute:"onmute",track_unmute:"onunmute",track_ended:"onended"};class oc extends ii{constructor(e,t,n,i,r,o){super(),this.containers=[],this.conference=e,this.audioLevel=-1,this.type=r,this.track=n,this.videoType=o,this.handlers=new Map,this.disposed=!1,this._streamInactiveHandler=i,this._setStream(t)}_addMediaStreamInactiveHandler(e){ci.isFirefox()||ci.isWebKitBased()?this.track.onended=e:this.stream.oninactive=e}_attachTTFMTracker(e){}_onTrackAttach(e){}_onTrackDetach(e){}_setHandler(e,t){if(rc.hasOwnProperty(e)){if(t?this.handlers.set(e,t):this.handlers.delete(e),this.stream)for(const n of this.stream.getTracks())n[rc[e]]=t}else ic.error(`Invalid handler type ${e}`)}_setStream(e){if(this.stream!==e&&(this.stream=e,this.stream)){for(const e of this.handlers.keys())this._setHandler(e,this.handlers.get(e));this._streamInactiveHandler&&this._addMediaStreamInactiveHandler(this._streamInactiveHandler)}}_unregisterHandlers(){if(this.stream){for(const e of this.handlers.keys())for(const t of this.stream.getVideoTracks())t[rc[e]]=void 0;this._streamInactiveHandler&&this._addMediaStreamInactiveHandler(void 0)}else ic.warn(`${this}: unable to unregister handlers - no stream object`)}attach(e){let t=Promise.resolve();return this.stream&&(this._onTrackAttach(e),t=nc.attachMediaStream(e,this.stream)),this.containers.push(e),this._attachTTFMTracker(e),t}detach(e){for(let t=this.containers,n=t.length-1;n>=0;--n){const i=t[n];e||(this._onTrackDetach(i),nc.attachMediaStream(i,null).catch((()=>{ic.error(`Detach for ${this} failed!`)}))),e&&i!==e||t.splice(n,1)}e&&(this._onTrackDetach(e),nc.attachMediaStream(e,null).catch((()=>{ic.error(`Detach for ${this} failed!`)})))}dispose(){return this.removeAllListeners(),this.disposed=!0,Promise.resolve()}getId(){return this.getStreamId()}getOriginalStream(){return this.stream}getSourceName(){}getStreamId(){return this.stream?this.stream.id:null}getTrack(){return this.track}getTrackLabel(){return this.track.label}getTrackId(){return this.track?this.track.id:null}getType(){return this.type}getUsageLabel(){return this.isAudioTrack()?"mic":this.videoType?this.videoType:"default"}getVideoType(){return this.videoType}getHeight(){return Math.min(this.track.getSettings().height,this.track.getSettings().width)}getWidth(){return Math.max(this.track.getSettings().height,this.track.getSettings().width)}isActive(){return void 0===this.stream.active||this.stream.active}isAudioTrack(){return this.getType()===Ri.AUDIO}isLocal(){throw new Error("Not implemented by subclass")}isLocalAudioTrack(){return this.isAudioTrack()&&this.isLocal()}isVideoTrack(){return this.getType()===Ri.VIDEO}isWebRTCTrackMuted(){return this.track&&this.track.muted}setAudioLevel(e,t){let n=e;ci.supportsReceiverStats()&&void 0!==t&&this.isMuted()&&(n=0),this.audioLevel!==n?(this.audioLevel=n,this.emit(Ct,n,t)):0===this.audioLevel&&0===n&&this.isLocal()&&!this.isWebRTCTrackMuted()&&this.emit(It,n)}setAudioOutput(e){return nc.isDeviceChangeAvailable("output")?this.isVideoTrack()?Promise.resolve():Promise.all(this.containers.map((t=>t.setSinkId(e).catch((e=>{throw ic.warn("Failed to change audio output device on element. Default or previously set audio output device will be used.",t,e),e}))))).then((()=>{this.emit(xt,e)})):Promise.reject(new Error("Audio output device change is not supported"))}setSourceName(e){}}const sc=(0,E.getLogger)("modules/RTC/JitsiLocalTrack.js");class ac extends oc{constructor(e){let{constraints:t,deviceId:n,facingMode:i,mediaType:r,rtcId:o,sourceId:s,sourceType:a,stream:d,track:c,videoType:l,effects:h=[]}=e;super(null,d,c,(()=>this.emit(Tt,this)),r,l),this._setEffectInProgress=!1;const u=h.find((e=>e.isEnabled(this)));u&&this._startStreamEffect(u);const p=l===Qo.VideoType.DESKTOP?c.getSettings().displaySurface:null;var m;this.metadata={timestamp:Date.now(),...p?{displaySurface:p}:{}},this.rtcId=o,this.sourceId=s,this.sourceType=null!=a?a:p,this._constraints=c.getConstraints(),r===Ri.VIDEO&&(l===Qo.VideoType.CAMERA&&(Object.keys(this._constraints).length||(this._constraints={height:{ideal:this.getHeight()},width:{ideal:this.getWidth()}}),isNaN(this._constraints.height.ideal)&&isNaN(this._constraints.width.ideal)&&(this._constraints.height={ideal:t.height.ideal},this._constraints.width={ideal:t.width.ideal})),this.resolution=this.getHeight(),isNaN(this.resolution)&&null!==(m=this._constraints.height)&&void 0!==m&&m.ideal&&(this.resolution=this._constraints.height.ideal),this.maxEnabledResolution=this.resolution),this.deviceId=n,this._prevSetMuted=Promise.resolve(),this._facingMode=i,this._trackEnded=!1,this._hasSentData=!1,this._testDataSent=!0,this._realDeviceId=""===this.deviceId?void 0:this.deviceId,this._sourceName=null,this._trackMutedTS=0,this._onDeviceListWillChange=e=>{const t=this._realDeviceId;this._setRealDeviceIdFromDeviceList(e),(void 0===this.getTrack().readyState&&void 0!==this._realDeviceId&&!e.find((e=>e.deviceId===this._realDeviceId))||void 0!==t&&void 0===this._realDeviceId)&&(this._trackEnded=!0)},this.isAudioTrack()&&nc.isDeviceChangeAvailable("output")&&(this._onAudioOutputDeviceChanged=this.setAudioOutput.bind(this),nc.addListener(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,this._onAudioOutputDeviceChanged)),nc.addListener(ji.default.DEVICE_LIST_WILL_CHANGE,this._onDeviceListWillChange),this._initNoDataFromSourceHandlers()}_addStreamToConferenceAsUnmute(){return this.conference?new Promise(((e,t)=>{this.conference._addLocalTrackToPc(this).then(e,(e=>t(new Error(e))))})):Promise.resolve()}_fireNoDataFromSourceEvent(){const e=!this.isReceivingData();this.emit(wt,e),sc.debug(`NO_DATA_FROM_SOURCE event with value ${e} detected for track: ${this}`),Mi.sendAnalytics(((e,t)=>({attributes:{media_type:e,value:t},action:"track.no.data.from.source",type:kt.TYPE_OPERATIONAL}))(this.getType(),e))}_initNoDataFromSourceHandlers(){this._isNoDataFromSourceEventsEnabled()&&(this._setHandler("track_mute",(()=>{this._trackMutedTS=window.performance.now(),this._fireNoDataFromSourceEvent()})),this._setHandler("track_unmute",(()=>{this._fireNoDataFromSourceEvent(),Mi.sendAnalyticsAndLog(nn,{media_type:this.getType(),track_type:"local",value:window.performance.now()-this._trackMutedTS})})),this.isVideoTrack()&&this.videoType===Qo.VideoType.CAMERA&&this._setHandler("track_ended",(()=>{this.isReceivingData()||this._fireNoDataFromSourceEvent()})))}_isNoDataFromSourceEventsEnabled(){return!this.isVideoTrack()||this.videoType!==Qo.VideoType.DESKTOP}_queueSetMuted(e){const t=this._setMuted.bind(this,e);return this._prevSetMuted=this._prevSetMuted.then(t,t),this._prevSetMuted}_removeStreamFromConferenceAsMute(e,t){this.conference?this.conference._removeLocalTrackFromPc(this).then(e,(e=>t(new Error(e)))):e()}_sendMuteStatus(e){this.conference&&this.conference._setTrackMuteStatus(this.getType(),this,e)&&this.conference.room.sendPresence()}_setMuted(e){if(this.isMuted()===e&&this.videoType!==Qo.VideoType.DESKTOP)return Promise.resolve();if(this.disposed)return Promise.reject(new dr(tr));let t=Promise.resolve();const n=()=>sc.info(`Mute ${this}: ${e}`),i=ci.isReactNative()?this.videoType===Qo.VideoType.DESKTOP:ci.doesVideoMuteByStreamRemove();if(this.isAudioTrack()||!i)n(),this._streamEffect&&this._streamEffect.setMuted?this._streamEffect.setMuted(e):this.track&&(this.track.enabled=!e);else if(e)t=new Promise(((e,t)=>{n(),this._removeStreamFromConferenceAsMute((()=>{this._streamEffect&&this._stopStreamEffect(),this._unregisterHandlers(),this.stopStream(),this._setStream(null),e()}),t)}));else{n();const e={cameraDeviceId:this.getDeviceId(),devices:[Ri.VIDEO],effects:this._streamEffect?[this._streamEffect]:[],facingMode:this.getCameraFacingMode()};t=nc.obtainAudioAndVideoPermissions(Object.assign({},e,{constraints:{video:this._constraints}})),t=t.then((e=>{const t=e.find((e=>e.track.kind===this.getType()));if(!t)throw new dr(nr);return this._setStream(t.stream),this.track=t.track,this.videoType!==t.videoType&&(sc.warn(`${this}: video type has changed after unmute!`,this.videoType,t.videoType),this.videoType=t.videoType),this._streamEffect&&this._startStreamEffect(this._streamEffect),this.containers.map((e=>nc.attachMediaStream(e,this.stream).catch((()=>{sc.error(`Attach media failed for ${this} on video unmute!`)})))),this._addStreamToConferenceAsUnmute()}))}return t.then((()=>{this._sendMuteStatus(e),this.isVideoTrack()&&this.conference&&this.conference._sendBridgeVideoTypeMessage(this),this.emit(Rt,this)}))}_setRealDeviceIdFromDeviceList(e){const t=this.getTrack(),n=`${t.kind}input`;let i=e.find((e=>e.kind===n&&e.label===t.label&&e.deviceId===this.deviceId));if(!i&&"default"===this._realDeviceId){const r=(t.label||"").replace("Default - ","");i=e.find((e=>e.kind===n&&e.label===r))}this._realDeviceId=i?i.deviceId:void 0}_setStream(e){super._setStream(e)}_startStreamEffect(e){this._streamEffect=e,this._originalStream=this.stream,this._setStream(this._streamEffect.startEffect(this._originalStream)),this.track=this.stream.getTracks()[0]}_stopStreamEffect(){this._streamEffect&&(this._streamEffect.stopEffect(),this._setStream(this._originalStream),this._originalStream=null,this.track=this.stream?this.stream.getTracks()[0]:null)}_switchCamera(){this.isVideoTrack()&&this.videoType===Qo.VideoType.CAMERA&&"function"==typeof this.track._switchCamera&&(this.track._switchCamera(),this._facingMode=this._facingMode===Va.ENVIRONMENT?Va.USER:Va.ENVIRONMENT)}_switchStreamEffect(e){this._streamEffect&&(this._stopStreamEffect(),this._streamEffect=void 0),e&&this._startStreamEffect(e)}async dispose(){return this._streamEffect&&await this.setEffect(),this.conference&&await this.conference.removeTrack(this),this.stream&&(this.stopStream(),this.detach()),nc.removeListener(ji.default.DEVICE_LIST_WILL_CHANGE,this._onDeviceListWillChange),this._onAudioOutputDeviceChanged&&nc.removeListener(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,this._onAudioOutputDeviceChanged),super.dispose()}getCameraFacingMode(){if(this.isVideoTrack()&&this.videoType===Qo.VideoType.CAMERA){var e,t;const n=null===(e=(t=this.track).getSettings)||void 0===e?void 0:e.call(t);return n&&"facingMode"in n?n.facingMode:void 0!==this._facingMode?this._facingMode:Va.USER}}getCaptureResolution(){return this.videoType!==Qo.VideoType.CAMERA&&ci.isWebKitBased()?this.getHeight():this.resolution}getDeviceId(){return this._realDeviceId||this.deviceId}getDuration(){return Date.now()/1e3-this.metadata.timestamp/1e3}getParticipantId(){return this.conference&&this.conference.myUserId()}getSourceName(){return this._sourceName}isEnded(){return this.isVideoTrack()&&this.isMuted()?this._trackEnded:"ended"===this.getTrack().readyState||this._trackEnded}isLocal(){return!0}isMuted(){return!this.stream||!(!this.isVideoTrack()||this.isActive())||(this._streamEffect&&this._streamEffect.isMuted?this._streamEffect.isMuted():!this.track||!this.track.enabled)}isReceivingData(){return!(!this.isVideoTrack()||!this.isMuted()&&!this._stopStreamInProgress&&this.videoType!==Qo.VideoType.DESKTOP)||!!this.stream&&(this._effectEnabled?this._originalStream:this.stream).getTracks().some((e=>!("readyState"in e&&"live"!==e.readyState||"muted"in e&&!0===e.muted)))}mute(){return this._queueSetMuted(!0)}onByteSentStatsReceived(e,t){t>0&&(this._hasSentData=!0);const n=e.getConnectionState();this._testDataSent&&"connected"===n&&(setTimeout((()=>{this._hasSentData||(sc.warn(`${this} \'bytes sent\' <= 0: ${t}`),Mi.analytics.sendEvent(tn,{media_type:this.getType()}))}),3e3),this._testDataSent=!1)}setConference(e){this.conference=e}setEffect(e){if(void 0===this._streamEffect&&void 0===e)return Promise.resolve();if(void 0!==e&&!e.isEnabled(this))return Promise.reject(new Error("Incompatible effect instance!"));if(!0===this._setEffectInProgress)return Promise.reject(new Error("setEffect already in progress!"));if(this.isMuted()&&!this.isAudioTrack())return this._streamEffect=e,Promise.resolve();const t=this.conference;return t?(this._setEffectInProgress=!0,t._removeLocalTrackFromPc(this).then((()=>(this._switchStreamEffect(e),this.isVideoTrack()&&this.containers.forEach((e=>{nc.attachMediaStream(e,this.stream).catch((()=>{sc.error(`Attach media failed for ${this} when trying to set effect.`)}))})),t._addLocalTrackToPc(this)))).then((()=>{this._setEffectInProgress=!1})).catch((e=>{throw this._setEffectInProgress=!1,this._switchStreamEffect(),sc.error("Failed to switch to the new stream!",e),e}))):(this._switchStreamEffect(e),this.isVideoTrack()&&this.containers.forEach((e=>{nc.attachMediaStream(e,this.stream).catch((()=>{sc.error(`Attach media failed for ${this} when trying to set effect.`)}))})),Promise.resolve())}setSourceName(e){this._sourceName=e}stopStream(){this._stopStreamInProgress=!0;try{nc.stopMediaStream(this.stream)}finally{this._stopStreamInProgress=!1}}toString(){return`LocalTrack[${this.rtcId},${this.getType()}]`}unmute(){return this._queueSetMuted(!1)}}var dc=n(561);const cc=function(e,t){return void 0!==e&&void 0!==e.media&&Array.isArray(e.media)&&e.media.forEach((e=>{e.sources&&e.sources.length&&(e.ssrcs=[],e.sources.forEach((t=>{Object.keys(t).forEach((n=>{"id"!==n&&e.ssrcs.push({id:t.id,attribute:n,value:t[n]})}))})),delete e.sources),e.ssrcGroups&&e.ssrcGroups.length&&e.ssrcGroups.forEach((e=>{void 0!==e.ssrcs&&Array.isArray(e.ssrcs)&&(e.ssrcs=e.ssrcs.join(" "))}))})),dc.write(e,t)},lc=function(e){const t=dc.parse(e);return void 0!==t&&void 0!==t.media&&Array.isArray(t.media)&&t.media.forEach((e=>{void 0!==e.ssrcs&&Array.isArray(e.ssrcs)&&(e.sources=[],e.ssrcs.forEach((t=>{const n=e.sources.findIndex((e=>e.id===t.id));if(n>-1)e.sources[n][t.attribute]=t.value;else{const n={id:t.id};n[t.attribute]=t.value,e.sources.push(n)}})),delete e.ssrcs),void 0!==e.ssrcGroups&&Array.isArray(e.ssrcGroups)&&e.ssrcGroups.forEach((e=>{"string"==typeof e.ssrcs&&(e.ssrcs=e.ssrcs.split(" "))}))})),t},hc=["audio","video","data"],uc=e=>e.find((e=>"SIM"===e.semantics)),pc=e=>e.find((e=>"FID"===e.semantics));function mc(e,t,n,i){if(!e||!t)return;const r=e=>i.find((t=>t.id.toString()===e));t.ssrcs.forEach((t=>{e.sources.push(r(t));const i=n[parseInt(t,10)].find((e=>"FID"===e.semantics));if(i){const n=i.ssrcs.find((e=>e!==t));e.sources.push(r(n)),e.ssrcGroups.push(i)}})),e.ssrcGroups.push(t)}function gc(e,t,n,i){if(!e||!t)return;if(e.sources=[],e.ssrcGroups=[],!n[t.id])return e.sources.push(t),void(e.msid=t.msid);const r=uc(n[t.id]),o=pc(n[t.id]);if(r)mc(e,r,n,i);else if(o){const r=o.ssrcs.find((e=>e!==t)),s=uc(n[r]);s?mc(e,s,n,i):(o.ssrcs.forEach((t=>{e.sources.push((e=>i.find((t=>t.id.toString()===e)))(t))})),e.ssrcGroups.push(o))}e.msid=e.sources[0].msid}function fc(e,t,n){if(!n.find((t=>!!t.sources&&t.sources.some((t=>t.id===e.id))))){if(!t[e.id])return!1;const i=uc(t[e.id]),r=pc(t[e.id]);return i?n.some((e=>e.sources&&e.sources.some((e=>e.id.toString()===i.ssrcs[0])))):!(!r||e.id.toString()===r.ssrcs[0])&&fc({id:r.ssrcs[0]},t,n)}return!0}class vc{toPlanB(e){if(!e||"string"!=typeof e.sdp)return console.warn("An empty description was passed as an argument."),e;const t=lc(e.sdp);if(!t.media||!t.media.length)return console.warn("The description has no media."),e;if(t.media.every((e=>-1!==hc.indexOf(e.mid))))return console.warn("The description does not look like unified plan sdp"),e;const n={},i=t.media;t.media=[],i.forEach((e=>{const t=e.type;if("application"===t)return e.mid="data",void(n[e.mid]=e);if(void 0===n[t]){const i=Es(e);i.sources&&Array.isArray(i.sources)&&i.sources.forEach((t=>{e.msid?t.msid=e.msid:delete t.msid})),i.ssrcGroups&&e.msid||(i.ssrcGroups=[]),delete i.msid,i.mid=t,n[t]=i}else if(e.msid){const i=Es(e);i.sources&&Array.isArray(i.sources)&&(i.sources.forEach((t=>{t.msid=e.msid})),n[t].sources=(n[t].sources||[]).concat(i.sources)),void 0!==i.ssrcGroups&&Array.isArray(i.ssrcGroups)&&(n[t].ssrcGroups=(n[t].ssrcGroups||[]).concat(i.ssrcGroups))}})),t.media=Object.values(n);const r=[];Object.values(n).forEach((e=>{"inactive"!==e.direction&&r.push(e.mid)})),t.groups.forEach((e=>{"BUNDLE"===e.type&&(e.mids=r.join(" "))})),t.msidSemantic={semantic:"WMS",token:"*"};const o=cc(t);return new RTCSessionDescription({type:e.type,sdp:o})}toUnifiedPlan(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e||"string"!=typeof e.sdp)return console.warn("An empty description was passed as an argument."),e;const n=lc(e.sdp);if(!n.media||!n.media.length)return console.warn("The description has no media."),e;if(n.media.length>3||n.media.every((e=>-1===hc.indexOf(e.mid))))return console.warn("The description does not look like plan-b"),e;const i=t?lc(t.sdp):null,r=function(e,t){if(!e||!t||0===e.media.length||0===t.media.length)return!1;const n=e.media[0],i=t.media[0];return n.iceUfrag!==i.iceUfrag||n.icePwd!==i.icePwd}(n,i),o=n.media[0].iceUfrag,s=n.media[0].icePwd,a=n.media[0].fingerprint,d={};n.media.forEach((e=>{const t=e.type;if("application"===t){if(!i||!i.media){const t=Es(e);return t.mid=Object.keys(d).length.toString(),void(d[e.mid]=t)}const n=i.media.findIndex((e=>e.type===t));return void(n&&(i.media[n]=e,i.media[n].mid=n))}const n=function(e){const t={};return e&&Array.isArray(e)?(e.forEach((e=>{e.ssrcs&&Array.isArray(e.ssrcs)&&e.ssrcs.forEach((n=>{void 0===t[n]&&(t[n]=[]),t[n].push(e)}))})),t):t}(e.ssrcGroups);if(e.sources)e.sources.forEach(((t,r)=>{if(!t.msid)return;if(!i||!i.media){if(fc(t,n,Object.values(d)))return;const i=Es(e);return i.mid=Object.keys(d).length.toString(),i.direction=r||"sendonly"===e.direction?"sendonly":"sendrecv",i.bundleOnly=void 0,gc(i,t,n,e.sources),void(d[i.mid]=i)}if(fc(t,n,i.media))return;const o=Es(e);o.mid=i.media.length.toString(),o.direction="sendonly",gc(o,t,n,e.sources),i.media.push(o)}));else if(!i){const t=Es(e);t.mid=Object.keys(d).length.toString(),d[e.mid]=t}})),n.media=i?i.media:Object.values(d);const c=[];n.media.forEach((e=>{c.push(e.mid),r&&(e.iceUfrag=o,e.icePwd=s,e.fingerprint=a)})),n.groups.forEach((e=>{"BUNDLE"===e.type&&(e.mids=c.join(" "))})),n.msidSemantic={semantic:"WMS",token:"*"},n.origin.sessionVersion++;const l=cc(n);return new RTCSessionDescription({type:e.type,sdp:l})}}let _c;!function(e){e.PEER_MUTED_CHANGED="signaling.peerMuted",e.PEER_VIDEO_TYPE_CHANGED="signaling.peerVideoType",e.SOURCE_MUTED_CHANGED="signaling.sourceMuted",e.SOURCE_UPDATED="signaling.sourceUpdated",e.SOURCE_VIDEO_TYPE_CHANGED="signaling.sourceVideoType"}(_c||(_c={}));const yc=_c.PEER_MUTED_CHANGED,Ec=_c.PEER_VIDEO_TYPE_CHANGED,Sc=_c.SOURCE_MUTED_CHANGED,bc=_c.SOURCE_UPDATED,Tc=_c.SOURCE_VIDEO_TYPE_CHANGED;function Cc(e,t,n){return`${e}-${t.substring(0,1)}${n}`}function xc(e){const t=e.lastIndexOf("-")+1;if(t<=0)throw new Error(`Invalid source name: ${e}`);const n=e.substr(t,1);for(const e of Object.values(Ri))if(e.substr(0,1)===n)return e;throw new Error(`Invalid source name: ${e}`)}function Rc(e){const t=e.split("-"),n=Number(t[t.length-1].substring(1));if(Number.isNaN(n))throw new Error(`Failed to parse track idx for source name: ${e}`);return n}class Ac extends xr{getPeerMediaInfo(e,t,n){throw new Error("not implemented")}getPeerSourceInfo(e,t){throw new Error("not implemented")}getSSRCOwner(e){throw new Error("not implemented")}getTrackSourceName(e){throw new Error("not implemented")}removeSSRCOwners(e){}setSSRCOwner(e,t,n){}setTrackMuteStatus(e,t){}setTrackVideoType(e,t){}updateSsrcOwnersOnLeave(e){}}const wc=[{rid:"1",scaleFactor:4},{rid:"2",scaleFactor:2},{rid:"3",scaleFactor:1}],Ic={av1:{maxBitratesVideo:{low:1e5,standard:3e5,high:1e6,fullHd:2e6,ultraHd:4e6,ssHigh:25e5,none:0},scalabilityModeEnabled:ci.supportsScalabilityModeAPI(),useSimulcast:!1,useKSVC:!0},h264:{maxBitratesVideo:{low:2e5,standard:5e5,high:15e5,fullHd:3e6,ultraHd:6e6,ssHigh:25e5,none:0},scalabilityModeEnabled:ci.supportsScalabilityModeAPI()},vp8:{maxBitratesVideo:{low:2e5,standard:5e5,high:15e5,fullHd:3e6,ultraHd:6e6,ssHigh:25e5,none:0},scalabilityModeEnabled:!1},vp9:{maxBitratesVideo:{low:1e5,standard:3e5,high:12e5,fullHd:25e5,ultraHd:5e6,ssHigh:25e5,none:0},scalabilityModeEnabled:ci.supportsScalabilityModeAPI(),useSimulcast:!1,useKSVC:!0}},Pc=[{height:2160,level:"ultraHd"},{height:1080,level:"fullHd"},{height:720,level:"high"},{height:540,level:"standard"},{height:480,level:"standard"},{height:360,level:"standard"},{height:270,level:"low"},{height:180,level:"low"},{height:90,level:"low"},{height:0,level:"none"}];let Dc;function Oc(e){return parseInt(e.ssrcs.split(" ")[0],10)}function kc(e){return parseInt(e.ssrcs.split(" ")[1],10)}function Nc(e){return e.ssrcs?e.ssrcs.map((e=>e.id)).filter(((e,t,n)=>n.indexOf(e)===t)).length:0}!function(e){e.ULTRA="ultraHd",e.FULL="fullHd",e.HIGH="high",e.STANDARD="standard",e.LOW="low",e.NONE="none"}(Dc||(Dc={}));class Mc{constructor(e){if(!e)throw new Error("mLine is undefined");this.mLine=e}get ssrcs(){return this.mLine.ssrcs||(this.mLine.ssrcs=[]),this.mLine.ssrcs}set ssrcs(e){this.mLine.ssrcs=e}get direction(){return this.mLine.direction}set direction(e){this.mLine.direction=e}get ssrcGroups(){return this.mLine.ssrcGroups||(this.mLine.ssrcGroups=[]),this.mLine.ssrcGroups}set ssrcGroups(e){this.mLine.ssrcGroups=e}getSSRCAttrValue(e,t){const n=this.ssrcs.find((n=>n.id===e&&n.attribute===t));return n&&n.value}removeSSRC(e){this.mLine.ssrcs&&this.mLine.ssrcs.length&&(this.mLine.ssrcs=this.mLine.ssrcs.filter((t=>t.id!==e)))}addSSRCAttribute(e){this.ssrcs.push(e)}findGroup(e,t){return this.ssrcGroups.find((n=>n.semantics===e&&(!t||t===n.ssrcs)))}findGroups(e){return this.ssrcGroups.filter((t=>t.semantics===e))}findGroupByPrimarySSRC(e,t){return this.ssrcGroups.find((n=>n.semantics===e&&Oc(n)===t))}findSSRCByMSID(e){return this.ssrcs.find((t=>"msid"===t.attribute&&(null===e||t.value===e)))}getSSRCCount(){return Nc(this.mLine)}containsAnySSRCGroups(){return void 0!==this.mLine.ssrcGroups}getPrimaryVideoSsrc(){const e=this.mLine.type;if("video"!==e)throw new Error(`getPrimarySsrc doesn\'t work with \'${e}\'`);if(1===Nc(this.mLine))return this.mLine.ssrcs[0].id;if(this.mLine.ssrcGroups){const e=this.findGroup("SIM");if(e)return Oc(e);const t=this.findGroup("FID");if(t)return Oc(t);const n=this.findGroup("FEC-FR");if(n)return Oc(n)}}getRtxSSRC(e){const t=this.findGroupByPrimarySSRC("FID",e);return t&&kc(t)}getSSRCs(){return this.ssrcs.map((e=>e.id)).filter(((e,t,n)=>n.indexOf(e)===t))}getPrimaryVideoSSRCs(){const e=this.mLine.type;if("video"!==e)throw new Error(`getPrimaryVideoSSRCs doesn\'t work with ${e}`);const t=this.getSSRCs();for(const e of this.ssrcGroups)if("FID"===e.semantics||"FEC-FR"===e.semantics){const n=kc(e);t.splice(t.indexOf(n),1)}return t}dumpSSRCGroups(){return JSON.stringify(this.mLine.ssrcGroups)}removeGroupsWithSSRC(e){this.mLine.ssrcGroups&&(this.mLine.ssrcGroups=this.mLine.ssrcGroups.filter((t=>-1===t.ssrcs.indexOf(`${e}`))))}removeGroupsBySemantics(e){this.mLine.ssrcGroups&&(this.mLine.ssrcGroups=this.mLine.ssrcGroups.filter((t=>t.semantics!==e)))}replaceSSRC(e,t){this.mLine.ssrcs&&this.mLine.ssrcs.forEach((n=>{n.id===e&&(n.id=t)}))}addSSRCGroup(e){this.ssrcGroups.push(e)}}class Lc{constructor(e){this.parsedSDP=Ps.parse(e)}selectMedia(e){const t=this.parsedSDP.media.filter((t=>t.type===e)).map((e=>new Mc(e)));return null!=t?t:null}toRawSDP(){return Ps.write(this.parsedSDP)}}const Fc=(0,E.getLogger)("modules/sdp/LocalSdpMunger.js");class jc{constructor(e,t){this.tpc=e,this.localEndpointId=t,this.audioSourcesToMsidMap=new Map,this.videoSourcesToMsidMap=new Map}_generateMsidAttribute(e,t,n){if(!e||!t)return Fc.error(`Unable to munge local MSID - track id=${t} or media type=${e} is missing`),null;const i=this.tpc.id;return`${n}-${i} ${t}-${i}`}_transformMediaIdentifiers(e){var t,n,i,r,o;const s=null===(t=e.mLine)||void 0===t?void 0:t.type,a=null===(n=e.mLine)||void 0===n?void 0:n.direction,d=null===(i=e.mLine)||void 0===i?void 0:i.msid,c=[...new Set(null===(r=e.mLine)||void 0===r||null===(o=r.ssrcs)||void 0===o?void 0:o.map((e=>e.id)))],l=`${this.localEndpointId}-${s}`;let h=d?d.split(" ")[1]:`${this.localEndpointId}-${e.mLine.mid}`;for(const t of c){const n=e.ssrcs.find((e=>e.id===t&&"msid"===e.attribute));n&&(h=n.value.split(" ")[1]),this._updateSourcesToMsidMap(s,l,h);const i=s===Ri.VIDEO?this.videoSourcesToMsidMap.get(h):this.audioSourcesToMsidMap.get(h),r=this._generateMsidAttribute(s,h,i);n?n.value=r:a!==As.SENDONLY&&a!==As.SENDRECV||e.ssrcs.push({id:t,attribute:"msid",value:r})}e.ssrcs=e.ssrcs.filter((e=>"msid"===e.attribute)),!ci.isFirefox()||a!==As.RECVONLY&&a!==As.INACTIVE||(s!==Ri.VIDEO||this.tpc._hasHadVideoTrack)&&(s!==Ri.AUDIO||this.tpc._hasHadAudioTrack)||(e.ssrcs=void 0,e.ssrcGroups=void 0)}_updateSourcesToMsidMap(e,t,n){if(e===Ri.VIDEO){if(!this.videoSourcesToMsidMap.has(n)){const e=`${t}-${this.videoSourcesToMsidMap.size}`;this.videoSourcesToMsidMap.set(n,e)}}else if(!this.audioSourcesToMsidMap.has(n)){const e=`${t}-${this.audioSourcesToMsidMap.size}`;this.audioSourcesToMsidMap.set(n,e)}}transformStreamIdentifiers(e){var t;if(!e||!e.sdp||!e.type)return e;const n=new Lc(e.sdp),i=null===(t=n.selectMedia(Ri.AUDIO))||void 0===t?void 0:t[0];i&&(this._transformMediaIdentifiers(i),this._injectSourceNames(i));const r=n.selectMedia(Ri.VIDEO);for(const e of r)this._transformMediaIdentifiers(e),this._injectSourceNames(e);return this.audioSourcesToMsidMap.clear(),this.videoSourcesToMsidMap.clear(),new RTCSessionDescription({type:e.type,sdp:n.toRawSDP()})}_injectSourceNames(e){var t,n,i;const r=[...new Set(null===(t=e.mLine)||void 0===t||null===(n=t.ssrcs)||void 0===n?void 0:n.map((e=>e.id)))],o=null===(i=e.mLine)||void 0===i?void 0:i.type;if(!o)throw new Error("_transformMediaIdentifiers - no media type in mediaSection");for(const t of r){const n=e.ssrcs.find((e=>e.id===t&&"name"===e.attribute)),i=e.ssrcs.find((e=>e.id===t&&"msid"===e.attribute)).value.split(" ")[0].split("-"),r=i[i.length-2],a=Cc(this.localEndpointId,o,r);if(n||e.ssrcs.push({id:t,attribute:"name",value:a}),o===Ri.VIDEO){var s;const n=null===(s=this.tpc.getLocalVideoTracks().find((e=>e.getSourceName()===a)))||void 0===s?void 0:s.getVideoType();n&&e.ssrcs.push({id:t,attribute:"videoType",value:n})}}}}const Vc=(0,E.getLogger)("modules/sdp/RtxModifier.js");function Uc(e,t,n){const i=t.id,r=t.msid,o=t.cname,s=e.getRtxSSRC(i);s!==n&&(s&&(e.removeSSRC(s),e.removeGroupsWithSSRC(s)),e.addSSRCAttribute({id:n,attribute:"cname",value:o}),r&&e.addSSRCAttribute({id:n,attribute:"msid",value:r}),e.addSSRCGroup({semantics:"FID",ssrcs:`${i} ${n}`}))}class Hc{constructor(){this.correspondingRtxSsrcs=new Map}clearSsrcCache(){this.correspondingRtxSsrcs.clear()}setSsrcCache(e){Vc.debug("Setting ssrc cache to ",e),this.correspondingRtxSsrcs=e}modifyRtxSsrcs(e){let t=!1;const n=new Lc(e),i=n.selectMedia(Ri.VIDEO);if(null==i||!i.length)return Vc.debug(`No \'video\' media found in the sdp: ${e}`),e;for(const e of i)this.modifyRtxSsrcs2(e)&&(t=!0);return t?n.toRawSDP():e}modifyRtxSsrcs2(e){if(e.direction===As.RECVONLY)return!1;if(e.getSSRCCount()<1)return!1;const t=e.getPrimaryVideoSSRCs();for(const n of t){const t=e.getSSRCAttrValue(n,"msid"),i=e.getSSRCAttrValue(n,"cname");let r=this.correspondingRtxSsrcs.get(n);if(!r){r=e.getRtxSSRC(n)||Ns.generateSsrc(),this.correspondingRtxSsrcs.set(n,r)}Uc(e,{id:n,cname:i,msid:t},r)}return!0}stripRtx(e){const t=new Lc(e),n=t.selectMedia(Ri.VIDEO);if(null==n||!n.length)return Vc.debug(`No \'video\' media found in the sdp: ${e}`),e;for(const e of n)if(e.direction!==As.RECVONLY&&e.getSSRCCount()&&e.containsAnySSRCGroups()){const t=e.findGroups("FID");e.removeGroupsBySemantics("FID");for(const n of t){const t=kc(n);e.removeSSRC(t)}}return t.toRawSDP()}}class $c{constructor(){this._ssrcCache=new Map,this._numOfLayers=wc.length}_fillSsrcsFromCache(e){const t=e.mid,n=this._ssrcCache.get(t),i=this._parseSimLayers(e),r=this._getSsrcAttribute(e,i[0],"msid"),o=this._getSsrcAttribute(e,i[0],"cname");e.ssrcs=[],e.ssrcGroups=[];for(const t of n)e.ssrcs.push({id:t,attribute:"msid",value:r}),e.ssrcs.push({id:t,attribute:"cname",value:o});return e.ssrcGroups.push({semantics:"SIM",ssrcs:n.join(" ")}),e}_generateNewSsrcsForSimulcast(e,t){const n=this._getSsrcAttribute(e,t,"cname");let i=this._getSsrcAttribute(e,t,"msid");const r=(e,t)=>{e.ssrcs.push({id:t,attribute:"cname",value:n}),e.ssrcs.push({id:t,attribute:"msid",value:i})};i||(i=e.msid,e.ssrcs.forEach((t=>{e.ssrcs.push({id:t.id,attribute:"msid",value:i})})));const o=[];for(let t=0;tNumber(e.id)===t&&e.attribute===n)))||void 0===r?void 0:r.value}_parseSimLayers(e){var t,n;const i=null===(t=e.ssrcGroups)||void 0===t?void 0:t.find((e=>"SIM"===e.semantics));return i?i.ssrcs.split(" ").map((e=>Number(e))):null!==(n=e.ssrcs)&&void 0!==n&&n.length?[Number(e.ssrcs[0].id)]:null}mungeLocalDescription(e){if(!e||!e.sdp)return e;const t=Ps.parse(e.sdp);for(let e of t.media){var n,i,r;if(e.direction===As.RECVONLY||e.direction===As.INACTIVE)continue;if(e.type!==Ri.VIDEO)continue;const t=e.mid,s=new Set(null===(n=e.ssrcs)||void 0===n?void 0:n.map((e=>e.id))),a=null!==(i=null===(r=e.ssrcGroups)||void 0===r?void 0:r.length)&&void 0!==i?i:0;let d;if(!(0===s.size||s.size>2||2===s.size&&0===a)){if(1===s.size){var o;d=Number(null===(o=e.ssrcs[0])||void 0===o?void 0:o.id)}else{const t=e.ssrcGroups.find((e=>"FID"===e.semantics));t&&(d=Number(t.ssrcs.split(" ")[0]))}if(this._ssrcCache.has(t))e=this._fillSsrcsFromCache(e);else{e=this._generateNewSsrcsForSimulcast(e,d);const n=this._parseSimLayers(e);this._ssrcCache.set(t,n)}}}return new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})}}let Jc;!function(e){e.ACTIVE="active",e.INACTIVE="inactive",e.INTERRUPTED="interrupted",e.RESTORING="restoring"}(Jc||(Jc={}));const Bc=(0,E.getLogger)("modules/connectivity/TrackStreamingStatus.ts");class qc{static _getNewStateForJvbMode(e,t,n,i){return n?Jc.ACTIVE:ci.supportsVideoMuteOnConnInterrupted()||i?i?e?t?Jc.INTERRUPTED:Jc.RESTORING:Jc.INACTIVE:Jc.ACTIVE:e?Jc.ACTIVE:Jc.INACTIVE}static _getNewStateForP2PMode(e,t){return ci.supportsVideoMuteOnConnInterrupted()||t?e||!t?Jc.ACTIVE:Jc.INTERRUPTED:Jc.ACTIVE}constructor(e,t,n,i){this.rtc=e,this.conference=t,this.track=n,this.restoringTimer=null,this.rtcMutedTimestamp=null,this.streamingStatusMap={},this.trackTimer=null,this._lastFramesDecoded=null,this._lastFramesDecodedAt=null,this._statsTrackFrozen=!1,this.outOfForwardedSourcesTimeout="number"==typeof i.outOfForwardedSourcesTimeout?i.outOfForwardedSourcesTimeout:500,this.p2pRtcMuteTimeout="number"==typeof i.p2pRtcMuteTimeout?i.p2pRtcMuteTimeout:2500,this.rtcMuteTimeout="number"==typeof i.rtcMuteTimeout?i.rtcMuteTimeout:1e4,Bc.info(`RtcMuteTimeout set to: ${this.rtcMuteTimeout}`)}_getVideoFrozenTimeout(){const e=this.track.getSourceName();return this.rtc.isInForwardedSources(e)?this.rtcMuteTimeout:this.conference.isP2PActive()?this.p2pRtcMuteTimeout:this.outOfForwardedSourcesTimeout}init(){this._onP2PStatus=this.figureOutStreamingStatus.bind(this),this.conference.on(B.P2P_STATUS,this._onP2PStatus),this._onUserLeft=this.onUserLeft.bind(this),this.conference.on(B.USER_LEFT,this._onUserLeft),ci.supportsVideoMuteOnConnInterrupted()&&(this._onTrackRtcMuted=this.onTrackRtcMuted.bind(this),this.rtc.addListener(ji.default.REMOTE_TRACK_MUTE,this._onTrackRtcMuted),this._onTrackRtcUnmuted=this.onTrackRtcUnmuted.bind(this),this.rtc.addListener(ji.default.REMOTE_TRACK_UNMUTE,this._onTrackRtcUnmuted),this._onSignallingMuteChanged=this.onSignallingMuteChanged.bind(this),this.track.on(Rt,this._onSignallingMuteChanged),this._onTrackVideoTypeChanged=this.onTrackVideoTypeChanged.bind(this),this.track.on(At,this._onTrackVideoTypeChanged)),this._onForwardedSourcesChanged=this.onForwardedSourcesChanged.bind(this),this.conference.on(B.FORWARDED_SOURCES_CHANGED,this._onForwardedSourcesChanged),this._onLastNValueChanged=this.figureOutStreamingStatus.bind(this),this.rtc.on(ji.default.LASTN_VALUE_CHANGED,this._onLastNValueChanged),!ci.supportsVideoMuteOnConnInterrupted()&&this.track.isVideoTrack()&&(this._onConnectionStats=(e,t)=>this._handleFramesDecodedUpdate(t),this.conference.statistics.addConnectionStatsListener(this._onConnectionStats))}dispose(){ci.supportsVideoMuteOnConnInterrupted()?(this.rtc.removeListener(ji.default.REMOTE_TRACK_MUTE,this._onTrackRtcMuted),this.rtc.removeListener(ji.default.REMOTE_TRACK_UNMUTE,this._onTrackRtcUnmuted),this.track.off(Rt,this._onSignallingMuteChanged),this.track.off(At,this._onTrackVideoTypeChanged)):this.track.isVideoTrack()&&(this.conference.statistics.removeConnectionStatsListener(this._onConnectionStats),this._statsTrackFrozen=!1),this.conference.off(B.FORWARDED_SOURCES_CHANGED,this._onForwardedSourcesChanged),this.conference.off(B.P2P_STATUS,this._onP2PStatus),this.conference.off(B.USER_LEFT,this._onUserLeft),this.rtc.removeListener(ji.default.LASTN_VALUE_CHANGED,this._onLastNValueChanged),this.clearTimeout(),this.clearRtcMutedTimestamp(),this.maybeSendTrackStreamingStatusEvent(Date.now()),this.figureOutStreamingStatus()}_changeStreamingStatus(e){if(this.track.getTrackStreamingStatus()!==e){const t=this.track.getSourceName();this.track._setTrackStreamingStatus(e),Bc.debug(`Emit track streaming status(${Date.now()}) ${t}: ${e}`),this.track.emit(Pt,this.track,e)}}clearTimeout(){this.trackTimer&&(window.clearTimeout(this.trackTimer),this.trackTimer=null)}clearRtcMutedTimestamp(){this.rtcMutedTimestamp=null}isVideoTrackFrozen(){if(this._statsTrackFrozen)return!0;if(!ci.supportsVideoMuteOnConnInterrupted())return!1;const e=this.track.isWebRTCTrackMuted(),t=this.rtcMutedTimestamp,n=this._getVideoFrozenTimeout();return e&&"number"==typeof t&&Date.now()-t>=n}_handleFramesDecodedUpdate(e){var t;if(this.track.isP2P!==this.conference.isP2PActive())return this._lastFramesDecoded=null,this._lastFramesDecodedAt=null,void(this._statsTrackFrozen&&(this._statsTrackFrozen=!1,this.figureOutStreamingStatus()));if(this.track.isMuted()||null==e.framesDecoded)return;const n=this.track.getSSRC(),i=e.framesDecoded.get(n),r=Date.now();if(null==i)null===this._lastFramesDecodedAt&&(this._lastFramesDecodedAt=r);else if(i>(null!==(t=this._lastFramesDecoded)&&void 0!==t?t:-1))return this._lastFramesDecodedAt=r,this._lastFramesDecoded=i,void(this._statsTrackFrozen&&(Bc.debug(`Stats-based freeze cleared for ${this.track.getSourceName()}`),this._statsTrackFrozen=!1,this.figureOutStreamingStatus()));null!==this._lastFramesDecodedAt&&r-this._lastFramesDecodedAt>=this._getVideoFrozenTimeout()&&!this._statsTrackFrozen&&(Bc.debug(`Stats-based freeze detected for ${this.track.getSourceName()}`),this._statsTrackFrozen=!0,this.figureOutStreamingStatus())}figureOutStreamingStatus(){const e=this.track.getSourceName(),t=this.conference.isP2PActive(),n=this._isRestoringTimedout(),i=0===this.conference.getLastN(),r=this.track.isMuted()||i,o=this.isVideoTrackFrozen(),s=this.rtc.isInForwardedSources(e),a=t?qc._getNewStateForP2PMode(r,o):qc._getNewStateForJvbMode(s,n,r,o);a!==Jc.RESTORING&&this._clearRestoringTimer(),Bc.debug(`Figure out conn status for ${e}, is video muted: ${r} video track frozen: ${o} p2p mode: ${t} is in forwarded sources: ${s} currentStatus => newStatus: ${this.track.getTrackStreamingStatus()} => ${a}`);const d=this.streamingStatusMap||{};if(!("p2p"in d)||!("streamingStatus"in d)||d.p2p!==t||d.streamingStatus!==a){const e=Date.now();this.maybeSendTrackStreamingStatusEvent(e),this.streamingStatusMap={...d,streamingStatus:a,p2p:t,startedMs:e},"videoType"in this.streamingStatusMap||(this.streamingStatusMap.videoType=this.track.getVideoType())}this._changeStreamingStatus(a)}maybeSendTrackStreamingStatusEvent(e){const t=this.streamingStatusMap;t&&"startedMs"in t&&"videoType"in t&&"streamingStatus"in t&&"p2p"in t&&(t.value=e-t.startedMs,Mi.sendAnalytics(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:kt.TYPE_OPERATIONAL,source:"track.streaming.status",action:"duration",attributes:e}}(t)))}onForwardedSourcesChanged(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0;const i=this.track.getSourceName();ci.supportsVideoMuteOnConnInterrupted()||this.figureOutStreamingStatus(),e.includes(i)&&(this.track._clearEnteredForwardedSourcesTimestamp(),this._clearRestoringTimer(),ci.supportsVideoMuteOnConnInterrupted()&&this.figureOutStreamingStatus()),t.includes(i)&&(this.track._setEnteredForwardedSourcesTimestamp(n),ci.supportsVideoMuteOnConnInterrupted()&&this.figureOutStreamingStatus())}_clearRestoringTimer(){const e=this.restoringTimer;e&&(clearTimeout(e),this.restoringTimer=null)}_isRestoringTimedout(){const e=this.track._getEnteredForwardedSourcesTimestamp();return!!(e&&Date.now()-e>=1e4)||(this.restoringTimer||(this.restoringTimer=setTimeout((()=>this.figureOutStreamingStatus()),1e4)),!1)}_isCurrentTrack(e){return e.getSourceName()===this.track.getSourceName()}onUserLeft(e){this.track.getParticipantId()===e&&(this.maybeSendTrackStreamingStatusEvent(Date.now()),this.streamingStatusMap={})}onTrackRtcMuted(e){if(!this._isCurrentTrack(e))return;const t=e.getSourceName();if(Bc.debug(`Detector track RTC muted: ${t}`,Date.now()),this.rtcMutedTimestamp=Date.now(),!e.isMuted()){this.clearTimeout();const e=this._getVideoFrozenTimeout();this.trackTimer=window.setTimeout((()=>{Bc.debug(`Set track RTC muted for: ${t} after the timeout of ${e} ms`),this.clearTimeout(),this.figureOutStreamingStatus()}),e)}}onTrackRtcUnmuted(e){if(!this._isCurrentTrack(e))return;const t=this.track.getSourceName();Bc.debug(`Detector track RTC unmuted: ${t}`,Date.now()),this.clearTimeout(),this.clearRtcMutedTimestamp(),this.figureOutStreamingStatus()}onSignallingMuteChanged(e){this._isCurrentTrack(e)&&(this.track.getSourceName(),this.figureOutStreamingStatus())}onTrackVideoTypeChanged(e){const t=Date.now();this.maybeSendTrackStreamingStatusEvent(t),this.streamingStatusMap={...this.streamingStatusMap||{},videoType:e,startedMs:t}}}const Gc=qc,zc=n(810).getLogger("modules/RTC/JitsiRemoteTrack.js"),Kc=n(987);let Wc=!1,Xc=!1;const Yc=["abort","canplaythrough","ended","error","stalled","suspend","waiting"];class Qc extends oc{constructor(e,t,n,i,r,o,s,a,d,c,l){if(super(t,i,r,(()=>{}),o,s),this.rtc=e,"number"!=typeof a)throw new TypeError(`SSRC ${a} is not a number`);this.ssrc=a,this.ownerEndpointId=n,this.muted=d,this.isP2P=c,this._sourceName=l,this._trackStreamingStatus=null,this._trackStreamingStatusImpl=null,this._enteredForwardedSourcesTimestamp=null,this.addEventListener=this.on=this._addEventListener.bind(this),this.removeEventListener=this.off=this._removeEventListener.bind(this),zc.debug(`New remote track created: ${this}`),this.hasBeenMuted=d,this.rtc&&this.track&&this._bindTrackHandlers(),this._containerHandlers={},Yc.forEach((e=>{this._containerHandlers[e]=this._containerEventHandler.bind(this,e)}))}_bindTrackHandlers(){this.track.addEventListener("mute",(()=>this._onTrackMute())),this.track.addEventListener("unmute",(()=>this._onTrackUnmute())),this.track.addEventListener("ended",(()=>{zc.debug(`"onended" event(${Date.now()}): ${this}`)}))}_addEventListener(e,t){super.addListener(e,t),e===Pt&&this.listenerCount(Pt)&&!this._trackStreamingStatusImpl&&(this._initTrackStreamingStatus(),zc.debug(`Initializing track streaming status: ${this._sourceName}`))}_removeEventListener(e,t){super.removeListener(e,t),e!==Pt||this.listenerCount(Pt)||(this._disposeTrackStreamingStatus(),zc.debug(`Disposing track streaming status: ${this._sourceName}`))}_onTrackMute(){zc.debug(`"onmute" event(${Date.now()}): ${this}`),this.videoType!==Qo.VideoType.DESKTOP?this.rtc.eventEmitter.emit(Kc.REMOTE_TRACK_MUTE,this):zc.debug("Ignoring mute event on desktop tracks.")}_onTrackUnmute(){zc.debug(`"onunmute" event(${Date.now()}): ${this}`),this.rtc.eventEmitter.emit(Kc.REMOTE_TRACK_UNMUTE,this)}dispose(){return this._disposeTrackStreamingStatus(),super.dispose()}setMute(e){this.muted!==e&&(e&&(this.hasBeenMuted=!0),this.stream&&(this.stream.muted=e),this.muted=e,zc.info(`Mute ${this}: ${e}`),this.emit(Rt,this))}isMuted(){return this.muted}getParticipantId(){return this.ownerEndpointId}isLocal(){return!1}getSSRC(){return this.ssrc}getSourceName(){return this._sourceName}setOwner(e){this.ownerEndpointId=e,this.emit(Dt,e)}setSourceName(e){this._sourceName=e}_setVideoType(e){this.videoType!==e&&(this.videoType=e,this.emit(At,e))}_playCallback(){if(!this.conference.room)return;const e=this.isVideoTrack()?"video":"audio",t=window.performance.now();zc.info(`(TIME) Render ${e}:\\t`,t),this.conference.getConnectionTimes()[`${e}.render`]=t;const n=window.connectionTimes["obtainPermissions.start"],i=window.connectionTimes["obtainPermissions.end"],r=isNaN(i)||isNaN(n)?0:i-n,o=t-(this.conference.getConnectionTimes()["session.initiate"]-this.conference.getConnectionTimes()["muc.joined"])-r;var s;this.conference.getConnectionTimes()[`${e}.ttfm`]=o,zc.info(`(TIME) TTFM ${e}:\\t`,o),Mi.sendAnalytics((s={media_type:e,muted:this.hasBeenMuted,value:o},sn("ttfm",s)))}_attachTTFMTracker(e){Wc&&this.isAudioTrack()||Xc&&this.isVideoTrack()||(this.isAudioTrack()&&(Wc=!0),this.isVideoTrack()&&(Xc=!0),e.addEventListener("canplay",this._playCallback.bind(this)))}_onTrackAttach(e){Yc.forEach((t=>{e.addEventListener(t,this._containerHandlers[t])}))}_onTrackDetach(e){Yc.forEach((t=>{e.removeEventListener(t,this._containerHandlers[t])}))}_containerEventHandler(e){zc.debug(`${e} handler was called for a container with attached ${this}`)}_getStatus(){const{enabled:e,muted:t,readyState:n}=this.track;return`readyState: ${n}, muted: ${t}, enabled: ${e}`}_initTrackStreamingStatus(){const e=this.conference.options.config;this._trackStreamingStatus=Jc.ACTIVE,this._trackStreamingStatusImpl=new Gc(this.rtc,this.conference,this,{p2pRtcMuteTimeout:e._p2pConnStatusRtcMuteTimeout,rtcMuteTimeout:e._peerConnStatusRtcMuteTimeout,outOfForwardedSourcesTimeout:e._peerConnStatusOutOfLastNTimeout}),this._trackStreamingStatusImpl.init(),!this._trackStreamingStatusImpl.isVideoTrackFrozen()&&this.rtc.eventEmitter.emit(Pt,this,this._trackStreamingStatus)}_disposeTrackStreamingStatus(){this._trackStreamingStatusImpl&&(this._trackStreamingStatusImpl.dispose(),this._trackStreamingStatusImpl=null,this._trackStreamingStatus=null)}_setTrackStreamingStatus(e){this._trackStreamingStatus=e}getTrackStreamingStatus(){return this._trackStreamingStatus}_clearEnteredForwardedSourcesTimestamp(){this._enteredForwardedSourcesTimestamp=null}_setEnteredForwardedSourcesTimestamp(e){this._enteredForwardedSourcesTimestamp=e}_getEnteredForwardedSourcesTimestamp(){return this._enteredForwardedSourcesTimestamp}toString(){return`RemoteTrack[userID: ${this.getParticipantId()}, type: ${this.getType()}, ssrc: ${this.getSSRC()}, p2p: ${this.isP2P}, sourceName: ${this._sourceName}, status: {${this._getStatus()}}]`}}let Zc;!function(e){e.L1T3="L1T3",e.L2T3="L2T3",e.L2T3_KEY="L2T3_KEY",e.L3T3="L3T3",e.L3T3_KEY="L3T3_KEY"}(Zc||(Zc={}));const el=(0,E.getLogger)("modules/RTC/TPCUtils.js"),tl=[Ds.AV1,Ds.H264,Ds.VP8,Ds.VP9];class nl{constructor(e){var t;this.pc=e,this.codecSettings=Ss()(Ic);const n=null===(t=this.pc.options)||void 0===t?void 0:t.videoQuality;if(n)for(const e of tl){var i;const t=n[e],r=null!==(i=null==t?void 0:t.maxBitratesVideo)&&void 0!==i?i:n.maxbitratesvideo&&n.maxbitratesvideo[e.toUpperCase()];r&&[...Object.values(Dc),"ssHigh"].forEach((t=>{r[t]&&(this.codecSettings[e].maxBitratesVideo[t]=r[t])})),t&&(this.codecSettings[e].scalabilityModeEnabled&&(void 0===t.scalabilityModeEnabled||t.scalabilityModeEnabled)?(void 0!==t.useSimulcast&&(this.codecSettings[e].useSimulcast=t.useSimulcast),void 0!==t.useKSVC&&(this.codecSettings[e].useKSVC=t.useKSVC)):this.codecSettings[e].scalabilityModeEnabled=!1)}}_calculateActiveEncodingParams(e,t,n){var i,r;const o=this.codecSettings[t].maxBitratesVideo,s=e.getCaptureResolution(),a=n>s?s:n,d=(null===(i=this.pc.options)||void 0===i||null===(r=i.videoQuality)||void 0===r?void 0:r.desktopbitrate)||o.ssHigh,c=e.getVideoType()===Qo.VideoType.DESKTOP;let l=this.codecSettings[t].useKSVC?Zc.L3T3_KEY:Zc.L3T3;const{height:h,level:u}=Pc.find((e=>e.height<=a));let p,m=wc[2].scaleFactor;this._isScreenshareBitrateCapped(e)?(l=Zc.L1T3,p=d):c?p=o.ssHigh:(p=o[u],a&&(m=s/a),h!==a&&el.debug(`Quality level with height=${h} was picked when requested height=${n} fortrack with capture height=${s}`));const g={active:a>0,maxBitrate:p,scalabilityMode:l,scaleResolutionDownBy:m};if(!g.active||c)return g;switch(u){case Dc.ULTRA:case Dc.FULL:case Dc.HIGH:g.scalabilityMode=this.codecSettings[t].useKSVC?Zc.L3T3_KEY:Zc.L3T3;break;case Dc.STANDARD:g.scalabilityMode=this.codecSettings[t].useKSVC?Zc.L2T3_KEY:Zc.L2T3;break;default:g.scalabilityMode=Zc.L1T3}return g}_configureSenderEncodings(e){var t,n;const i=e.getType(),r=null!=e&&e.track&&e.getOriginalStream()?this.pc.peerconnection.getTransceivers().find((t=>{var n,i;return(null===(n=t.sender)||void 0===n||null===(i=n.track)||void 0===i?void 0:i.id)===e.getTrackId()})):this.pc.peerconnection.getTransceivers().find((e=>{var t,n;return(null===(t=e.receiver)||void 0===t||null===(n=t.track)||void 0===n?void 0:n.kind)===i})),o=null==r||null===(t=r.sender)||void 0===t?void 0:t.getParameters();return null!=o&&null!==(n=o.encodings)&&void 0!==n&&n.length?(o.encodings=this._getStreamEncodings(e),r.sender.setParameters(o)):Promise.resolve()}_enableSenderEncodings(e,t){var n;const i=e.getParameters();if(null!=i&&null!==(n=i.encodings)&&void 0!==n&&n.length)for(const e of i.encodings)e.active=t;return e.setParameters(i)}_getStreamEncodings(e){if(e.isAudioTrack())return[{active:this.pc.audioTransferActive}];const t=this.pc.getConfiguredVideoCodec();return this.pc.isSpatialScalabilityOn()?this._getVideoStreamEncodings(e,t):[{active:this.pc.videoTransferActive,maxBitrate:this.codecSettings[t].maxBitratesVideo.high}]}_getVideoStreamEncodings(e,t){const n=e.getCaptureResolution(),i=this.codecSettings[t].maxBitratesVideo,r=e.getVideoType();let o,s=wc.map((e=>e.scaleFactor));if(r===Qo.VideoType.CAMERA){const{level:e}=Pc.find((e=>e.height<=n));o=i[e],e===Dc.ULTRA?(s[1]=6,s[0]=12):e===Dc.FULL&&(s[1]=3,s[0]=6)}const a=r===Qo.VideoType.DESKTOP?i.ssHigh:o;let d=[i.low,i.standard,a];ci.isFirefox()&&(r===Qo.VideoType.DESKTOP||ci.isVersionLessThan(117))&&(d=d.reverse(),s=s.reverse());const c=[{active:this.pc.videoTransferActive,maxBitrate:d[0],rid:wc[0].rid,scaleResolutionDownBy:s[0]},{active:this.pc.videoTransferActive,maxBitrate:d[1],rid:wc[1].rid,scaleResolutionDownBy:s[1]},{active:this.pc.videoTransferActive,maxBitrate:d[2],rid:wc[2].rid,scaleResolutionDownBy:s[2]}];if(this.codecSettings[t].scalabilityModeEnabled){if(this.codecSettings[t].useSimulcast||t===Ds.H264){for(const e of c)e.scalabilityMode=Zc.L1T3;return c}return[{active:this.pc.videoTransferActive,maxBitrate:d[2],rid:wc[0].rid,scaleResolutionDownBy:s[2],scalabilityMode:this.codecSettings[t].useKSVC?Zc.L3T3_KEY:Zc.L3T3},{active:!1,maxBitrate:0},{active:!1,maxBitrate:0}]}return c}_isRunningInFullSvcMode(e){return(e===Ds.VP9||e===Ds.AV1)&&this.codecSettings[e].scalabilityModeEnabled&&!this.codecSettings[e].useSimulcast}_isScreenshareBitrateCapped(e){return e.getVideoType()===Qo.VideoType.DESKTOP&&this.pc._capScreenshareBitrate&&!ci.isWebKitBased()}_updateSenderEncodings(e,t){var n;const i=e.getParameters();if(null!=i&&null!==(n=i.encodings)&&void 0!==n&&n.length)for(const e of i.encodings)e.active=t;return e.setParameters(i)}addTrack(e,t){const n=e.getTrack();if(t){const t=[];e.getOriginalStream()&&t.push(e.getOriginalStream());const i={direction:As.SENDRECV,streams:t,sendEncodings:[]};ci.isFirefox()||(i.sendEncodings=this._getStreamEncodings(e)),this.pc.peerconnection.addTransceiver(n,i)}else this.pc.peerconnection.addTrack(n)}calculateEncodingsActiveState(e,t,n){const i=e.getCaptureResolution(),r=this._getVideoStreamEncodings(e,t);return r.map((e=>i/e.scaleResolutionDownBy)).map(((i,o)=>{let s=!1;if(!this.pc.videoTransferActive)return s;if(!this.pc.isSpatialScalabilityOn()||this._isRunningInFullSvcMode(t)){const{active:i}=this._calculateActiveEncodingParams(e,t,n);return 0===o?i:s}var a;return n>0&&(s=e.getVideoType()===Qo.VideoType.CAMERA?i<=n||(null===(a=r[o])||void 0===a?void 0:a.scaleResolutionDownBy)===wc[0].scaleFactor:r[o].scaleResolutionDownBy===wc[2].scaleFactor||!this._isScreenshareBitrateCapped(e)),s}))}calculateEncodingsBitrates(e,t,n){var i,r;const o=this.codecSettings[t].maxBitratesVideo,s=(null===(i=this.pc.options)||void 0===i||null===(r=i.videoQuality)||void 0===r?void 0:r.desktopbitrate)||o.ssHigh;return this._getVideoStreamEncodings(e,t).map(((i,r)=>{let o=i.maxBitrate;if(!this.pc.isSpatialScalabilityOn()||this._isRunningInFullSvcMode(t)){const{maxBitrate:i}=this._calculateActiveEncodingParams(e,t,n);return 0===r?i:0}return this._isScreenshareBitrateCapped(e)&&(o=s),o}))}calculateEncodingsScalabilityMode(e,t,n){if(!this.pc.isSpatialScalabilityOn()||!this.codecSettings[t].scalabilityModeEnabled)return;const i=[Zc.L1T3,Zc.L1T3,Zc.L1T3];if(this._isRunningInFullSvcMode(t)){const{scalabilityMode:r}=this._calculateActiveEncodingParams(e,t,n);return i[0]=r,i[1]=void 0,i[2]=void 0,i}return i}calculateEncodingsScaleFactor(e,t,n){if(this.pc.isSpatialScalabilityOn()&&this.isRunningInSimulcastMode(t))return this._getVideoStreamEncodings(e,t).map((e=>e.scaleResolutionDownBy));const{scaleResolutionDownBy:i}=this._calculateActiveEncodingParams(e,t,n);return[i,void 0,void 0]}ensureCorrectOrderOfSsrcs(e){const t=Ps.parse(e.sdp);return t.media.forEach((e=>{if(e.type===Ri.AUDIO)return;if(!e.ssrcGroups||!e.ssrcGroups.length)return;let t=[];const n=new Set;e.ssrcGroups.map((e=>e.ssrcs.split(" ").filter(Boolean).forEach((e=>n.add(e))))),n.forEach((n=>{const i=e.ssrcs.filter((e=>e.id.toString()===n));t=t.concat(i)})),e.ssrcs=t})),new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})}insertUnifiedPlanSimulcastReceive(e){if(ci.usesSdpMungingForSimulcast())return e;const t=[{id:wc[0].rid,direction:"recv"},{id:wc[1].rid,direction:"recv"},{id:wc[2].rid,direction:"recv"}],n=`recv ${t.map((e=>e.id)).join(";")}`,i=Ps.parse(e.sdp),r=i.media.filter((e=>e.type===Ri.VIDEO)),o=Array.from(this.pc._localTrackTransceiverMids.values());return r.forEach(((e,i)=>{o.find((t=>e.mid.toString()===t.toString()))||0===i?e.simulcast_03&&e.simulcast||(e.rids=t,e.simulcast_03={value:n}):(e.rids=void 0,e.simulcast=void 0,e.simulcast_03=void 0)})),new RTCSessionDescription({type:e.type,sdp:Ps.write(i)})}isRunningInSimulcastMode(e){return e===Ds.VP8||!this.codecSettings[e].scalabilityModeEnabled&&e===Ds.VP9||this.codecSettings[e].scalabilityModeEnabled&&(e===Ds.H264||this.codecSettings[e].useSimulcast)}replaceTrack(e,t){var n,i;const r=null!==(n=null==t?void 0:t.getType())&&void 0!==n?n:null==e?void 0:e.getType(),o=this.pc.getLocalTracks(r),s=null!==(i=null==t?void 0:t.getTrack())&&void 0!==i?i:null,a=(null==o?void 0:o.length)&&!e&&t&&!o.find((e=>e===t));let d;if(e&&!e.isMuted())d=this.pc.peerconnection.getTransceivers().find((t=>t.sender.track===e.getTrack()));else if(a)d=this.pc.peerconnection.getTransceivers().find((e=>e.receiver.track.kind===r&&e.direction===As.RECVONLY&&(this.pc.isP2P&&e.currentDirection===As.RECVONLY||e.currentDirection===As.INACTIVE&&!e.stopped)));else{var c;d=this.pc.peerconnection.getTransceivers().find((e=>e.receiver.track.kind===r));const n=null!==(c=null==t?void 0:t.getSourceName())&&void 0!==c?c:null==e?void 0:e.getSourceName();if(n){const t=Rc(n);if(this.pc.isP2P)d=this.pc.peerconnection.getTransceivers().filter((e=>e.receiver.track.kind===r))[t];else if(e){const t=this.pc._localTrackTransceiverMids.get(e.rtcId);d=this.pc.peerconnection.getTransceivers().find((e=>e.mid===t))}else t&&(d=this.pc.peerconnection.getTransceivers().filter((e=>e.receiver.track.kind===r&&e.direction!==As.RECVONLY))[t])}}return d?(el.debug(`${this.pc} Replacing ${e} with ${t}`),d.sender.replaceTrack(s).then((()=>Promise.resolve(d)))):Promise.reject(new Error(`Replace track failed - no transceiver for old: ${e}, new: ${t}`))}setEncodings(e){return e.getType()===Ri.VIDEO?this.pc._updateVideoSenderParameters((()=>this._configureSenderEncodings(e))):this._configureSenderEncodings(e)}setMediaTransferActive(e,t){el.info(`${this.pc} ${e?"Resuming":"Suspending"} media transfer.`);const n=this.pc.peerconnection.getSenders().filter((e=>Boolean(e.track)&&(!t||e.track.kind===t))),i=[];for(const t of n)t.track.kind===Ri.VIDEO?i.push(this.pc._updateVideoSenderParameters((()=>this._enableSenderEncodings(t,e)))):i.push(this._enableSenderEncodings(t,e));return Promise.allSettled(i).then((e=>{const t=e.filter((e=>"rejected"===e.status)).map((e=>e.reason));return t.length?Promise.reject(new Error(`Failed to change encodings on the RTCRtpSenders${t.join(" ")}`)):Promise.resolve()}))}}const il=(0,E.getLogger)("modules/RTC/TraceablePeerConnection.js"),rl="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function ol(e,t,n,i,r,o,s){this.audioTransferActive=!(!0===s.startSilent),this._dtmfSender=void 0,this._dtmfTonesQueue=[],this.videoTransferActive=!0,this.rtc=e,this.id=t,this.isP2P=o,this.remoteTracks=new Map,this.localTracks=new Map,this.localSSRCs=new Map,this.remoteSSRCs=new Set,this.remoteSources=new Map,this.localUfrag=null,this.remoteUfrag=null,this._dtlsTransport=null,this.signalingLayer=n,this._peerVideoTypeChanged=this._peerVideoTypeChanged.bind(this),this.signalingLayer.on(Ec,this._peerVideoTypeChanged),this._peerMutedChanged=this._peerMutedChanged.bind(this),this.signalingLayer.on(yc,this._peerMutedChanged),this.options=s,this.signalingLayer.on(Sc,((e,t)=>this._sourceMutedChanged(e,t))),this.signalingLayer.on(Tc,((e,t)=>this._sourceVideoTypeChanged(e,t)));const a=r||{};a.optional=a.optional||[],Array.isArray(a.optional)?a.optional.push({rtcStatsSFUP2P:this.isP2P}):il.warn("Optional param is not an array, rtcstats p2p data is omitted."),this.peerconnection=new RTCPeerConnection(i,a),this.tpcUtils=new nl(this),this.updateLog=[],this.stats={},this.statsinterval=null,this._capScreenshareBitrate=this.options.capScreenshareBitrate,this.codecSettings=this.options.codecSettings,ci.supportsCodecPreferences()&&il.info("Using RTCRtpTransceiver#setCodecPreferences for codec selection"),this._hasHadAudioTrack=!1,this._hasHadVideoTrack=!1,this.maxstats=s.maxstats,this.interop=new vc,this.simulcast=new $c,this.localSdpMunger=new jc(this,this.rtc.getLocalEndpointId()),this.eventEmitter=e.eventEmitter,this.rtxModifier=new Hc,this._senderMaxHeights=new Map,this._supportsDDHeaderExt=!1,this._localTrackTransceiverMids=new Map,this.trace=(e,t)=>{il.trace(e,t),this.updateLog.push({time:new Date,type:e,value:t||""})},this.onicecandidate=null,this.peerconnection.onicecandidate=e=>{this.trace("onicecandidate",JSON.stringify(e.candidate,null," ")),null!==this.onicecandidate&&this.onicecandidate(e)},this.onTrack=e=>{const t=e.streams[0];this._remoteTrackAdded(t,e.track,e.transceiver),t.addEventListener("removetrack",(e=>{this._remoteTrackRemoved(t,e.track)}))},this.peerconnection.addEventListener("track",this.onTrack),this.onsignalingstatechange=null,this.peerconnection.onsignalingstatechange=e=>{this.trace("onsignalingstatechange",this.signalingState),null!==this.onsignalingstatechange&&this.onsignalingstatechange(e)},this.oniceconnectionstatechange=null,this.peerconnection.oniceconnectionstatechange=e=>{this.trace("oniceconnectionstatechange",this.iceConnectionState),null!==this.oniceconnectionstatechange&&this.oniceconnectionstatechange(e)},this.onnegotiationneeded=null,this.peerconnection.onnegotiationneeded=e=>{this.trace("onnegotiationneeded"),null!==this.onnegotiationneeded&&this.onnegotiationneeded(e)},this.onconnectionstatechange=null,this.peerconnection.onconnectionstatechange=e=>{this.trace("onconnectionstatechange",this.connectionState),null!==this.onconnectionstatechange&&this.onconnectionstatechange(e)},this.ondatachannel=null,this.peerconnection.ondatachannel=e=>{this.trace("ondatachannel"),null!==this.ondatachannel&&this.ondatachannel(e)},this.maxstats&&(this.statsinterval=window.setInterval((()=>{this.getStats().then((e=>{if("function"==typeof(null==e?void 0:e.result)){const t=e.result();for(let e=0;e{this._processStat(n,e,n.stat(e))}))}}else e.forEach((e=>this._processStat(e,"",e)))}))}),1e3)),this._lastVideoSenderUpdatePromise=Promise.resolve(),il.info(`Create new ${this}`)}ol.prototype._processStat=function(e,t,n){const i=`${e.id}-${t}`;let r=this.stats[i];const o=new Date;r||(this.stats[i]=r={startTime:o,endTime:o,values:[],times:[]}),r.values.push(n),r.times.push(o.getTime()),r.values.length>this.maxstats&&(r.values.shift(),r.times.shift()),r.endTime=o};const sl=function(e){return null==e?"":`type: ${e.type}\\r\\n${e.sdp}`};ol.prototype.getConnectionState=function(){const e=this.peerconnection.iceConnectionState;return"completed"===e?"connected":e},ol.prototype.getDesiredMediaDirection=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=this.hasAnyTracksOfType(e);return t?n?As.SENDRECV:As.SENDONLY:n?As.RECVONLY:As.INACTIVE},ol.prototype._getReceiversByEndpointIds=function(e,t){let n=[],i=[];for(const i of e)n=n.concat(this.getRemoteTracks(i,t));const r=n.map((e=>{var t;return null===(t=e.track)||void 0===t?void 0:t.id}));return i=this.peerconnection.getReceivers().filter((e=>e.track&&e.track.kind===t&&r.find((t=>t===e.track.id)))),i},ol.prototype.isSpatialScalabilityOn=function(){const e=this.tpcUtils.codecSettings[Ds.H264].scalabilityModeEnabled&&this._supportsDDHeaderExt;return!this.options.disableSimulcast&&(this.codecSettings.codecList[0]!==Ds.H264||e)},ol.prototype._peerVideoTypeChanged=function(e,t){if(!e)return void il.error(`${this} No endpointID on peerVideoTypeChanged`);const n=this.getRemoteTracks(e,Ri.VIDEO);n.length&&n[0]._setVideoType(t)},ol.prototype._peerMutedChanged=function(e,t,n){if(!e)return void il.error(`${this} On peerMuteChanged - no endpoint ID`);const i=this.getRemoteTracks(e,t);i.length&&i[0].setMute(n)},ol.prototype._sourceMutedChanged=function(e,t){const n=this.getRemoteTracks().find((t=>t.getSourceName()===e));n?n.setMute(t):Ai.isSsrcRewritingSupported()&&il.debug(`Remote track not found for source=${e}, mute update failed!`)},ol.prototype._sourceVideoTypeChanged=function(e,t){const n=this.getRemoteTracks().find((t=>t.getSourceName()===e));n&&n._setVideoType(t)},ol.prototype.getAudioLevels=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const t={};return(e.length?this._getReceiversByEndpointIds(e,Ri.AUDIO):this.peerconnection.getReceivers().filter((e=>e.track&&e.track.kind===Ri.AUDIO&&e.track.enabled))).forEach((e=>{const n=e.getSynchronizationSources();n&&n.length&&(t[n[0].source]=n[0].audioLevel)})),t},ol.prototype.doesTrueSimulcast=function(){const e=this.getConfiguredVideoCodec();return this.isSpatialScalabilityOn()&&this.tpcUtils.isRunningInSimulcastMode(e)},ol.prototype.getLocalVideoSSRCs=function(e){var t,n,i;const r=[];if(!e||!e.isVideoTrack())return r;const o=this.isSpatialScalabilityOn()?"SIM":"FID";return(null===(t=this.localSSRCs.get(e.rtcId))||void 0===t||null===(n=t.groups)||void 0===n||null===(i=n.find((e=>e.semantics===o)))||void 0===i?void 0:i.ssrcs)||r},ol.prototype.getLocalTracks=function(e){let t=Array.from(this.localTracks.values());return void 0!==e&&(t=t.filter((t=>t.getType()===e))),t},ol.prototype.getLocalVideoTracks=function(){return this.getLocalTracks(Ri.VIDEO)},ol.prototype.hasAnyTracksOfType=function(e){if(!e)throw new Error(\'"mediaType" is required\');return this.getLocalTracks(e).length>0},ol.prototype.getRemoteTracks=function(e,t){let n=[];const i=e?[e]:this.remoteTracks.keys();for(const e of i){const i=this.remoteTracks.get(e);if(i)for(const e of i.keys())t&&t!==e||(n=n.concat(Array.from(i.get(e))))}return n},ol.prototype.getRemoteSourceInfoByParticipant=function(e){const t=[],n=this.getRemoteTracks(e);if(null==n||!n.length)return t;const i=n.map((e=>e.getSSRC())),r=new Ms(this.remoteDescription.sdp);return i.forEach(((e,n)=>{for(const i of r.media){let r="",o=Ns.findLines(i,`a=ssrc:${e}`);if(o.length){t[n]||(t[n]="");const s=Ns.findLines(i,`a=ssrc-group:FID ${e}`);if(s.length){const e=s[0].split(" ")[2];r+=`${s[0]}\\r\\n`,o=o.concat(Ns.findLines(i,`a=ssrc:${e}`))}t[n]+=`${o.join("\\r\\n")}\\r\\n`,t[n]+=r}}})),t},ol.prototype.getTargetVideoBitrates=function(){const e=this.getConfiguredVideoCodec();return this.tpcUtils.codecSettings[e].maxBitratesVideo},ol.prototype.getTrackBySSRC=function(e){if("number"!=typeof e)throw new Error(`SSRC ${e} is not a number`);for(const t of this.localTracks.values())if(this.getLocalSSRC(t)===e)return t;for(const t of this.getRemoteTracks())if(t.getSSRC()===e)return t;return null},ol.prototype.getSsrcByTrackId=function(e){const t=t=>t.getTrack().id===e,n=this.getLocalTracks().find(t);if(n)return this.getLocalSSRC(n);const i=this.getRemoteTracks().find(t);return i?i.getSSRC():null},ol.prototype._remoteTrackAdded=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;const i=e.id,r=t.kind;if(!this.isP2P&&!nc.isUserStreamById(i))return;if(il.info(`${this} Received track event for remote stream[id=${i},type=${r}]`),!r)return void il.error(`MediaType undefined for remote track, stream id: ${i}, track creation failed!`);const o=new Ms(this.peerconnection.remoteDescription.sdp);let s;if(null!=n&&n.mid){const e=n.mid;s=o.media.find((t=>Ns.findLine(t,`a=mid:${e}`)))}else s=o.media.find((e=>{const t=Ns.findLine(e,"a=msid:");return"string"==typeof t&&i===t.substring(7).split(" ")[0]}));if(!s)return void il.error(`Matching media line not found in remote SDP for remote stream[id=${i},type=${r}],track creation failed!`);let a=Ns.findLines(s,"a=ssrc:");if(a=a.filter((e=>-1!==e.indexOf(`msid:${i}`))),!a.length)return void il.error(`No SSRC lines found in remote SDP for remote stream[msid=${i},type=${r}]track creation failed!`);const d=a[0].substring(7).split(" ")[0],c=Number(d),l=this.signalingLayer.getSSRCOwner(c);if(isNaN(c)||c<0)return void il.error(`Invalid SSRC for remote stream[ssrc=${c},id=${i},type=${r}]track creation failed!`);if(!l)return void il.error(`No SSRC owner known for remote stream[ssrc=${c},id=${i},type=${r}]track creation failed!`);const h=this.signalingLayer.getTrackSourceName(c),u=this.signalingLayer.getPeerMediaInfo(l,r,h);let p=!0,m=r===Ri.VIDEO?Qo.VideoType.CAMERA:void 0;u?(p=u.muted,m=u.videoType):il.info(`${this}: no source-info available for ${l}:${h}, assuming default state`),this._createRemoteTrack(l,e,t,r,m,c,p,h)},ol.prototype._createRemoteTrack=function(e,t,n,i,r,o,s,a){il.info(`${this} creating remote track[endpoint=${e},ssrc=${o},type=${i},sourceName=${a}]`);let d=this.remoteTracks.get(e);d||(d=new Map,d.set(Ri.AUDIO,new Set),d.set(Ri.VIDEO,new Set),this.remoteTracks.set(e,d));const c=d.get(i);if(null!=c&&c.size&&Array.from(c).find((e=>e.getTrack()===n)))return void il.info(`${this} ignored duplicated track event for track[endpoint=${e},type=${i}]`);const l=new Qc(this.rtc,this.rtc.conference,e,t,n,i,r,o,s,this.isP2P,a);c.add(l),this.eventEmitter.emit(ji.default.REMOTE_TRACK_ADDED,l,this)},ol.prototype._remoteTrackRemoved=function(e,t){const n=e.id,i=null==t?void 0:t.id;if(!nc.isUserStreamById(n))return;if(!n)return void il.error(`${this} remote track removal failed - no stream ID`);if(!i)return void il.error(`${this} remote track removal failed - no track ID`);const r=this.getRemoteTracks().find((e=>e.getStreamId()===n&&e.getTrackId()===i));r?this._removeRemoteTrack(r):il.error(`${this} remote track removal failed - track not found`)},ol.prototype.removeRemoteTracks=function(e){let t=[];const n=this.remoteTracks.get(e);return n&&(t=t.concat(Array.from(n.get(Ri.AUDIO))),t=t.concat(Array.from(n.get(Ri.VIDEO))),this.remoteTracks.delete(e)),il.debug(`${this} removed remote tracks[endpoint=${e},count=${t.length}`),t},ol.prototype._removeRemoteTrack=function(e){var t;il.info(`${this} Removing remote track stream[id=${e.getStreamId()},trackId=${e.getTrackId()}]`),e.dispose();const n=e.getParticipantId();if(!n&&Ai.isSsrcRewritingSupported())return;const i=this.remoteTracks.get(n);i?null!==(t=i.get(e.getType()))&&void 0!==t&&t.delete(e)||il.error(`${this} Failed to remove ${e} - type mapping messed up ?`):il.error(`${this} removeRemoteTrack: no remote tracks map for endpoint=${n}`),this.eventEmitter.emit(ji.default.REMOTE_TRACK_REMOVED,e)},ol.prototype._extractSSRCMap=function(e){const t=new Map,n=new Map;if("object"!=typeof e||null===e||"string"!=typeof e.sdp)return il.warn("An empty description was passed as an argument"),t;const i=Ps.parse(e.sdp);if(!Array.isArray(i.media))return t;let r=i.media;r=r.filter((e=>e.direction===As.SENDONLY||e.direction===As.SENDRECV));let o=0;for(const e of r){if(!Array.isArray(e.ssrcs))continue;if(Array.isArray(e.ssrcGroups)){for(const t of e.ssrcGroups)if(void 0!==t.semantics&&void 0!==t.ssrcs){const e=t.ssrcs.split(" ").map((e=>parseInt(e,10))),i=e[0];t.ssrcs=e,n.has(i)||n.set(i,[]),n.get(i).push(t)}if(!e.ssrcGroups.find((e=>"SIM"===e.semantics))){const t=e.ssrcGroups.map((e=>e.ssrcs[0]));n.get(t[0]).push({semantics:"SIM",ssrcs:t})}}let i=e.ssrcs;i=i.filter((e=>"cname"===e.attribute));for(const r of i){const i=`${e.type}-${o}`,s=r.id;let a=t.get(i);if(a||(a={ssrcs:[],groups:[],msid:i},t.set(i,a)),a.ssrcs.push(s),n.has(s)){const e=n.get(s);for(const t of e)a.groups.push(t)}}e.type===Ri.VIDEO&&o++}return t},ol.prototype.getLocalSSRC=function(e){const t=this._getSSRC(e.rtcId);return t&&t.ssrcs[0]},ol.prototype._injectSsrcGroupForUnifiedSimulcast=function(e){const t=Ps.parse(e.sdp),n=t.media.find((e=>"video"===e.type));n.ssrcGroups=n.ssrcGroups||[];const i=n.ssrcGroups.filter((e=>"FID"===e.semantics));if(n.simulcast||n.simulcast_03){const t=[];if(i&&i.length?i.forEach((e=>{t.push(e.ssrcs.split(" ")[0])})):n.ssrcs.forEach((e=>{"msid"===e.attribute&&t.push(e.id)})),n.ssrcGroups.find((e=>"SIM"===e.semantics)))return e;for(let e=0;e{Object.defineProperty(ol.prototype,e,{get:al[e]})})),ol.prototype._getSSRC=function(e){return this.localSSRCs.get(e)},ol.prototype.isSharingLowFpsScreen=function(){return this._isSharingScreen()&&this._capScreenshareBitrate},ol.prototype._isSharingScreen=function(){const e=this.getLocalVideoTracks();return Boolean(e.find((e=>e.videoType===Qo.VideoType.DESKTOP)))},ol.prototype._mungeCodecOrder=function(e){if(!this.codecSettings)return e;const t=Ps.parse(e.sdp),n=t.media.filter((e=>e.type===this.codecSettings.mediaType));if(!n.length)return e;for(const t of n){const n=this.getConfiguredVideoCodecs(e);for(const e of n)this.isP2P&&(e!==Ds.H264&&e!==Ds.VP9||Ns.stripCodec(t,e,!0),e!==Ds.ULPFEC&&e!==Ds.RED||Ns.stripCodec(t,e,!1));for(const e of this.codecSettings.codecList.slice().reverse())Ns.preferCodec(t,e,this.isP2P)}return new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})},ol.prototype._updateAv1DdHeaders=function(e){const t=Ps.parse(e.sdp),n=t.media.filter((e=>e.type===Ri.VIDEO));return n.length&&ci.supportsDDExtHeaders()?(n.forEach(((e,t)=>{var n;const i=Array.from(this._localTrackTransceiverMids.values()),r=i.length?i.find((t=>e.mid.toString()===t.toString())):0===t,o=e.payloads.split(" ")[0];let{codec:s}=e.rtp.find((e=>e.payload===Number(o)));if(s=s.toLowerCase(),r&&null!==(n=e.ext)&&void 0!==n&&n.length){const t=e.ext.findIndex((e=>e.uri===rl)),n=s===Ds.AV1||s===Ds.H264;!this._supportsDDHeaderExt&&t>=0&&(this._supportsDDHeaderExt=!0),this._supportsDDHeaderExt&&n&&t<0?e.ext.push({value:11,uri:rl}):!n&&t>=0&&e.ext.splice(t,1)}})),new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})):e},ol.prototype.addTrack=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=e.rtcId;if(il.info(`${this} adding ${e}`),this.localTracks.has(n))return Promise.reject(new Error(`${e} is already in ${this}`));this.localTracks.set(n,e);const i=e.getOriginalStream();try{this.tpcUtils.addTrack(e,t),e&&(e.isAudioTrack()?this._hasHadAudioTrack=!0:this._hasHadVideoTrack=!0)}catch(t){return il.error(`${this} Adding track=${e} failed: ${null==t?void 0:t.message}`),Promise.reject(t)}let r=Promise.resolve();return ci.isFirefox()&&(r=r.then((()=>i&&this.tpcUtils.setEncodings(e)))),r},ol.prototype.addTrackToPc=function(e){return il.info(`${this} Adding track=${e} to PC`),this._assertTrackBelongs("addTrackToPc",e)?e.getOriginalStream()?this.tpcUtils.replaceTrack(null,e).then((()=>(e&&(e.isAudioTrack()?this._hasHadAudioTrack=!0:this._hasHadVideoTrack=!0),!1))):(il.error(`${this} Unable to add track=${e} to PC - no WebRTC stream`),Promise.reject("Stream not found")):Promise.reject("Track not found on the peerconnection")},ol.prototype._assertTrackBelongs=function(e,t){const n=this.localTracks.has(null==t?void 0:t.rtcId);return n||il.error(`${this} ${e}: track=${t} does not belong to pc`),n},ol.prototype.getConfiguredVideoCodec=function(){var e;const t=null===(e=this.peerconnection.remoteDescription)||void 0===e?void 0:e.sdp,n=Ds.VP8;if(!t)return n;const i=Ps.parse(t).media.find((e=>e.type===Ri.VIDEO)),r=i.payloads.split(" ")[0],{codec:o}=i.rtp.find((e=>e.payload===Number(r)));return o?Object.values(Ds).find((e=>e===o.toLowerCase())):n},ol.prototype.getConfiguredVideoCodecs=function(e){var t,n;const i=null!==(t=null==e?void 0:e.sdp)&&void 0!==t?t:null===(n=this.peerconnection.localDescription)||void 0===n?void 0:n.sdp;if(!i)return[];const r=Ps.parse(i).media.find((e=>e.type===Ri.VIDEO)),o=new Set(r.rtp.filter((e=>"rtx"!==e.codec.toLowerCase())).map((e=>e.codec.toLowerCase())));return Array.from(o)},ol.prototype.isVideoCodecDisabled=function(e){var t;const n=null===(t=this.peerconnection.localDescription)||void 0===t?void 0:t.sdp;return!!n&&!Ps.parse(n).media.find((e=>e.type===Ri.VIDEO)).rtp.find((t=>t.codec===e))},ol.prototype.setDesktopSharingFrameRate=function(e){const t=e<=5;this._capScreenshareBitrate=this.isSpatialScalabilityOn()&&t},ol.prototype.setVideoCodecs=function(e){this.codecSettings&&null!=e&&e.length&&(this.codecSettings.codecList=e)},ol.prototype.removeTrack=function(e){const t=e.getOriginalStream();this.trace("removeStream",e.rtcId,t?t.id:void 0),this._assertTrackBelongs("removeStream",e)&&(this.localTracks.delete(e.rtcId),this.localSSRCs.delete(e.rtcId),t&&this.peerconnection.removeStream(t))},ol.prototype.findSenderByKind=function(e){if(this.peerconnection.getSenders)return this.peerconnection.getSenders().find((t=>t.track&&t.track.kind===e))},ol.prototype.findReceiverForTrack=function(e){return this.peerconnection.getReceivers().find((t=>t.track===e))},ol.prototype.findSenderForTrack=function(e){if(this.peerconnection.getSenders)return this.peerconnection.getSenders().find((t=>t.track===e))},ol.prototype.processLocalSdpForTransceiverInfo=function(e){var t;const n=null===(t=this.peerconnection.localDescription)||void 0===t?void 0:t.sdp;n&&[Ri.AUDIO,Ri.VIDEO].forEach((t=>{const i=e.filter((e=>e.getType()===t)),r=Ps.parse(n).media.filter((e=>e.type===t));i.forEach(((e,t)=>{this._localTrackTransceiverMids.has(e.rtcId)||this._localTrackTransceiverMids.set(e.rtcId,r[t].mid.toString())}))}))},ol.prototype.replaceTrack=function(e,t){return e||t?(il.info(`${this} TPC.replaceTrack old=${e}, new=${t}`),this.tpcUtils.replaceTrack(e,t).then((n=>{var i;if(e&&(this.localTracks.delete(e.rtcId),this._localTrackTransceiverMids.delete(e.rtcId)),t&&(t.isAudioTrack()?this._hasHadAudioTrack=!0:this._hasHadVideoTrack=!0,this._localTrackTransceiverMids.set(t.rtcId,null==n||null===(i=n.mid)||void 0===i?void 0:i.toString()),this.localTracks.set(t.rtcId,t)),e&&t){const n=this.localSSRCs.get(e.rtcId);n&&(this.localSSRCs.delete(e.rtcId),this.localSSRCs.set(t.rtcId,n))}return n&&(n.direction=t||ci.isFirefox()?As.SENDRECV:As.RECVONLY),(!t||t.getType()===Ri.VIDEO&&ci.usesSdpMungingForSimulcast()?Promise.resolve():this.tpcUtils.setEncodings(t)).then((()=>this.isP2P))}))):(il.info(`${this} replaceTrack called with no new track and no old track`),Promise.resolve())},ol.prototype.removeTrackFromPc=function(e){const t=e.getOriginalStream();return this.trace("removeTrack",e.rtcId,t?t.id:null),this._assertTrackBelongs("removeTrack",e)?this.tpcUtils.replaceTrack(e,null).then((()=>!1)):Promise.reject("Track not found in the peerconnection")},ol.prototype.createDataChannel=function(e,t){return this.trace("createDataChannel",e,t),this.peerconnection.createDataChannel(e,t)},ol.prototype._adjustRemoteMediaDirection=function(e){const t=new Lc(e.sdp);return[Ri.AUDIO,Ri.VIDEO].forEach((e=>{const n=t.selectMedia(e),i=this.getLocalTracks(e).length,r=this.getRemoteTracks(null,e).length;n.forEach(((e,t)=>{e.direction=i&&i===r?As.SENDRECV:i||r?i?r?i>r?t?As.RECVONLY:As.SENDRECV:t?As.SENDONLY:As.SENDRECV:As.RECVONLY:As.SENDONLY:As.INACTIVE}))})),new RTCSessionDescription({type:e.type,sdp:t.toRawSDP()})},ol.prototype._mungeOpus=function(e){const{audioQuality:t}=this.options;if(!(null!=t&&t.enableOpusDtx||null!=t&&t.stereo||null!=t&&t.opusMaxAverageBitrate))return e;const n=Ps.parse(e.sdp),i=n.media;for(const e of i)if("audio"===e.type){const{payload:n}=e.rtp.find((e=>e.codec===Ds.OPUS));if(!n)continue;let i=e.fmtp.find((e=>e.payload===n));i||(i={payload:n,config:""});const r=Ps.parseParams(i.config);let o=!1;if(null!=t&&t.stereo&&(r.stereo=1,o=!0),null!=t&&t.opusMaxAverageBitrate&&(r.maxaveragebitrate=t.opusMaxAverageBitrate,o=!0),!ci.isFirefox()&&null!=t&&t.enableOpusDtx&&(r.usedtx=1,o=!0),!o)continue;let s="";for(const e of Object.keys(r))s+=`${e}=${r[e]}; `;i.config=s.trim()}return new RTCSessionDescription({type:e.type,sdp:Ps.write(n)})},ol.prototype._mungeInactive=function(e){const t=Ps.parse(e.sdp),n=t.media;for(const e of n)e.direction=As.INACTIVE,e.ssrcs=void 0,e.ssrcGroups=void 0;return new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})},ol.prototype._initializeDtlsTransport=function(){if(!this.peerconnection.getSenders||this._dtlsTransport)return;const e=this.peerconnection.getSenders();0!==e.length&&e[0].transport&&(this._dtlsTransport=e[0].transport,this._dtlsTransport.onerror=e=>{il.error(`${this} DtlsTransport error: ${e}`)},this._dtlsTransport.onstatechange=()=>{this.trace("dtlsTransport.onstatechange",this._dtlsTransport.state)})},ol.prototype._setMaxBitrates=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.codecSettings)return e;const n=Ps.parse(e.sdp),i=t?As.RECVONLY:As.SENDONLY,r=n.media.filter((e=>e.type===Ri.VIDEO&&e.direction!==i)),o=this.codecSettings.codecList[0],s=this.tpcUtils.codecSettings[o];for(const e of r){const t=o===Ds.VP9&&!s.scalabilityModeEnabled,n=this.getLocalVideoTracks().find((t=>this._localTrackTransceiverMids.get(t.rtcId)===e.mid.toString()));if((t||this.tpcUtils._isRunningInFullSvcMode(o))&&n){let t;if(n.getVideoType()===Qo.VideoType.DESKTOP)t=s.maxBitratesVideo.ssHigh;else{const{level:e}=Pc.find((e=>e.height<=n.getCaptureResolution()));t=s.maxBitratesVideo[e]}const i=Math.floor(t/1e3);e.bandwidth=[{type:"AS",limit:i}]}else e.bandwidth=void 0}return new RTCSessionDescription({type:e.type,sdp:Ps.write(n)})},ol.prototype.configureAudioSenderEncodings=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(e)return this.tpcUtils.setEncodings(e);const t=[];for(const e of this.getLocalTracks(Ri.AUDIO))t.push(this.tpcUtils.setEncodings(e));return Promise.allSettled(t)},ol.prototype.configureVideoSenderEncodings=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(e)return this.setSenderVideoConstraints(this._senderMaxHeights.get(e.getSourceName()),e);const t=[];for(const e of this.getLocalVideoTracks()){var n;const i=null!==(n=this._senderMaxHeights.get(e.getSourceName()))&&void 0!==n?n:Pc[0].height;t.push(this.setSenderVideoConstraints(i,e))}return Promise.allSettled(t)},ol.prototype.setLocalDescription=function(e){let t=e;return this.trace("setLocalDescription::preTransform",sl(t)),t=this._mungeOpus(t),t=this._mungeCodecOrder(t),t=this._setMaxBitrates(t,!0),t=this._updateAv1DdHeaders(t),this.trace("setLocalDescription::postTransform",sl(t)),new Promise(((e,n)=>{this.peerconnection.setLocalDescription(t).then((()=>{this.trace("setLocalDescriptionOnSuccess");const n=Ns.getUfrag(t.sdp);n!==this.localUfrag&&(this.localUfrag=n,this.eventEmitter.emit(ji.default.LOCAL_UFRAG_CHANGED,this,n)),this._initializeDtlsTransport(),e()}),(e=>{this.trace("setLocalDescriptionOnFailure",e),this.eventEmitter.emit(ji.default.SET_LOCAL_DESCRIPTION_FAILED,e,this),n(e)}))}))},ol.prototype.setRemoteDescription=function(e){let t=e;if(this.trace("setRemoteDescription::preTransform",sl(e)),t=this._mungeOpus(t),!this.isP2P){const e=this.peerconnection.remoteDescription;t=this.interop.toUnifiedPlan(t,e),this.trace("setRemoteDescription::postTransform (Unified)",sl(t))}return this.isSpatialScalabilityOn()&&(t=this.tpcUtils.insertUnifiedPlanSimulcastReceive(t),this.trace("setRemoteDescription::postTransform (sim receive)",sl(t))),t=this.tpcUtils.ensureCorrectOrderOfSsrcs(t),this.trace("setRemoteDescription::postTransform (correct ssrc order)",sl(t)),t=this._mungeCodecOrder(t),t=this._setMaxBitrates(t),t=this._updateAv1DdHeaders(t),this.trace("setRemoteDescription::postTransform (munge codec order)",sl(t)),new Promise(((e,n)=>{this.peerconnection.setRemoteDescription(t).then((()=>{this.trace("setRemoteDescriptionOnSuccess");const n=Ns.getUfrag(t.sdp);n!==this.remoteUfrag&&(this.remoteUfrag=n,this.eventEmitter.emit(ji.default.REMOTE_UFRAG_CHANGED,this,n)),this._initializeDtlsTransport(),e()}),(e=>{this.trace("setRemoteDescriptionOnFailure",e),this.eventEmitter.emit(ji.default.SET_REMOTE_DESCRIPTION_FAILED,e,this),n(e)}))}))},ol.prototype.setSenderVideoConstraints=function(e,t){if(e<0||isNaN(e))throw new Error(`Invalid frameHeight: ${e}`);if(!t)throw new Error("Local video track is missing");const n=t.getSourceName();return t.isMuted()?(this._senderMaxHeights.set(n,e),Promise.resolve()):this._updateVideoSenderParameters((()=>this._updateVideoSenderEncodings(e,t)))},ol.prototype._updateVideoSenderParameters=function(e){const t=this._lastVideoSenderUpdatePromise.finally(e);return this._lastVideoSenderUpdatePromise=t,t},ol.prototype._updateVideoSenderEncodings=function(e,t){var n;const i=this.findSenderForTrack(t.getTrack());if(!i)return Promise.resolve();const r=i.getParameters();if(null==r||null===(n=r.encodings)||void 0===n||!n.length)return Promise.resolve();const o=t.getVideoType()===Qo.VideoType.DESKTOP&&this._capScreenshareBitrate?"maintain-resolution":"maintain-framerate";r.degradationPreference=o;const s=this.getConfiguredVideoCodec(),a=this.tpcUtils.calculateEncodingsBitrates(t,s,e),d=this.tpcUtils.calculateEncodingsActiveState(t,s,e),c=this.tpcUtils.calculateEncodingsScaleFactor(t,s,e),l=this.tpcUtils.calculateEncodingsScalabilityMode(t,s,e),h=t.getSourceName();let u=!1;for(const e in r.encodings)if(r.encodings.hasOwnProperty(e)){const{active:t,maxBitrate:n,scalabilityMode:i,scaleResolutionDownBy:h}=r.encodings[e];t!==d[e]&&(r.encodings[e].active=d[e],u=!0),ci.isFirefox()&&(r.encodings[e].degradationPreference=o),(s!==Ds.VP9||!this.isSpatialScalabilityOn()||ci.supportsScalabilityModeAPI()&&this.tpcUtils.codecSettings[s].scalabilityModeEnabled)&&(h!==c[e]&&(r.encodings[e].scaleResolutionDownBy=c[e],u=!0),n!==a[e]&&(r.encodings[e].maxBitrate=a[e],u=!0)),l?i!==l[e]&&(r.encodings[e].scalabilityMode=l[e],u=!0):r.encodings[e].scalabilityMode=void 0}return u?(il.info(`${this} setting max height=${e},encodings=${JSON.stringify(r.encodings)}`),i.setParameters(r).then((()=>{this._senderMaxHeights.set(h,e),t.maxEnabledResolution=e,this.eventEmitter.emit(ji.default.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED,t)}))):(this._senderMaxHeights.set(h,e),Promise.resolve())},ol.prototype.setVideoTransferActive=function(e){il.debug(`${this} video transfer active: ${e}`);const t=this.videoTransferActive!==e;return this.videoTransferActive=e,t?this.tpcUtils.setMediaTransferActive(e,Ri.VIDEO):Promise.resolve()},ol.prototype.sendTones=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200;if(!this._dtmfSender){if(this.peerconnection.getSenders){const e=this.peerconnection.getSenders().find((e=>e.dtmf));this._dtmfSender=e&&e.dtmf,this._dtmfSender&&il.info(`${this} initialized DTMFSender using getSenders`)}if(!this._dtmfSender){const e=Array.from(this.localTracks.values()).find((e=>e.isAudioTrack()));this.peerconnection.createDTMFSender&&e&&(this._dtmfSender=this.peerconnection.createDTMFSender(e.getTrack())),this._dtmfSender&&il.info(`${this} initialized DTMFSender using deprecated createDTMFSender`)}this._dtmfSender&&(this._dtmfSender.ontonechange=this._onToneChange.bind(this))}if(this._dtmfSender){if(this._dtmfSender.toneBuffer)return void this._dtmfTonesQueue.push({tones:e,duration:t,interToneGap:n});this._dtmfSender.insertDTMF(e,t,n)}else il.warn(`${this} sendTones - failed to select DTMFSender`)},ol.prototype._onToneChange=function(e){if(this._dtmfSender&&""===e.tone&&this._dtmfTonesQueue.length){const{tones:e,duration:t,interToneGap:n}=this._dtmfTonesQueue.shift();this._dtmfSender.insertDTMF(e,t,n)}},ol.prototype.close=function(){this.trace("stop"),this.signalingLayer.off(yc,this._peerMutedChanged),this.signalingLayer.off(Ec,this._peerVideoTypeChanged),this.peerconnection.removeEventListener("track",this.onTrack);for(const e of this.remoteTracks.values())for(const t of e.values())for(const e of t)this._removeRemoteTrack(e);this.remoteTracks.clear(),this._dtmfSender=null,this._dtmfTonesQueue=[],this.rtc._removePeerConnection(this)||il.error(`${this} rtc._removePeerConnection returned false`),null!==this.statsinterval&&(window.clearInterval(this.statsinterval),this.statsinterval=null),il.info(`${this} Closing peerconnection`),this.peerconnection.close()},ol.prototype.createAnswer=function(e){return this._createOfferOrAnswer(!1,e)},ol.prototype.createOffer=function(e){return this._createOfferOrAnswer(!0,e)},ol.prototype._createOfferOrAnswer=function(e,t){const n=e?"Offer":"Answer";this.trace(`create${n}`,JSON.stringify(t,null," "));const i=(e,t,i)=>{try{this.trace(`create${n}OnSuccess::preTransform`,sl(e)),this.isSpatialScalabilityOn()&&ci.usesSdpMungingForSimulcast()&&(e=this.simulcast.mungeLocalDescription(e),this.trace(`create${n} OnSuccess::postTransform (simulcast)`,sl(e))),!this.options.disableRtx&&ci.usesSdpMungingForSimulcast()&&(e=new RTCSessionDescription({type:e.type,sdp:this.rtxModifier.modifyRtxSsrcs(e.sdp)}),this.trace(`create${n}OnSuccess::postTransform (rtx modifier)`,sl(e)));const i=this._extractSSRCMap(e);this._processLocalSSRCsMap(i),t(e)}catch(t){this.trace(`create${n}OnError`,t),this.trace(`create${n}OnError`,sl(e)),il.error(`${this} create${n}OnError`,t,sl(e)),i(t)}},r=(t,i)=>{this.trace(`create${n}OnFailure`,t);const r=e?ji.default.CREATE_OFFER_FAILED:ji.default.CREATE_ANSWER_FAILED;this.eventEmitter.emit(r,t,this),i(t)};if(ci.supportsCodecPreferences()&&this.codecSettings){var o;const{codecList:e,mediaType:t}=this.codecSettings,n=this.peerconnection.getTransceivers().filter((e=>{var n,i;return e.receiver&&(null===(n=e.receiver)||void 0===n||null===(i=n.track)||void 0===i?void 0:i.kind)===t}));let i=null===(o=RTCRtpReceiver.getCapabilities(t))||void 0===o?void 0:o.codecs;if(n.length&&i){for(const n of e.slice().reverse())i.sort((e=>e.mimeType.toLowerCase()===`${t}/${n}`?-1:1));this.isP2P&&t===Ri.VIDEO&&(i=i.filter((e=>e.mimeType.toLowerCase()!==`${Ri.VIDEO}/${Ds.ULPFEC}`&&e.mimeType.toLowerCase()!==`${Ri.VIDEO}/${Ds.RED}`)));for(const e of n)e.setCodecPreferences(i)}}return new Promise(((n,o)=>{let s;s=e?this.peerconnection.createOffer(t):this.peerconnection.createAnswer(t),s.then((e=>i(e,n,o)),(e=>r(e,o)))}))},ol.prototype._extractPrimarySSRC=function(e){return e&&e.groups&&e.groups.length?e.groups[0].ssrcs[0]:e&&e.ssrcs&&e.ssrcs.length?e.ssrcs[0]:null},ol.prototype._processLocalSSRCsMap=function(e){for(const t of this.localTracks.values()){const n=Rc(t.getSourceName()),i=`${t.getType()}-${n}`;if(e.has(i)){const n=e.get(i);if(!n)return void il.error(`${this} No SSRC found for stream=${i}`);const r=this.localSSRCs.get(t.rtcId),o=this._extractPrimarySSRC(n),s=this._extractPrimarySSRC(r);o!==s&&(s&&il.error(`${this} Overwriting SSRC for track=${t}] with ssrc=${n}`),this.localSSRCs.set(t.rtcId,n),this.eventEmitter.emit(ji.default.LOCAL_TRACK_SSRC_UPDATED,t,o))}else t.isVideoTrack()||t.isMuted()||il.warn(`${this} No SSRCs found in the local SDP for track=${t}, stream=${i}`)}},ol.prototype.addRemoteSsrc=function(e){const t=this.remoteSSRCs.has(e);return t||this.remoteSSRCs.add(e),!t},ol.prototype.addIceCandidate=function(e){return this.trace("addIceCandidate",JSON.stringify({candidate:e.candidate,sdpMid:e.sdpMid,sdpMLineIndex:e.sdpMLineIndex,usernameFragment:e.usernameFragment},null," ")),this.peerconnection.addIceCandidate(e)},ol.prototype.getStats=function(){return this.peerconnection.getStats()},ol.prototype.toString=function(){return`TPC[id=${this.id},type=${this.isP2P?"P2P":"JVB"}]`};const dl=(0,E.getLogger)("modules/RTC/RTC.js");let cl,ll=0,hl=0;function ul(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map((e=>{const{constraints:t,sourceId:n,sourceType:i,stream:r,track:o,videoType:s,effects:a}=e,{deviceId:d,facingMode:c}=o.getSettings();return hl=yi(hl),new ac({constraints:t,deviceId:d,facingMode:c,mediaType:o.kind,rtcId:hl,sourceId:n,sourceType:i,stream:r,track:o,videoType:s||null,effects:a})}))}class pl extends xr{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),this.conference=e,this.peerConnections=new Map,this.localTracks=[],this.options=t,this._channel=null,this._lastN=void 0,this._forwardedSources=null,this._forwardedSourcesChangeListener=this._onForwardedSourcesChanged.bind(this),this._onDeviceListChanged=this._onDeviceListChanged.bind(this),this._updateAudioOutputForAudioTracks=this._updateAudioOutputForAudioTracks.bind(this),nc.isDeviceChangeAvailable("output")&&(nc.addListener(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,this._updateAudioOutputForAudioTracks),nc.addListener(ji.default.DEVICE_LIST_CHANGED,this._onDeviceListChanged))}destroy(){nc.removeListener(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,this._updateAudioOutputForAudioTracks),nc.removeListener(ji.default.DEVICE_LIST_CHANGED,this._onDeviceListChanged),this._channelOpenListener&&this.removeListener(ji.default.DATA_CHANNEL_OPEN,this._channelOpenListener)}static createLocalTracks(e){return ul(e)}static obtainAudioAndVideoPermissions(e){return nc.obtainAudioAndVideoPermissions(e).then((e=>ul(e)))}initializeBridgeChannel(e,t){this._channel=new ja(e,t,this.eventEmitter,this.conference),this._channelOpenListener=()=>{const e=(e,t,n)=>{dl.error(`Cannot send ${t}(${JSON.stringify(n)}) endpoint message`,e)};if(this._receiverVideoConstraints)try{this._channel.sendReceiverVideoConstraintsMessage(this._receiverVideoConstraints)}catch(t){e(t,"ReceiverVideoConstraints",this._receiverVideoConstraints)}if(void 0!==this._lastN&&-1!==this._lastN)try{this._channel.sendSetLastNMessage(this._lastN)}catch(t){e(t,"LastNChangedEvent",this._lastN)}},this.addListener(ji.default.DATA_CHANNEL_OPEN,this._channelOpenListener),this.addListener(ji.default.FORWARDED_SOURCES_CHANGED,this._forwardedSourcesChangeListener)}_onDeviceListChanged(){this._updateAudioOutputForAudioTracks(nc.getAudioOutputDevice())}_onForwardedSourcesChanged(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const t=this._forwardedSources||[];let n=[],i=[];const r=Date.now();this._forwardedSources=e,n=t.filter((e=>!this.isInForwardedSources(e))),i=e.filter((e=>-1===t.indexOf(e))),dl.debug(`Fowarded sources changed leaving=${n}, entering=${i} at ${r}`),this.conference.eventEmitter.emit(Re,n,i,r)}onCallEnded(){this._channel&&(this._channel&&"websocket"===this._channel.mode&&this._channel.close(),this._channel=null)}setDesktopSharingFrameRate(e){nc.setDesktopSharingFrameRate(e)}setReceiverVideoConstraints(e){this._receiverVideoConstraints=e,this._channel&&this._channel.isOpen()&&this._channel.sendReceiverVideoConstraintsMessage(e)}sendSourceVideoType(e,t){this._channel&&this._channel.isOpen()&&this._channel.sendSourceVideoTypeMessage(e,t)}static addListener(e,t){nc.addListener(e,t)}static removeListener(e,t){nc.removeListener(e,t)}static init(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.options=e,nc.init(this.options)}createPeerConnection(e,t,n,i){const r=Ss()(nc.pcConstraints);i.enableInsertableStreams&&(dl.debug("E2EE - setting insertable streams constraints"),t.encodedInsertableStreams=!0),i.forceTurnRelay&&(t.iceTransportPolicy="relay"),t.bundlePolicy="max-bundle",ll=yi(ll);const o=new ol(this,ll,e,t,r,n,i);return this.peerConnections.set(o.id,o),o}_removePeerConnection(e){const t=e.id;return!!this.peerConnections.has(t)&&(this.peerConnections.delete(t),!0)}addLocalTrack(e){if(!e)throw new Error("track must not be null nor undefined");this.localTracks.push(e),e.conference=this.conference}getForwardedSources(){return this._forwardedSources}getLocalVideoTrack(){const e=this.getLocalTracks(Ri.VIDEO);return e.length?e[0]:void 0}getLocalVideoTracks(){return this.getLocalTracks(Ri.VIDEO)}getLocalAudioTrack(){const e=this.getLocalTracks(Ri.AUDIO);return e.length?e[0]:void 0}getLocalEndpointId(){return this.conference.myUserId()}getLocalTracks(e){let t=this.localTracks.slice();return void 0!==e&&(t=t.filter((t=>t.getType()===e))),t}getRemoteTracks(e){let t=[];for(const n of this.peerConnections.values()){const i=n.getRemoteTracks(void 0,e);i&&(t=t.concat(i))}return t}setAudioMute(e){const t=[];return this.getLocalTracks(Ri.AUDIO).forEach((n=>{t.push(e?n.mute():n.unmute())})),Promise.all(t)}setVideoMute(e){const t=[];return this.getLocalTracks(Ri.VIDEO).forEach((n=>{t.push(e?n.mute():n.unmute())})),Promise.all(t)}removeLocalTrack(e){const t=this.localTracks.indexOf(e);-1!==t&&this.localTracks.splice(t,1)}static attachMediaStream(e,t){return nc.attachMediaStream(e,t)}static isDeviceListAvailable(){return nc.isDeviceListAvailable()}static isDeviceChangeAvailable(e){return nc.isDeviceChangeAvailable(e)}static isWebRtcSupported(){return ci.isSupported()}static getAudioOutputDevice(){return nc.getAudioOutputDevice()}static getCurrentlyAvailableMediaDevices(){return nc.getCurrentlyAvailableMediaDevices()}static arePermissionsGrantedForAvailableDevices(){return nc.arePermissionsGrantedForAvailableDevices()}static getEventDataForActiveDevice(e){return nc.getEventDataForActiveDevice(e)}static setAudioOutputDevice(e){return nc.setAudioOutputDevice(e)}static enumerateDevices(e){nc.enumerateDevices(e)}static stopMediaStream(e){nc.stopMediaStream(e)}static isDesktopSharingEnabled(){return nc.isDesktopSharingEnabled()}closeBridgeChannel(){this._channel&&(this._channel.close(),this._channel=null)}setAudioLevel(e,t,n,i){const r=e.getTrackBySSRC(t);r&&(r.isAudioTrack()?(r.isLocal()!==i&&dl.error(`${r} was expected to ${i?"be":"not be"} local`),r.setAudioLevel(n,e)):dl.warn(`Received audio level for non-audio track: ${t}`))}sendChannelMessage(e,t){if(!this._channel)throw new Error("Channel support is disabled!");this._channel.sendMessage(e,t)}sendEndpointStatsMessage(e){this._channel&&this._channel.isOpen()&&this._channel.sendEndpointStatsMessage(e)}setLastN(e){this._lastN!==e&&(this._lastN=e,this._channel&&this._channel.isOpen()&&this._channel.sendSetLastNMessage(e),this.eventEmitter.emit(ji.default.LASTN_VALUE_CHANGED,e))}isInForwardedSources(e){return!this._forwardedSources||this._forwardedSources.indexOf(e)>-1}_updateAudioOutputForAudioTracks(e){const t=this.getRemoteTracks(Ri.AUDIO);for(const n of t)n.setAudioOutput(e)}}!function(e){e.LOCAL_STATS_UPDATED="cq.local_stats_updated",e.REMOTE_STATS_UPDATED="cq.remote_stats_updated"}(cl||(cl={}));const ml=cl.LOCAL_STATS_UPDATED,gl=cl.REMOTE_STATS_UPDATED,fl=n(125),{VideoType:vl}=n(408),{XMPPEvents:_l}=n(609),yl=(0,E.getLogger)("modules/connectivity/ConnectionQuality.js");let El=800;class Sl{constructor(e,t,n){var i;this.eventEmitter=t,this._conference=e,this._localStats={connectionQuality:100,jvbRTT:void 0},this._lastConnectionQualityUpdate=-1,this._options=n,this._remoteStats={},this._timeIceConnected=-1,this._timeVideoUnmuted=-1,(null===(i=this._options.config)||void 0===i?void 0:i.startBitrate)>0&&(El=this._options.config.startBitrate),e.on(me,(()=>{this._updateLocalConnectionQuality(0),this.eventEmitter.emit(ml,this._localStats),this._broadcastLocalStats()})),e.room.addListener(_l.ICE_CONNECTION_STATE_CHANGED,((e,t)=>{e.isP2P||"connected"!==t||(this._timeIceConnected=window.performance.now())})),e.on(Ce,((e,t)=>{"stats"===t.type&&this._updateRemoteStats(e.getId(),t.values)})),e.on(xe,((e,t)=>{this._updateRemoteStats(e.getId(),t)})),this._options.config.disableLocalStats||e.statistics.addConnectionStatsListener(this._updateLocalStats.bind(this)),e.on(it,(e=>{e.isVideoTrack()&&(e.isMuted()?this._timeVideoUnmuted=-1:this._maybeUpdateUnmuteTime())})),e.on(tt,(e=>{e.isVideoTrack()&&!e.isMuted()&&this._maybeUpdateUnmuteTime()})),e.rtc.on(ji.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED,(e=>{this._localStats.maxEnabledResolution=e.maxEnabledResolution})),e.on(We,(e=>{this._localStats.serverRegion=e})),e.on(ze,(e=>{this._localStats.bridgeCount=Number((e||{})["bridge-count"])}))}_maybeUpdateUnmuteTime(){this._timeVideoUnmuted<0&&(this._timeVideoUnmuted=window.performance.now())}_calculateConnectionQuality(e,t,n){const i=fl[n];let r,o=100;if(this._localStats.packetLoss&&(r=this._localStats.packetLoss.upload,t&&(r*=.5)),t||!i||e===vl.DESKTOP||this._timeIceConnected<0||this._timeVideoUnmuted<0)void 0===r?(yl.error("Cannot calculate connection quality, unknown packet loss."),o=100):o=r<=2?100:r<=4?70:r<=6?50:r<=8?30:r<=12?10:0;else{const e=this._conference.getActivePeerConnection();if(e){var s,a;const t=window.performance.now()-Math.max(this._timeVideoUnmuted,this._timeIceConnected),n=null!==(s=null===(a=this._options.config)||void 0===a?void 0:a.pcStatsInterval)&&void 0!==s?s:1e4;let r=function(e,t,n,i){let r=0,o=Math.min(t.height,t.width),s=Pc.find((e=>e.height<=o));if(s&&e)for(o=s.height;o>=180;o/=2){const e=o;if(s=Pc.find((t=>t.height===e)),!s)break;r+=i[s.level]}else s&&(r=i[s.level]);return Math.min(r/1e3,function(e){return e>6e4?Number.MAX_SAFE_INTEGER:El*Math.pow(1.08,e/1e3)}(Math.max(0,n-1e3)))}(e.doesTrueSimulcast(),i,t,e.getTargetVideoBitrates());r=Math.min(r,2500),t>n&&(o=100*this._localStats.bitrate.upload/r)}r&&r>=10&&(o=Math.min(o,30))}if(this._lastConnectionQualityUpdate>0){const e=2,t=this._localStats.connectionQuality,n=(window.performance.now()-this._lastConnectionQualityUpdate)/1e3;o=Math.min(o,t+n*e)}return Math.min(100,o)}_updateLocalConnectionQuality(e){this._localStats.connectionQuality=e,this._lastConnectionQualityUpdate=window.performance.now()}_broadcastLocalStats(){const e={bitrate:this._localStats.bitrate,packetLoss:this._localStats.packetLoss,connectionQuality:this._localStats.connectionQuality,jvbRTT:this._localStats.jvbRTT,serverRegion:this._localStats.serverRegion,maxEnabledResolution:this._localStats.maxEnabledResolution,avgAudioLevels:this._localStats.localAvgAudioLevels};try{this._conference.sendEndpointStatsMessage(e)}catch(e){}}_updateLocalStats(e,t){if(!e.isP2P){const e=t.transport&&t.transport.length&&t.transport[0].rtt;this._localStats.jvbRTT=e||void 0}if(e!==this._conference.getActivePeerConnection())return;let n;const i=!this._conference.isConnectionInterrupted(),r=this._conference.getLocalVideoTrack(),o=r?r.videoType:void 0,s=!r||r.isMuted(),a=r?Math.min(r.resolution,r.maxEnabledResolution):null;for(n in s||this._maybeUpdateUnmuteTime(),t)t.hasOwnProperty(n)&&(this._localStats[n]=t[n]);i&&this._updateLocalConnectionQuality(this._calculateConnectionQuality(o,s,a)),this.eventEmitter.emit(ml,this._localStats),this._broadcastLocalStats()}_updateRemoteStats(e,t){this._remoteStats[e]={bitrate:t.bitrate,packetLoss:t.packetLoss,connectionQuality:t.connectionQuality,jvbRTT:t.jvbRTT,serverRegion:t.serverRegion,maxEnabledResolution:t.maxEnabledResolution,avgAudioLevels:t.avgAudioLevels},this.eventEmitter.emit(gl,e,this._remoteStats[e])}getStats(){return this._localStats}}const bl=(0,E.getLogger)("modules/connectivity/IceFailedHandling.js");class Tl{constructor(e){this._conference=e}_actOnIceFailed(){if(!this._conference.room)return;const{enableForcedReload:e,enableIceRestart:t}=this._conference.options.config,n=void 0!==t&&!t,i=this._conference.room.supportsRestartByTerminate(),r=i&&!t;if(bl.info(`ICE failed, enableForcedReload: ${e}, enableIceRestart: ${t}, supports restart by terminate: ${i}`),n||!t&&!i||e){bl.info("ICE failed, but ICE restarts are disabled");const t=e?I:F;return void this._conference.eventEmitter.emit(ae,t)}const o=this._conference.jvbJingleSession,s=o&&o.getIceConnectionState();o?"connected"===s?bl.info("ICE connection restored - not sending ICE failed"):(bl.info(`Sending ICE failed - the connection did not recover, ICE state: ${s}, use \'session-terminate\': ${r}`),r?this._conference._stopJvbSession({reason:"connectivity-error",reasonDescription:"ICE FAILED",requestRestart:!0,sendSessionTerminate:!0}):this._conference.jvbJingleSession.sendIceFailedNotification()):bl.warn("Not sending ICE failed - no JVB connection")}start(){this._conference.xmpp.ping(65e3).then((()=>{this._canceled||(this._iceFailedTimeout=window.setTimeout((()=>{this._iceFailedTimeout=void 0,this._actOnIceFailed()}),2e3))}),(e=>{bl.error("PING error/timeout - not sending ICE failed",e)}))}cancel(){this._canceled=!0,window.clearTimeout(this._iceFailedTimeout)}}let Cl;!function(e){e.DETECTOR_STATE_CHANGE="detector_state_change",e.AUDIO_INPUT_STATE_CHANGE="audio_input_state_changed",e.NO_AUDIO_INPUT="no_audio_input_detected",e.VAD_NOISY_DEVICE="detection.vad_noise_device",e.VAD_REPORT_PUBLISHED="vad-report-published",e.VAD_SCORE_PUBLISHED="detection.vad_score_published",e.VAD_TALK_WHILE_MUTED="detection.vad_talk_while_muted"}(Cl||(Cl={}));const xl=Cl.DETECTOR_STATE_CHANGE,Rl=Cl.AUDIO_INPUT_STATE_CHANGE,Al=Cl.NO_AUDIO_INPUT,wl=Cl.VAD_NOISY_DEVICE,Il=Cl.VAD_REPORT_PUBLISHED,Pl=Cl.VAD_SCORE_PUBLISHED,Dl=Cl.VAD_TALK_WHILE_MUTED;class Ol extends ii{constructor(e){super(),this._conference=e,this._timeoutTrigger=null,this._hasAudioInput=null,e.on(tt,this._trackAdded.bind(this))}_clearTriggerTimeout(){clearTimeout(this._timeoutTrigger),this._timeoutTrigger=null}_handleAudioInputStateChange(e){const t=0!==e;null!==this._hasAudioInput&&this._hasAudioInput===t||(this._hasAudioInput=t,this.emit(Rl,this._hasAudioInput))}_handleNoAudioInputDetection(e){this._eventFired||(0!==e||this._timeoutTrigger?0!==e&&this._timeoutTrigger&&this._clearTriggerTimeout():this._timeoutTrigger=setTimeout((()=>{this._eventFired=!0,this.emit(Al)}),4e3))}_audioLevel(e,t,n,i){if(!i||!this._audioTrack)return;const r=e.localSSRCs.get(this._audioTrack.rtcId);r&&r.ssrcs.includes(t)&&(this._handleAudioInputStateChange(n),this._handleNoAudioInputDetection(n))}_trackAdded(e){e.isLocalAudioTrack()&&(this._audioTrack=e,this._eventFired=!1,this._clearTriggerTimeout(),e.on(It,(e=>{this._handleNoAudioInputDetection(e)})),e.on(Ct,(e=>{this._handleNoAudioInputDetection(e),this._handleAudioInputStateChange(e)})))}}class kl{constructor(e){this.conference=e,e.addEventListener(nt,this._audioLevel.bind(this)),this.myUserID=this.conference.myUserId()}_audioLevel(e,t){!this.conference.isP2PActive()||t<=.6||e===this.myUserID&&this.conference.getLocalAudioTrack().isMuted()||this.conference.rtc.eventEmitter.emit(ji.default.DOMINANT_SPEAKER_CHANGED,e)}}function Nl(e){const t=window.AudioContext||window.webkitAudioContext;if(t)return new t(e)}class Ml extends ii{constructor(e,t,n){super(),this._procNodeSampleRate=e,this._vadProcessor=t,this._localTrack=n,this._bufferResidue=new Float32Array([]),this._audioContext=Nl({sampleRate:t.getRequiredPCMFrequency()}),this._vadSampleSize=t.getSampleLength(),this._onAudioProcess=this._onAudioProcess.bind(this),this._initializeAudioContext()}static create(e,t,n){return pl.obtainAudioAndVideoPermissions({devices:["audio"],micDeviceId:e}).then((i=>{if(!i[0])throw new Error(`Failed to create jitsi local track for device id: ${e}`);return new Ml(t,n,i[0])}))}_initializeAudioContext(){this._audioSource=this._audioContext.createMediaStreamSource(this._localTrack.stream),this._audioProcessingNode=this._audioContext.createScriptProcessor(this._procNodeSampleRate,1,1)}_onAudioProcess(e){const t=e.inputBuffer.getChannelData(0),n=[...this._bufferResidue,...t],i=Date.now();let r=0;for(;r+this._vadSampleSize{},this._audioProcessingNode.disconnect(),this._audioSource.disconnect()}_cleanupResources(){this._disconnectAudioGraph(),this._localTrack.stopStream()}getDeviceId(){return this._localTrack.getDeviceId()}getTrackLabel(){return this._localTrack.getDeviceLabel()}start(){this._connectAudioGraph()}stop(){this._disconnectAudioGraph(),this._bufferResidue=[]}destroy(){this._destroyed||(this._cleanupResources(),this._destroyed=!0)}}const Ll=(0,E.getLogger)("modules/detection/VADAudioAnalyser.js");class Fl extends ii{constructor(e,t){super(),this._createVADProcessor=t,this._vadEmitter=null,this._isVADEmitterRunning=!1,this._detectionServices=[],this._vadInitTracker=Promise.resolve(),this._processVADScore=this._processVADScore.bind(this),e.on(tt,this._trackAdded.bind(this)),e.on(rt,this._trackRemoved.bind(this)),e.on(it,this._trackMuteChanged.bind(this))}addVADDetectionService(e){this._detectionServices.push(e),e.on(xl,(()=>{!this._detectionServices.filter((e=>!0===e.isActive())).length&&this._isVADEmitterRunning?this._stopVADEmitter():this._isVADEmitterRunning||this._startVADEmitter()}))}_startVADEmitter(){this._vadEmitter&&(this._vadEmitter.on(Pl,this._processVADScore),this._vadEmitter.start(),this._isVADEmitterRunning=!0)}_stopVADEmitter(){this._vadEmitter&&(this._vadEmitter.removeListener(Pl,this._processVADScore),this._vadEmitter.stop()),this._isVADEmitterRunning=!1}_processVADScore(e){for(const t of this._detectionServices)t.processVADScore(e)}_changeDetectorsMuteState(e){for(const t of this._detectionServices)t.changeMuteState(e)}_trackAdded(e){e.isLocalAudioTrack()&&(this._vadInitTracker=this._vadInitTracker.then((()=>this._createVADProcessor())).then((t=>Ml.create(e.getDeviceId(),4096,t))).then((t=>{Ll.debug("Created VAD emitter for track: ",e.getTrackLabel()),this._vadEmitter=t,this._changeDetectorsMuteState(e.isMuted())})).catch((e=>{Ll.warn("Failed to start VADAudioAnalyser",e)})))}_trackMuteChanged(e){e.isLocalAudioTrack()&&(this._vadInitTracker=this._vadInitTracker.then((()=>{this._changeDetectorsMuteState(e.isMuted())})))}_trackRemoved(e){e.isLocalAudioTrack()&&(this._vadInitTracker=this._vadInitTracker.then((()=>{Ll.debug("Removing track from VAD detection - ",e.getTrackLabel()),this._vadEmitter&&(this._stopVADEmitter(),this._vadEmitter.destroy(),this._vadEmitter=null);for(const e of this._detectionServices)e.reset()})))}}class jl extends ii{constructor(){super(),this._processing=!1,this._scoreArray=[],this._audioLvlArray=[],this._active=!1,this._calculateNoisyScore=this._calculateNoisyScore.bind(this)}_calculateNoisyScore(){const e=Ei(this._scoreArray),t=Ei(this._audioLvlArray);e<.2&&t>.04&&(this.emit(wl),this._setActiveState(!1)),this.reset()}_recordValues(e,t){this._scoreArray.push(e),this._audioLvlArray.push(t)}_setActiveState(e){this._active=e,this.emit(xl,this._active)}changeMuteState(e){this._setActiveState(!e),this.reset()}isActive(){return this._active}reset(){this._processing=!1,this._scoreArray=[],this._audioLvlArray=[],clearTimeout(this._processTimeout)}processVADScore(e){if(this._active)if(this._processing){const t=Si(e.pcmData);this._recordValues(e.score,Ei(t))}else if(e.score<.2){const t=Ei(Si(e.pcmData));t>.02&&(this._processing=!0,this._recordValues(e.score,t),this._processTimeout=setTimeout(this._calculateNoisyScore,1500))}}}class Vl extends ii{constructor(){super(),this._processing=!1,this._scoreArray=[],this._active=!1,this._calculateVADScore=this._calculateVADScore.bind(this)}_calculateVADScore(){Ei(this._scoreArray)>.6&&(this.emit(Dl),this._setActiveState(!1)),this.reset()}_setActiveState(e){this._active=e,this.emit(xl,this._active)}changeMuteState(e){this._setActiveState(e),this.reset()}isActive(){return this._active}processVADScore(e){this._active&&(this._processing?this._scoreArray.push(e.score):e.score>.9&&(this._processing=!0,this._scoreArray.push(e.score),this._processTimeout=setTimeout(this._calculateVADScore,700)))}reset(){this._processing=!1,this._scoreArray=[],clearTimeout(this._processTimeout)}}let Ul;!function(e){e.E2E_RTT_CHANGED="e2eping.e2e_rtt_changed"}(Ul||(Ul={}));const Hl=Ul.E2E_RTT_CHANGED,$l=(0,E.getLogger)("modules/e2eping/e2eping.js"),Jl="e2e-ping-request",Bl="e2e-ping-response";class ql{constructor(e,t){this.participant=e,this.e2eping=t,this.id=e.getId(),this.requests={},this.lastRequestId=1,this.sendRequest=this.sendRequest.bind(this),this.handleResponse=this.handleResponse.bind(this),this.maybeLogRttAndStop=this.maybeLogRttAndStop.bind(this),this.scheduleNext=this.scheduleNext.bind(this),this.stop=this.stop.bind(this),this.getDelay=this.getDelay.bind(this),this.timeout=this.scheduleNext()}scheduleNext(){return window.setTimeout(this.sendRequest,this.getDelay())}stop(){this.timeout&&window.clearTimeout(this.timeout),this.e2eping.removeParticipant(this.id)}getDelay(){const e=this.e2eping.conference.getParticipants().length,t=e*(e-1)/2*this.e2eping.numRequests/this.e2eping.maxMessagesPerSecond;return(1.5-Math.random())*Math.max(t/this.e2eping.numRequests*1e3,1e3)}sendRequest(){const e=this.lastRequestId++,t={type:Jl,id:e};this.e2eping.sendMessage(t,this.id),this.requests[e]={id:e,timeSent:window.performance.now()}}handleResponse(e){const t=this.requests[e.id];t&&(t.rtt=window.performance.now()-t.timeSent),this.maybeLogRttAndStop()}maybeLogRttAndStop(){let e,t,n=1/0,i=0,r=0;for(t in this.requests)this.requests.hasOwnProperty(t)&&(e=this.requests[t],r++,e.rtt&&(i++,n=Math.min(n,e.rtt)));return i>=this.e2eping.numRequests?($l.info(`Measured RTT=${n} ms to ${this.id} (in ${this.participant.getProperty("region")})`),this.stop(),void this.e2eping.conference.eventEmitter.emit(Hl,this.participant,n)):r>2*this.e2eping.numRequests?($l.info(`Stopping e2eping for ${this.id} because we sent ${r} with only ${i} responses.`),void this.stop()):void(this.timeout=this.scheduleNext())}}class Gl{constructor(e,t,n){this.conference=e,this.eventEmitter=e.eventEmitter,this.sendMessage=n,this.participants={},this.numRequests=5,this.maxConferenceSize=200,this.maxMessagesPerSecond=250,t&&t.e2eping&&("number"==typeof t.e2eping.numRequests&&(this.numRequests=t.e2eping.numRequests),"number"==typeof t.e2eping.maxConferenceSize&&(this.maxConferenceSize=t.e2eping.maxConferenceSize),"number"==typeof t.e2eping.maxMessagesPerSecond&&(this.maxMessagesPerSecond=t.e2eping.maxMessagesPerSecond)),$l.info(`Initializing e2e ping with numRequests=${this.numRequests}, maxConferenceSize=${this.maxConferenceSize}, maxMessagesPerSecond=${this.maxMessagesPerSecond}.`),this.participantJoined=this.participantJoined.bind(this),this.participantLeft=this.participantLeft.bind(this),e.on(dt,this.participantLeft),this.messageReceived=this.messageReceived.bind(this),e.on(Ce,this.messageReceived),this.conferenceJoined=this.conferenceJoined.bind(this),e.on(ce,this.conferenceJoined)}conferenceJoined(){this.conference.getParticipants().forEach((e=>this.participantJoined(e.getId(),e))),this.conference.on(at,this.participantJoined)}messageReceived(e,t){t.type===Jl?this.handleRequest(e.getId(),t):t.type===Bl&&this.handleResponse(e.getId(),t)}participantJoined(e,t){this.participants[e]&&($l.info(`Participant wrapper already exists for ${e}. Clearing.`),this.participants[e].stop()),this.conference.getParticipants().length>this.maxConferenceSize||this.conference.myUserId()>e&&($l.info(`Starting e2eping for participant ${e}`),this.participants[e]=new ql(t,this))}removeParticipant(e){this.participants[e]&&delete this.participants[e]}participantLeft(e){this.participants[e]&&(this.participants[e].stop(),delete this.participants[e])}handleRequest(e,t){if(t&&t.id){const n={type:Bl,id:t.id};this.sendMessage(n,e)}else $l.info(`Received an invalid e2e ping request from ${e}.`)}handleResponse(e,t){const n=this.participants[e];n&&n.handleResponse(t)}stop(){$l.info("Stopping e2eping"),this.conference.off(at,this.participantJoined),this.conference.off(dt,this.participantLeft),this.conference.off(Ce,this.messageReceived);for(const e in this.participants)this.participants.hasOwnProperty(e)&&this.participants[e].stop();this.participants={}}}const zl=(0,E.getLogger)("modules/event/Jvb121EventGenerator.js");class Kl{constructor(e){this._conference=e,this._jvb121=!0,this._conference.addEventListener(at,(()=>this.evaluateStatus())),this._conference.addEventListener(dt,(()=>this.evaluateStatus())),this._conference.addEventListener(Ue,(()=>this.evaluateStatus()))}evaluateStatus(){const e=this._jvb121,t=!this._conference.isP2PActive()&&this._conference.getParticipantCount()<=2;e!==t&&(this._jvb121=t,zl.debug(`JVB121 status ${e} => ${t}`),this._conference.eventEmitter.emit(Ae,e,t))}}const Wl=Symbol("kJitsiLiteMode"),Xl=(0,E.getLogger)("modules/litemode/LiteModeContext.js");class Yl{constructor(e){this.enabled=Ai.isRunInLiteModeEnabled(),this.enabled&&e.rtc.on(ji.default.REMOTE_TRACK_ADDED,((e,t)=>this._setupLiteModeForTrack(t,e)))}_setupLiteModeForTrack(e,t){if(!this.enabled)return;const n=e.findReceiverForTrack(t.track);if(!n)return void Xl.warn(`Could not set up lite mode for ${t}: receiver not found in: ${e}`);if(n[Wl])return;n[Wl]=!0;const i=n.createEncodedStreams(),r=new TransformStream({transform:()=>{}});i.readable.pipeThrough(r).pipeTo(i.writable)}}const Ql=(0,E.getLogger)("modules/qualitycontrol/ReceiveVideoController.js"),Zl=2160;class eh{constructor(e){const{lastN:t,assumedBandwidthBps:n}=e;this._lastN=null!=t?t:-1,this._maxFrameHeight=Zl,this._assumedBandwidthBps=null!=n?n:-1,this._receiverVideoConstraints={assumedBandwidthBps:this._assumedBandwidthBps,constraints:{},defaultConstraints:{maxHeight:this._maxFrameHeight},lastN:this._lastN}}get constraints(){this._receiverVideoConstraints.assumedBandwidthBps=this._assumedBandwidthBps,this._receiverVideoConstraints.lastN=this._lastN;const e=this._receiverVideoConstraints.constraints;if(e&&Object.keys(e).length)for(const[t,n]of Object.entries(e))n.maxHeight=this._maxFrameHeight;else this._receiverVideoConstraints.defaultConstraints={maxHeight:this._maxFrameHeight};return this._receiverVideoConstraints}updateAssumedBandwidthBps(e){const t=this._assumedBandwidthBps!==e;return t&&(this._assumedBandwidthBps=e,Ql.debug(`Updating receive assumedBandwidthBps: ${e}`)),t}updateLastN(e){const t=this._lastN!==e;return t&&(this._lastN=e,Ql.debug(`Updating ReceiverVideoConstraints lastN(${e})`)),t}updateReceiveResolution(e){const t=this._maxFrameHeight!==e;return t&&(this._maxFrameHeight=e,Ql.debug(`Updating receive maxFrameHeight: ${e}`)),t}updateReceiverVideoConstraints(e){const t=!Et()(this._receiverVideoConstraints,e);var n;return t&&(this._receiverVideoConstraints=e,null!==(n=e.defaultConstraints)&&void 0!==n&&n.maxHeight&&this.updateReceiveResolution(e.defaultConstraints.maxHeight),Ql.debug(`Updating ReceiverVideoConstraints ${JSON.stringify(e)}`)),t}}class th{constructor(e,t){var n;this._conference=e,this._rtc=t;const{config:i}=e.options;this._lastN=null!==(n=null==i?void 0:i.startLastN)&&void 0!==n?n:(null==i?void 0:i.channelLastN)||-1,this._maxFrameHeight=Zl,this._sourceReceiverConstraints=new Map,this._assumedBandwidthBps=-1,this._receiverVideoConstraints=new eh({lastN:this._lastN,assumedBandwidthBps:this._assumedBandwidthBps}),this._conference.on(q,(e=>this._onMediaSessionStarted(e)))}_getDefaultSourceReceiverConstraints(e,t){var n;const i=null!=t?t:Zl,r=(null===(n=e.peerconnection)||void 0===n?void 0:n.getRemoteTracks(null,Ri.VIDEO))||[],o=new Map;for(const e of r)o.set(e.getSourceName(),i);return o}_onMediaSessionStarted(e){e.isP2P?e.setReceiverVideoConstraint(this._getDefaultSourceReceiverConstraints(e)):this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints)}getLastN(){return this._lastN}setAssumedBandwidthBps(e){this._receiverVideoConstraints.updateAssumedBandwidthBps(e)&&this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints)}setLastN(e){this._lastN!==e&&(this._lastN=e,this._receiverVideoConstraints.updateLastN(e)&&this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints))}setPreferredReceiveMaxFrameHeight(e){this._maxFrameHeight=e;for(const t of this._conference.getMediaSessions())t.isP2P?t.setReceiverVideoConstraint(this._getDefaultSourceReceiverConstraints(t,e)):this._receiverVideoConstraints.updateReceiveResolution(e)&&this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints)}setReceiverConstraints(e){if(e){if(Object.keys(e).includes("onStageEndpoints","selectedEndpoints"))throw new Error(\'"onStageEndpoints" and "selectedEndpoints" are not supported when sourceNameSignaling is enabled.\');if(this._receiverVideoConstraints.updateReceiverVideoConstraints(e)){var t,n;this._assumedBandwidthBps=null!==(t=e.assumedBandwidthBps)&&void 0!==t?t:this._assumedBandwidthBps,this._lastN=null!==(n=e.lastN)&&void 0!==n?n:this._lastN,this._rtc.setReceiverVideoConstraints(e);const i=this._conference.getMediaSessions().find((e=>e.isP2P));if(!i||!e.constraints)return;const r=Array.from(Object.entries(e.constraints)).map((e=>(e[1]=e[1].maxHeight,e)));this._sourceReceiverConstraints=new Map(r),i.setReceiverVideoConstraint(this._sourceReceiverConstraints)}}}}const nh=(0,E.getLogger)("modules/qualitycontrol/SendVideoController.js");class ih{constructor(e,t){this._conference=e,this._preferredSendMaxFrameHeight=2160,this._rtc=t,this._sourceSenderConstraints=new Map,this._conference.on(q,(e=>this._onMediaSessionStarted(e))),this._conference.on(G,(()=>this._configureConstraintsForLocalSources())),this._rtc.on(ji.default.SENDER_VIDEO_CONSTRAINTS_CHANGED,(e=>this._onSenderConstraintsReceived(e)))}_configureConstraintsForLocalSources(){for(const e of this._rtc.getLocalVideoTracks()){const t=e.getSourceName();t&&this._propagateSendMaxFrameHeight(t)}}_onMediaSessionStarted(e){e.addListener(da.REMOTE_SOURCE_CONSTRAINTS_CHANGED,((e,t)=>{e===this._conference.getActiveMediaSession()&&t.forEach((e=>this._onSenderConstraintsReceived(e)))}))}_onSenderConstraintsReceived(e){var t;const{maxHeight:n,sourceName:i}=e,r=null!==(t=this._conference.getLocalVideoTracks())&&void 0!==t?t:[];for(const e of r)e.getSourceName()===i&&this._sourceSenderConstraints.get(i)!==n&&(this._sourceSenderConstraints.set(i,-1===n?Math.min(2160,this._preferredSendMaxFrameHeight):n),nh.debug(`Sender constraints for source:${i} changed to maxHeight:${n}`),this._propagateSendMaxFrameHeight(i))}_propagateSendMaxFrameHeight(e){if(!e)throw new Error("sourceName missing for calculating the sendMaxHeight for video tracks");const t=this._selectSendMaxFrameHeight(e),n=[];if(t>=0)for(const i of this._conference.getMediaSessions())n.push(i.setSenderVideoConstraint(t,e));return Promise.all(n)}_selectSendMaxFrameHeight(e){if(!e)throw new Error("sourceName missing for calculating the sendMaxHeight for video tracks");const t=this._conference.getActiveMediaSession()?this._sourceSenderConstraints.get(e):void 0;return this._preferredSendMaxFrameHeight>=0&&t>=0?Math.min(this._preferredSendMaxFrameHeight,t):t>=0?t:this._preferredSendMaxFrameHeight}setPreferredSendMaxFrameHeight(e){this._preferredSendMaxFrameHeight=e;const t=[];for(const e of this._sourceSenderConstraints.keys())t.push(this._propagateSendMaxFrameHeight(e));return Promise.allSettled(t)}}const rh={getFocusRecordingUpdate(e){const t=e&&e.getElementsByTagName("jibri-recording-status")[0];if(t)return{error:t.getAttribute("failure_reason"),initiator:t.getAttribute("initiator"),recordingMode:t.getAttribute("recording_mode"),sessionID:t.getAttribute("session_id"),status:t.getAttribute("status")}},getHiddenDomainUpdate(e){const t=e.getElementsByTagName("live-stream-view-url")[0],n=t&&t.textContent,i=e.getElementsByTagName("mode")[0],r=i&&i.textContent&&i.textContent.toLowerCase(),o=e.getElementsByTagName("session_id")[0];return{liveStreamViewURL:n,mode:r,sessionID:o&&o.textContent}},getSessionIdFromIq(e){const t=e&&e.getElementsByTagName("jibri")[0];return t&&t.getAttribute("session_id")},getSessionId(e){const t=e.getElementsByTagName("session_id")[0];return t&&t.textContent},isFromFocus:e=>e.getAttribute("from").includes("focus")};class oh{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._connection=e.connection,this._mode=e.mode,this._jibriJid=null,this._statusFromJicofo="",this._setSessionID(e.sessionID),this.setStatus(e.status)}getError(){return this._error}getID(){return this._sessionID}getInitiator(){return this._initiator}getLiveStreamViewURL(){return this._liveStreamViewURL}getStatus(){return this._status?this._status:this._statusFromJicofo}getJibriJid(){return this._jibriJid}getTerminator(){return this._terminator}getMode(){return this._mode}setError(e){this._error=e}setLiveStreamViewURL(e){this._liveStreamViewURL=e}setStatus(e){this._status=e}setStatusFromJicofo(e){this._statusFromJicofo=e}setJibriJid(e){this._jibriJid=e}setInitiator(e){this._initiator=e}setTerminator(e){this._terminator=e}start(e){let{appData:t,broadcastId:n,focusMucJid:i,streamId:r}=e;return new Promise(((e,o)=>{this._connection.sendIQ(this._createIQ({action:"start",appData:t,focusMucJid:i,broadcastId:n,streamId:r}),(t=>{this.setStatus("pending"),this._setSessionID(rh.getSessionIdFromIq(t)),e()}),(e=>{this._setErrorFromIq(e),o(e)}))}))}stop(e){let{focusMucJid:t}=e;return new Promise(((e,n)=>{this._connection.sendIQ(this._createIQ({action:"stop",focusMucJid:t}),e,n)}))}_createIQ(e){let{action:t,appData:n,broadcastId:i,focusMucJid:r,streamId:o}=e;return(0,St.$iq)({to:r,type:"set"}).c("jibri",{xmlns:"http://jitsi.org/protocol/jibri",action:t,app_data:n,recording_mode:this._mode,streamid:o,you_tube_broadcast_id:i}).up()}_setErrorFromIq(e){const t=e.getElementsByTagName("error")[0];this.setError(t.children[0].tagName)}_setSessionID(e){this._sessionID=e}}const sh=(0,E.getLogger)("modules/recording/RecordingManager.js"),ah=class{constructor(e){this._sessions={},this._chatRoom=e,this.onPresence=this.onPresence.bind(this),this.onMemberLeft=this.onMemberLeft.bind(this),this._chatRoom.eventEmitter.addListener(Hi.XMPPEvents.PRESENCE_RECEIVED,this.onPresence),this._chatRoom.eventEmitter.addListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,this.onMemberLeft)}getSession(e){return this._sessions[e]}getSessionByJibriJid(e){let t;return Object.values(this._sessions).forEach((n=>{n.getJibriJid()===e&&(t=n)})),t}onPresence(e){let{fromHiddenDomain:t,presence:n}=e;rh.isFromFocus(n)?this._handleFocusPresence(n):t&&this._handleJibriPresence(n)}onMemberLeft(e){const t=this.getSessionByJibriJid(e);if(t){const e=t.getStatus();t.setStatus(""),t.setJibriJid(null),t.getStatus()!==e&&this._emitSessionUpdate(t)}}startRecording(e){const t=new oh({...e,connection:this._chatRoom.connection});return t.start({appData:e.appData,broadcastId:e.broadcastId,focusMucJid:this._chatRoom.focusMucJid,streamId:e.streamId}).then((()=>(this.getSession(t.getID())||(this._addSession(t),this._emitSessionUpdate(t)),t))).catch((e=>(this._emitSessionUpdate(t),Promise.reject(e))))}stopRecording(e){const t=this.getSession(e);return t?t.stop({focusMucJid:this._chatRoom.focusMucJid}):Promise.reject(new Error("Could not find session"))}_addSession(e){this._sessions[e.getID()]=e}_createSession(e,t,n){const i=new oh({connection:this._chatRoom.connection,focusMucJid:this._chatRoom.focusMucJid,mode:n,sessionID:e,status:t});return this._addSession(i),i}_emitSessionUpdate(e,t){this._chatRoom.eventEmitter.emit(Hi.XMPPEvents.RECORDER_STATE_CHANGED,e,t)}_handleFocusPresence(e){const t=rh.getFocusRecordingUpdate(e);if(!t)return;const{error:n,initiator:i,recordingMode:r,sessionID:o,status:s}=t;let a=this.getSession(o);a||"off"!==s?a&&a.getStatus()===s&&a.getError()===n?sh.warn("Ignoring duplicate presence update: ",JSON.stringify(t)):(a||(a=this._createSession(o,s,r)),a.setStatusFromJicofo(s),n&&a.setError(n),this._emitSessionUpdate(a,i)):sh.warn("Ignoring recording presence update","Received a new session with status off.")}_handleJibriPresence(e){const{liveStreamViewURL:t,mode:n,sessionID:i}=rh.getHiddenDomainUpdate(e);if(!i)return void sh.warn("Ignoring potential jibri presence due to no session id.");let r=this.getSession(i);r||(r=this._createSession(i,"on",n)),r.setStatus("on"),r.setJibriJid(e.getAttribute("from")),r.setLiveStreamViewURL(t),this._emitSessionUpdate(r)}},dh=(0,E.getLogger)("modules/statistics/AudioOutputProblemDetector.js");class ch{constructor(e){this._conference=e,this._localAudioLevelCache={},this._reportedParticipants=[],this._audioProblemCandidates={},this._numberOfRemoteAudioLevelsReceived={},this._onLocalAudioLevelsReport=this._onLocalAudioLevelsReport.bind(this),this._onRemoteAudioLevelReceived=this._onRemoteAudioLevelReceived.bind(this),this._clearUserData=this._clearUserData.bind(this),this._conference.on(gl,this._onRemoteAudioLevelReceived),this._conference.statistics.addConnectionStatsListener(this._onLocalAudioLevelsReport),this._conference.on(dt,this._clearUserData)}_onRemoteAudioLevelReceived(e,t){let{avgAudioLevels:n}=t;const i=this._numberOfRemoteAudioLevelsReceived[e]+1||0;if(this._numberOfRemoteAudioLevelsReceived[e]=i,-1!==this._reportedParticipants.indexOf(e)||e in this._audioProblemCandidates||n<=0||i<3)return;const r=this._conference.getParticipantById(e);if(r&&r.getTracksByMediaType(Ri.AUDIO).length>0&&r.isAudioMuted())return;const o=this._localAudioLevelCache[e];Array.isArray(o)&&!o.every((e=>0===e))||(this._audioProblemCandidates[e]={remoteAudioLevels:n,localAudioLevels:[]})}_onLocalAudioLevelsReport(e,t){let{avgAudioLevels:n}=t;e===this._conference.getActivePeerConnection()&&(Object.keys(n).forEach((e=>{if(-1!==this._reportedParticipants.indexOf(e))return;const t=this._localAudioLevelCache[e];Array.isArray(t)?t.length>=2&&t.shift():this._localAudioLevelCache[e]=[],this._localAudioLevelCache[e].push(n[e])})),Object.keys(this._audioProblemCandidates).forEach((e=>{const{localAudioLevels:t,remoteAudioLevels:i}=this._audioProblemCandidates[e];if(t.push(n[e]),2===t.length){if(t.every((e=>void 0===e||0===e))){const n=JSON.stringify(t);Mi.sendAnalytics(((e,t,n)=>({type:kt.TYPE_OPERATIONAL,action:"audio.output.problem",attributes:{userID:e,localAudioLevels:t,remoteAudioLevels:n}}))(e,n,i)),dh.warn(`A potential problem is detected with the audio output for participant ${e}, local audio levels: ${n}, remote audio levels: ${i}`),this._reportedParticipants.push(e),this._clearUserData(e)}delete this._audioProblemCandidates[e]}})))}_clearUserData(e){delete this._localAudioLevelCache[e]}dispose(){this._conference.off(gl,this._onRemoteAudioLevelReceived),this._conference.off(dt,this._clearUserData),this._conference.statistics.removeConnectionStatsListener(this._onLocalAudioLevelsReport),this._localAudioLevelCache=void 0,this._audioProblemCandidates=void 0,this._reportedParticipants=void 0,this._numberOfRemoteAudioLevelsReceived=void 0,this._conference=void 0}}const lh=(0,E.getLogger)("modules/statistics/AvgRTPStatsReporter.js");class hh{constructor(e){this.name=e,this.count=0,this.sum=0,this.samples=[]}addNext(e){void 0!==e&&("number"!=typeof e?lh.error(`${this.name} - invalid value for idx: ${this.count}`,e):isNaN(e)||(this.sum+=e,this.samples.push(e),this.count+=1))}calculate(){return this.sum/this.count}appendReport(e){e[`${this.name}_avg`]=this.calculate(),e[`${this.name}_samples`]=JSON.stringify(this.samples)}reset(){this.samples=[],this.sum=0,this.count=0}}class uh{constructor(e,t,n){this.isP2P=t,this._n=n,this._sampleIdx=0,this._avgRTT=new hh("rtt"),this._avgRemoteRTTMap=new Map,this._avgRtpStatsReporter=e,this._avgEnd2EndRTT=void 0,this._onConnectionStats=(e,t)=>{this.isP2P===e.isP2P&&this._calculateAvgStats(t)};const i=e._conference;i.statistics.addConnectionStatsListener(this._onConnectionStats),this.isP2P||(this._onUserLeft=e=>this._avgRemoteRTTMap.delete(e),i.on(dt,this._onUserLeft),this._onRemoteStatsUpdated=(e,t)=>this._processRemoteStats(e,t),i.on(gl,this._onRemoteStatsUpdated))}_calculateAvgStats(e){if(e){if(ci.supportsRTTStatistics()&&e.transport&&e.transport.length&&this._avgRTT.addNext(e.transport[0].rtt),this._sampleIdx+=1,this._sampleIdx>=this._n){if(ci.supportsRTTStatistics()){const t=this._avgRtpStatsReporter._conference,n={p2p:this.isP2P,conference_size:t.getParticipantCount()};if(e.transport&&e.transport.length&&Object.assign(n,{local_candidate_type:e.transport[0].localCandidateType,remote_candidate_type:e.transport[0].remoteCandidateType,transport_type:e.transport[0].type}),this._avgRTT.appendReport(n),this.isP2P){const e=this._avgRtpStatsReporter.jvbStatsMonitor._avgEnd2EndRTT;isNaN(e)||(n.rtt_diff=this._avgRTT.calculate()-e)}else{const e=this._calculateAvgRemoteRTT(),t=this._avgRTT.calculate();this._avgEnd2EndRTT=t+e,isNaN(t)||isNaN(e)||(n.end2end_rtt_avg=this._avgEnd2EndRTT)}Mi.sendAnalytics(hn(n))}this._resetAvgStats()}}else lh.error("No stats")}_calculateAvgRemoteRTT(){let e=0,t=0;for(const n of this._avgRemoteRTTMap.values()){const i=n.calculate();isNaN(i)||(t+=i,e+=1,n.reset())}return t/e}_processRemoteStats(e,t){const n="number"==typeof t.jvbRTT;let i=this._avgRemoteRTTMap.get(e);!i&&n&&(i=new hh(`${e}_stat_rtt`),this._avgRemoteRTTMap.set(e,i)),n?i.addNext(t.jvbRTT):i&&this._avgRemoteRTTMap.delete(e)}_resetAvgStats(){this._avgRTT.reset(),this._avgRemoteRTTMap&&this._avgRemoteRTTMap.clear(),this._sampleIdx=0}dispose(){const e=this._avgRtpStatsReporter._conference;e.statistics.removeConnectionStatsListener(this._onConnectionStats),this.isP2P||(e.off(gl,this._onRemoteStatsUpdated),e.off(dt,this._onUserLeft))}}class ph{constructor(e,t){this._n=t,t>0?(lh.info(`Avg RTP stats will be calculated every ${t} samples`),this._sampleIdx=0,this._conference=e,this._avgAudioBitrateUp=new hh("bitrate_audio_upload"),this._avgAudioBitrateDown=new hh("bitrate_audio_download"),this._avgVideoBitrateUp=new hh("bitrate_video_upload"),this._avgVideoBitrateDown=new hh("bitrate_video_download"),this._avgBandwidthUp=new hh("bandwidth_upload"),this._avgBandwidthDown=new hh("bandwidth_download"),this._avgPacketLossTotal=new hh("packet_loss_total"),this._avgPacketLossUp=new hh("packet_loss_upload"),this._avgPacketLossDown=new hh("packet_loss_download"),this._avgRemoteFPS=new hh("framerate_remote"),this._avgRemoteScreenFPS=new hh("framerate_screen_remote"),this._avgLocalFPS=new hh("framerate_local"),this._avgLocalScreenFPS=new hh("framerate_screen_local"),this._avgRemoteCameraPixels=new hh("pixels_remote"),this._avgRemoteScreenPixels=new hh("pixels_screen_remote"),this._avgLocalCameraPixels=new hh("pixels_local"),this._avgLocalScreenPixels=new hh("pixels_screen_local"),this._avgCQ=new hh("connection_quality"),this._cachedTransportStats=void 0,this._onLocalStatsUpdated=e=>{this._calculateAvgStats(e),this._maybeSendTransportAnalyticsEvent(e)},e.on(ml,this._onLocalStatsUpdated),this._onP2PStatusChanged=()=>{lh.debug("Resetting average stats calculation"),this._resetAvgStats(),this.jvbStatsMonitor._resetAvgStats(),this.p2pStatsMonitor._resetAvgStats()},e.on(Ue,this._onP2PStatusChanged),this._onJvb121StatusChanged=(e,t)=>{!0===t&&(lh.info("Resetting JVB avg RTP stats"),this._resetAvgJvbStats())},e.on(Ae,this._onJvb121StatusChanged),this.jvbStatsMonitor=new uh(this,!1,t),this.p2pStatsMonitor=new uh(this,!0,t)):lh.info("Avg RTP stats reports are disabled.")}_calculateAvgStats(e){if(!e)return void lh.error("No stats");const t=this._conference.isP2PActive(),n=this._conference.getParticipantCount();if(!t&&n<2)return;const i=e.bitrate,r=e.bandwidth,o=e.packetLoss,s=e.framerate,a=e.resolution;if(i)if(r)if(o)if(s)if(a){if(this._avgAudioBitrateUp.addNext(i.audio.upload),this._avgAudioBitrateDown.addNext(i.audio.download),this._avgVideoBitrateUp.addNext(i.video.upload),this._avgVideoBitrateDown.addNext(i.video.download),ci.supportsBandwidthStatistics()&&(this._avgBandwidthUp.addNext(r.upload),this._avgBandwidthDown.addNext(r.download)),this._avgPacketLossUp.addNext(o.upload),this._avgPacketLossDown.addNext(o.download),this._avgPacketLossTotal.addNext(o.total),this._avgCQ.addNext(e.connectionQuality),s&&(this._avgRemoteFPS.addNext(this._calculateAvgVideoFps(s,!1,Qo.VideoType.CAMERA)),this._avgRemoteScreenFPS.addNext(this._calculateAvgVideoFps(s,!1,Qo.VideoType.DESKTOP)),this._avgLocalFPS.addNext(this._calculateAvgVideoFps(s,!0,Qo.VideoType.CAMERA)),this._avgLocalScreenFPS.addNext(this._calculateAvgVideoFps(s,!0,Qo.VideoType.DESKTOP))),a&&(this._avgRemoteCameraPixels.addNext(this._calculateAvgVideoPixels(a,!1,Qo.VideoType.CAMERA)),this._avgRemoteScreenPixels.addNext(this._calculateAvgVideoPixels(a,!1,Qo.VideoType.DESKTOP)),this._avgLocalCameraPixels.addNext(this._calculateAvgVideoPixels(a,!0,Qo.VideoType.CAMERA)),this._avgLocalScreenPixels.addNext(this._calculateAvgVideoPixels(a,!0,Qo.VideoType.DESKTOP))),this._sampleIdx+=1,this._sampleIdx>=this._n){const i={p2p:t,conference_size:n};e.transport&&e.transport.length&&Object.assign(i,{local_candidate_type:e.transport[0].localCandidateType,remote_candidate_type:e.transport[0].remoteCandidateType,transport_type:e.transport[0].type}),this._avgAudioBitrateUp.appendReport(i),this._avgAudioBitrateDown.appendReport(i),this._avgVideoBitrateUp.appendReport(i),this._avgVideoBitrateDown.appendReport(i),ci.supportsBandwidthStatistics()&&(this._avgBandwidthUp.appendReport(i),this._avgBandwidthDown.appendReport(i)),this._avgPacketLossUp.appendReport(i),this._avgPacketLossDown.appendReport(i),this._avgPacketLossTotal.appendReport(i),this._avgRemoteFPS.appendReport(i),isNaN(this._avgRemoteScreenFPS.calculate())||this._avgRemoteScreenFPS.appendReport(i),this._avgLocalFPS.appendReport(i),isNaN(this._avgLocalScreenFPS.calculate())||this._avgLocalScreenFPS.appendReport(i),this._avgRemoteCameraPixels.appendReport(i),isNaN(this._avgRemoteScreenPixels.calculate())||this._avgRemoteScreenPixels.appendReport(i),this._avgLocalCameraPixels.appendReport(i),isNaN(this._avgLocalScreenPixels.calculate())||this._avgLocalScreenPixels.appendReport(i),this._avgCQ.appendReport(i),Mi.sendAnalytics(hn(i)),this._resetAvgStats()}}else lh.error("No resolution");else lh.error(\'No "framerate"\');else lh.error(\'No "packetloss"\');else lh.error(\'No "bandwidth"\');else lh.error(\'No "bitrate"\')}_calculateAvgVideoPixels(e,t,n){let i=0,r=0;const o=this._conference.myUserId();for(const s of Object.keys(e))if(t?s===o:s!==o){const o=t?null:this._conference.getParticipantById(s),a=e[s];if((t||o)&&a){const e=this._calculatePeerAvgVideoPixels(a,o,n);isNaN(e)||(i+=e,r+=1)}}return i/r}_calculatePeerAvgVideoPixels(e,t,n){let i=Object.keys(e).map((e=>Number(e))),r=null;const o=this._conference.getActivePeerConnection();t?(r=t.getTracksByMediaType(Ri.VIDEO),r&&(i=i.filter((e=>r.find((t=>!t.isMuted()&&t.getSSRC()===e&&t.videoType===n)))))):(r=this._conference.getLocalTracks(Ri.VIDEO),i=i.filter((e=>r.find((t=>!t.isMuted()&&o.getLocalSSRC(t)===e&&t.videoType===n)))));let s=0,a=0;for(const t of i){const n=Number(e[t].height)*Number(e[t].width);!isNaN(n)&&n>0&&(s+=n,a+=1)}return s/a}_calculateAvgVideoFps(e,t,n){let i=0,r=0;const o=this._conference.myUserId();for(const s of Object.keys(e))if(t?s===o:s!==o){const o=t?null:this._conference.getParticipantById(s),a=e[s];if((t||o)&&a){const e=this._calculatePeerAvgVideoFps(a,o,n);isNaN(e)||(i+=e,r+=1)}}return i/r}_calculatePeerAvgVideoFps(e,t,n){let i=Object.keys(e).map((e=>Number(e))),r=null;const o=this._conference.getActivePeerConnection();t?(r=t.getTracksByMediaType(Ri.VIDEO),r&&(i=i.filter((e=>r.find((t=>!t.isMuted()&&t.getSSRC()===e&&t.videoType===n)))))):(r=this._conference.getLocalTracks(Ri.VIDEO),i=i.filter((e=>r.find((t=>!t.isMuted()&&o.getLocalSSRC(t)===e&&t.videoType===n)))));let s=0,a=0;for(const t of i){const n=Number(e[t]);!isNaN(n)&&n>0&&(s+=n,a+=1)}return s/a}_maybeSendTransportAnalyticsEvent(e){if(!e||!e.transport||!e.transport.length)return;const t={p2p:e.transport[0].p2p,local_candidate_type:e.transport[0].localCandidateType,remote_candidate_type:e.transport[0].remoteCandidateType,transport_type:e.transport[0].type};var n;this._cachedTransportStats&&Et()(t,this._cachedTransportStats)||(this._cachedTransportStats=t,Mi.sendAnalytics((n=t,{type:kt.TYPE_OPERATIONAL,action:"transport.stats",attributes:n})))}_resetAvgJvbStats(){this._resetAvgStats(),this.jvbStatsMonitor._resetAvgStats()}_resetAvgStats(){this._avgAudioBitrateUp.reset(),this._avgAudioBitrateDown.reset(),this._avgVideoBitrateUp.reset(),this._avgVideoBitrateDown.reset(),this._avgBandwidthUp.reset(),this._avgBandwidthDown.reset(),this._avgPacketLossUp.reset(),this._avgPacketLossDown.reset(),this._avgPacketLossTotal.reset(),this._avgRemoteFPS.reset(),this._avgRemoteScreenFPS.reset(),this._avgLocalFPS.reset(),this._avgLocalScreenFPS.reset(),this._avgRemoteCameraPixels.reset(),this._avgRemoteScreenPixels.reset(),this._avgLocalCameraPixels.reset(),this._avgLocalScreenPixels.reset(),this._avgCQ.reset(),this._sampleIdx=0}dispose(){this._conference.off(Ue,this._onP2PStatusChanged),this._conference.off(ml,this._onLocalStatsUpdated),this._conference.off(Ae,this._onJvb121StatusChanged),this.jvbStatsMonitor.dispose(),this.p2pStatsMonitor.dispose()}}var mh=n(444),gh=n.n(mh);class fh{constructor(e){this.stats={users:{},dominantSpeakerId:null};const t=e.myUserId();this.stats.users[t]=new(gh())(t,null,!0),this.conference=e,e.addEventListener(ye,this._onDominantSpeaker.bind(this)),e.addEventListener(at,this._onUserJoin.bind(this)),e.addEventListener(dt,this._onUserLeave.bind(this)),e.addEventListener(_e,this._onDisplayNameChange.bind(this)),e.on(Ce,((e,t)=>{let{type:n,faceLandmarks:i}=t;"face-landmarks"===n&&this._onFaceLandmarkAdd(e.getId(),i)})),e.xmpp&&e.xmpp.addListener(Hi.XMPPEvents.SPEAKER_STATS_RECEIVED,this._updateStats.bind(this))}_onDominantSpeaker(e,t,n){const i=this.stats.users[this.stats.dominantSpeakerId],r=this.stats.users[e];i&&i.setDominantSpeaker(!1),r&&r.setDominantSpeaker(!0,n),this.stats.dominantSpeakerId=e}_onUserJoin(e,t){t.isHidden()||this.stats.users[e]||(this.stats.users[e]=new(gh())(e,t.getDisplayName()))}_onUserLeave(e){const t=this.stats.users[e];t&&t.markAsHasLeft()}_onDisplayNameChange(e,t){const n=this.stats.users[e];n&&n.setDisplayName(t)}_onFaceLandmarkAdd(e,t){const n=this.stats.users[e];n&&t&&n.addFaceLandmarks(t)}getStats(){return this.stats.users}_updateStats(e){for(const t in e){let n;const i=this.conference.getParticipantById(t);i&&i.isHidden()||(this.stats.users[t]?(n=this.stats.users[t],n.getDisplayName()||n.setDisplayName(e[t].displayName)):(n=new(gh())(t,e[t].displayName),this.stats.users[t]=n,n.markAsHasLeft()),n.totalDominantSpeakerTime=e[t].totalDominantSpeakerTime,Array.isArray(e[t].faceLandmarks)&&n.setFaceLandmarks(e[t].faceLandmarks))}}}const vh=n(810).getLogger("modules/version/ComponentsVersions.js");function _h(e){this.versions={},this.conference=e,this.conference.addCommandListener("versions",this.processVersions.bind(this))}let yh,Eh,Sh;_h.prototype.processVersions=function(e,t,n){this.conference.isFocus(n)?e.children.forEach((e=>{const t=e.attributes.name,n=e.value;this.versions[t]!==n&&(this.versions[t]=n,vh.info(`Got ${t} version: ${n}`))})):vh.warn(`Received versions not from the focus user: ${e}`,n)},_h.prototype.getComponentVersion=function(e){return this.versions[e]},function(e){e.STATUS_AVAILABLE="available",e.STATUS_UNDEFINED="undefined",e.STATUS_BUSY="busy"}(yh||(yh={})),function(e){e.STATE_ON="on",e.STATE_OFF="off",e.STATE_PENDING="pending",e.STATE_RETRYING="retrying",e.STATE_FAILED="failed"}(Eh||(Eh={})),function(e){e.ERROR_NO_CONNECTION="error_no_connection",e.ERROR_SESSION_EXISTS="error_session_already_exists"}(Sh||(Sh={}));const bh=yh.STATUS_AVAILABLE,Th=yh.STATUS_UNDEFINED,Ch=yh.STATUS_BUSY,xh=Eh.STATE_ON,Rh=Eh.STATE_OFF,Ah=Eh.STATE_PENDING,wh=Eh.STATE_RETRYING,Ih=Eh.STATE_FAILED,Ph=Sh.ERROR_NO_CONNECTION,Dh=Sh.ERROR_SESSION_EXISTS,Oh=(0,E.getLogger)("modules/videosipgw/JitsiVideoSIPGWSession.js"),kh="STATE_CHANGED";class Nh extends xr{constructor(e,t,n){super(),this.sipAddress=e,this.displayName=t,this.chatRoom=n,this.state=void 0}stop(){this.state!==Rh&&this.state!==Ih?this._sendJibriIQ("stop"):Oh.warn("Video SIP GW session already stopped or failed!")}start(){this.state!==xh&&this.state!==Rh&&this.state!==Ah&&this.state!==wh?this._sendJibriIQ("start"):Oh.warn("Video SIP GW session already started!")}setState(e,t){if(e===this.state)return;const n=this.state;this.state=e,this.eventEmitter.emit(kh,{address:this.sipAddress,failureReason:t,oldState:n,newState:this.state,displayName:this.displayName})}addStateListener(e){this.addListener(kh,e)}removeStateListener(e){this.removeListener(kh,e)}_sendJibriIQ(e){const t={xmlns:"http://jitsi.org/protocol/jibri",action:e,sipaddress:this.sipAddress};t.displayname=this.displayName;const n=(0,St.$iq)({to:this.chatRoom.focusMucJid,type:"set"}).c("jibri",t).up();Oh.debug(`${e} video SIP GW session`,n.nodeTree),this.chatRoom.connection.sendIQ(n,(()=>{}),(t=>{Oh.error(`Failed to ${e} video SIP GW session, error: `,t),this.setState(Ih)}))}}const Mh=(0,E.getLogger)("modules/videosipgw/VideoSIPGW.js");class Lh{constructor(e){this.chatRoom=e,this.eventEmitter=e.eventEmitter,Mh.debug("creating VideoSIPGW"),this.sessions={},this.sessionStateChangeListener=this.sessionStateChanged.bind(this),e.addPresenceListener("jibri-sip-call-state",this.handleJibriSIPState.bind(this))}handleJibriSIPState(e){const t=e.attributes;if(!t)return;Mh.debug("Handle video sip gw state : ",t);const n=t.state;if(n!==this.state)switch(n){case xh:case Rh:case Ah:case wh:case Ih:{const e=t.sipaddress;if(!e)return;const i=this.sessions[e];i?i.setState(n,t.failure_reason):Mh.warn("Video SIP GW session not found:",e)}}}createVideoSIPGWSession(e,t){if(this.sessions[e])return Mh.warn("There was already a Video SIP GW session for address",e),new Error(Dh);const n=new Nh(e,t,this.chatRoom);return n.addStateListener(this.sessionStateChangeListener),this.sessions[e]=n,n}sessionStateChanged(e){const t=e.address;if(e.newState===Rh||e.newState===Ih){const e=this.sessions[t];if(!e)return void Mh.error("Missing Video SIP GW session with address:",t);e.removeStateListener(this.sessionStateChangeListener),delete this.sessions[t]}this.eventEmitter.emit(Hi.XMPPEvents.VIDEO_SIP_GW_SESSION_STATE_CHANGED,e)}}const Fh=(0,E.getLogger)("modules/xmpp/SignalingLayerImpl.js"),jh="SourceInfo";class Vh extends Ac{constructor(){super(),this.ssrcOwners=new Map,this.chatRoom=null,this._localSourceState={},this._remoteSourceState={}}_addLocalSourceInfoToPresence(){return!!this.chatRoom&&this.chatRoom.addOrReplaceInPresence(jh,{value:JSON.stringify(this._localSourceState)})}_bindChatRoomEventHandlers(e){const t=(e,t)=>{this.eventEmitter.emit(yc,e,Ri.AUDIO,t)};this._audioMuteHandler=(e,n)=>{this._doesEndpointSendNewSourceInfo(n)||t(n,"true"===e.value)},e.addPresenceListener("audiomuted",this._audioMuteHandler);const n=(e,t)=>{this.eventEmitter.emit(yc,e,Ri.VIDEO,t)};this._videoMuteHandler=(e,t)=>{this._doesEndpointSendNewSourceInfo(t)||n(t,"true"===e.value)},e.addPresenceListener("videomuted",this._videoMuteHandler);const i=(e,t)=>{this.eventEmitter.emit(Ec,e,t)};this._videoTypeHandler=(e,t)=>{this._doesEndpointSendNewSourceInfo(t)||i(t,e.value)},e.addPresenceListener("videoType",this._videoTypeHandler),this._sourceInfoHandler=(e,t)=>{const n=t,{value:i}=e,r=_r(i),o=this._doesEndpointSendNewSourceInfo(n),s=this._remoteSourceState[n]||(this._remoteSourceState[n]={});for(const e of Object.keys(r)){var a;let n=!1;const i=xc(e),d=Boolean(r[e].muted),c=s[e]||(s[e]={sourceName:e});c.muted!==d&&(n=!0,c.muted=d,o&&!this._localSourceState[e]&&this.eventEmitter.emit(Sc,e,d));const l=i===Ri.VIDEO?null!==(a=r[e].videoType)&&void 0!==a?a:Qo.VideoType.CAMERA:void 0;c.videoType!==l&&(c.videoType=l,n=!0,o&&!this._localSourceState[e]&&this.eventEmitter.emit(Tc,e,l)),n&&Ai.isSsrcRewritingSupported()&&this.eventEmitter.emit(bc,e,t,d,l)}const d=Object.keys(r);for(const e of Object.keys(s))-1===d.indexOf(e)&&delete s[e]},e.addPresenceListener("SourceInfo",this._sourceInfoHandler),this._memberLeftHandler=e=>{const t=St.Strophe.getResourceFromJid(e);delete this._remoteSourceState[t]},e.addEventListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,this._memberLeftHandler)}_doesEndpointSendNewSourceInfo(e){var t;const n=null===(t=this.chatRoom)||void 0===t?void 0:t.getLastPresence(e);return Boolean(n&&n.find((e=>e.tagName===jh)))}_logOwnerChangedMessage(e){Ai.isSsrcRewritingSupported()?Fh.debug(e):Fh.error(e)}getPeerMediaInfo(e,t,n){var i;const r=null===(i=this.chatRoom)||void 0===i?void 0:i.getLastPresence(e);if(!r)return void Fh.warn(`getPeerMediaInfo - no presence stored for: ${e}`);if(!this._doesEndpointSendNewSourceInfo(e))return(()=>{if(this.chatRoom)return this.chatRoom.getMediaPresenceInfo(e,t);Fh.warn("Requested peer media info, before room was set")})();if(n)return this.getPeerSourceInfo(e,n);const o={muted:!0};if(t===Ri.VIDEO){o.videoType=void 0;const e=ms(r,"jitsi_participant_codecList"),t=ms(r,"jitsi_participant_codecType");var s,a;e.length?o.codecList=null!==(s=null===(a=e[0].value)||void 0===a?void 0:a.split(","))&&void 0!==s?s:[]:t.length>0&&(o.codecType=t[0].value)}return o}getPeerSourceInfo(e,t){var n;const i={muted:!0,videoType:xc(t)===Ri.VIDEO?Qo.VideoType.CAMERA:void 0};return this._remoteSourceState[e]?null!==(n=this._remoteSourceState[e][t])&&void 0!==n?n:i:void 0}getSSRCOwner(e){var t;return null===(t=this.ssrcOwners.get(e))||void 0===t?void 0:t.endpointId}getTrackSourceName(e){var t;return null===(t=this.ssrcOwners.get(e))||void 0===t?void 0:t.sourceName}removeSSRCOwners(e){if(null!=e&&e.length)for(const t of e)this.ssrcOwners.delete(t)}setChatRoom(e){const t=this.chatRoom;this.chatRoom=e,t&&(t.removePresenceListener("audiomuted",this._audioMuteHandler),t.removePresenceListener("videomuted",this._videoMuteHandler),t.removePresenceListener("videoType",this._videoTypeHandler),this._sourceInfoHandler&&t.removePresenceListener(jh,this._sourceInfoHandler),this._memberLeftHandler&&t.removeEventListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,this._memberLeftHandler)),e&&(this._bindChatRoomEventHandlers(e),this._addLocalSourceInfoToPresence())}setSSRCOwner(e,t,n){if("number"!=typeof e)throw new TypeError(`SSRC(${e}) must be a number`);const i=this.ssrcOwners.get(e);if(i){const{endpointId:e,sourceName:r}=i;e===t&&r===n||this._logOwnerChangedMessage(`SSRC owner re-assigned from ${i}(source-name=${r}) to ${t}(source-name=${n})`)}this.ssrcOwners.set(e,{endpointId:t,sourceName:n})}setTrackMuteStatus(e,t){return this._localSourceState[e]||(this._localSourceState[e]={}),this._localSourceState[e].muted=t,Fh.debug(`Mute state of ${e} changed to muted=${t}`),!!this.chatRoom&&this._addLocalSourceInfoToPresence()}setTrackVideoType(e,t){return this._localSourceState[e]||(this._localSourceState[e]={}),this._localSourceState[e].videoType!==t&&(this._localSourceState[e].videoType=t===Qo.VideoType.CAMERA?void 0:t,this._addLocalSourceInfoToPresence())}updateSsrcOwnersOnLeave(e){const t=[];this.ssrcOwners.forEach(((n,i)=>{let{endpointId:r}=n;r===e&&t.push(i)})),null!=t&&t.length&&this.removeSSRCOwners(t)}}let Uh;!function(e){e.CAMERA="camera",e.DESKTOP="desktop",e.DESKTOP_HIGH_FPS="desktop_high_fps",e.NONE="none"}(Uh||(Uh={}));const Hh=(0,E.getLogger)("JitsiConference.js");function $h(e){return"string"==typeof e?Object.values(Ds).find((t=>t===e.toLowerCase())):null}function Jh(e){var t,n,i;if(!e.name||e.name.toLowerCase()!==e.name.toString()){const t="Invalid conference name (no conference name passed or it contains invalid characters like capital letters)!",n=e.name?`roomName=${e.name}; condition - ${e.name.toLowerCase()}!==${e.name.toString()}`:"No room name passed!";throw Hh.error(`${t} ${n}`),new Error(t)}if(this.connection=e.connection,this.xmpp=null===(t=this.connection)||void 0===t?void 0:t.xmpp,this.xmpp.isRoomCreated(e.name,e.customDomain)){const e="A conference with the same name has already been created!";throw delete this.connection,delete this.xmpp,Hh.error(e),new Error(e)}this.eventEmitter=new ii,this.options=e,this.eventManager=new Ji(this),this.participants=new Map,this._signalingLayer=new Vh,this._init(e),this.componentsVersions=new _h(this),this.jvbJingleSession=null,this.lastDominantSpeaker=null,this.dtmfManager=null,this.somebodySupportsDTMF=!1,this.authEnabled=!1,this.startAudioMuted=!1,this.startVideoMuted=!1,this.startMutedPolicy={audio:!1,video:!1},this.isMutedByFocus=!1,this.mutedByFocusActor=null,this.isVideoMutedByFocus=!1,this.mutedVideoByFocusActor=null,this.wasStopped=!1,this.properties={},this.connectionQuality=new Sl(this,this.eventEmitter,e),this.avgRtpStatsReporter=new ph(this,e.config.avgRtpStatsN||15),e.config.disableAudioLevels||(this._audioOutputProblemDetector=new ch(this)),this.isJvbConnectionInterrupted=!1,this.speakerStatsCollector=new fh(this),this.deferredStartP2PTask=null;const r=parseInt(e.config.p2p&&e.config.p2p.backToP2PDelay,10);this.backToP2PDelay=isNaN(r)?5:r,Hh.info(`backToP2PDelay: ${this.backToP2PDelay}`),this.isP2PConnectionInterrupted=!1,this.p2p=!1,this.p2pJingleSession=null,this.videoSIPGWHandler=new Lh(this.room),this.recordingManager=new ah(this.room),this._conferenceJoinAnalyticsEventSent=void 0,this.isE2EESupported()&&(Hh.info("End-to-End Encryption is supported"),this._e2eEncryption=new so(this)),Ai.isRunInLiteModeEnabled()&&(Hh.info("Lite mode enabled"),this._liteModeContext=new Yl(this)),this._audioSenderLimitReached=void 0,this._videoSenderLimitReached=void 0,this._firefoxP2pEnabled=ci.isVersionGreaterThan(109)&&(null===(n=null===(i=this.options.config.testing)||void 0===i?void 0:i.enableFirefoxP2p)||void 0===n||n)}function Bh(e,t,n){this.appID=e,this.token=t,this.options=n,Ai.init(n.flags||{}),this.xmpp=new Pa(n,t),this.addEventListener(ur,((e,t,n,i)=>{Mi.sendAnalyticsAndLog(rn(e,t,i))})),this.addEventListener(lr,(e=>{e&&Mi.sendAnalytics(Xt,{message:e})}))}let qh;Jh.prototype.constructor=Jh,Jh.resourceCreator=function(e,t){let n;var i;t?n=co().randomHexString(8).toLowerCase():(n=null===(i=St.Strophe.getNodeFromJid(e))||void 0===i?void 0:i.substr(0,8).toLowerCase(),n&&/[0-9a-f]{8}/g.test(n)||(n=co().randomHexString(8).toLowerCase()));return n},Jh.prototype._init=function(){var e,t,n,i,r,o,s,a,d;let c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.eventManager.setupXMPPListeners();const{config:l}=this.options,h={jvb:{preferenceOrder:ci.isMobileDevice()&&null!==(e=l.videoQuality)&&void 0!==e&&e.mobileCodecPreferenceOrder?l.videoQuality.mobileCodecPreferenceOrder:null===(t=l.videoQuality)||void 0===t?void 0:t.codecPreferenceOrder,disabledCodec:$h(null===(n=l.videoQuality)||void 0===n?void 0:n.disabledCodec),preferredCodec:$h(null===(i=l.videoQuality)||void 0===i?void 0:i.preferredCodec)},p2p:{preferenceOrder:ci.isMobileDevice()&&null!==(r=l.p2p)&&void 0!==r&&r.mobileCodecPreferenceOrder?l.p2p.mobileCodecPreferenceOrder:null===(o=l.p2p)||void 0===o?void 0:o.codecPreferenceOrder,disabledCodec:$h(null===(s=l.p2p)||void 0===s?void 0:s.disabledCodec),preferredCodec:$h(null===(a=l.p2p)||void 0===a?void 0:a.preferredCodec)}};if(this.codecSelection=new La(this,h),this._statsCurrentId=l.statisticsId?l.statisticsId:$o.callStatsUserName,this.room=this.xmpp.createRoom(this.options.name,{...l,statsId:this._statsCurrentId},Jh.resourceCreator),this._signalingLayer.setChatRoom(this.room),this._signalingLayer.on(_c.SOURCE_UPDATED,((e,t,n,i)=>{const r=this.participants.get(t),o=xc(e);r&&(r._setSources(o,n,e,i),this.eventEmitter.emit($e,r))})),this._onIceConnectionInterrupted=this._onIceConnectionInterrupted.bind(this),this.room.addListener(Hi.XMPPEvents.CONNECTION_INTERRUPTED,this._onIceConnectionInterrupted),this._onIceConnectionRestored=this._onIceConnectionRestored.bind(this),this.room.addListener(Hi.XMPPEvents.CONNECTION_RESTORED,this._onIceConnectionRestored),this._onIceConnectionEstablished=this._onIceConnectionEstablished.bind(this),this.room.addListener(Hi.XMPPEvents.CONNECTION_ESTABLISHED,this._onIceConnectionEstablished),this._updateProperties=this._updateProperties.bind(this),this.room.addListener(Hi.XMPPEvents.CONFERENCE_PROPERTIES_CHANGED,this._updateProperties),this._sendConferenceJoinAnalyticsEvent=this._sendConferenceJoinAnalyticsEvent.bind(this),this.room.addListener(Hi.XMPPEvents.MEETING_ID_SET,this._sendConferenceJoinAnalyticsEvent),this._removeLocalSourceOnReject=this._removeLocalSourceOnReject.bind(this),this._updateRoomPresence=this._updateRoomPresence.bind(this),this.room.addListener(Hi.XMPPEvents.SESSION_ACCEPT,this._updateRoomPresence),this.room.addListener(Hi.XMPPEvents.SOURCE_ADD,this._updateRoomPresence),this.room.addListener(Hi.XMPPEvents.SOURCE_ADD_ERROR,this._removeLocalSourceOnReject),this.room.addListener(Hi.XMPPEvents.SOURCE_REMOVE,this._updateRoomPresence),null!==(d=l.e2eping)&&void 0!==d&&d.enabled&&(this.e2eping=new Gl(this,l,((e,t)=>{try{this.sendMessage(e,t,!0)}catch(e){Hh.warn("Failed to send E2E ping request or response.",e&&e.msg)}}))),this.rtc||(this.rtc=new pl(this,c),this.eventManager.setupRTCListeners(),this._registerRtcListeners(this.rtc)),this.receiveVideoController=new th(this,this.rtc),this.sendVideoController=new ih(this,this.rtc),this.statistics||(this.statistics=new Mi(this,{aliasName:this._statsCurrentId,userName:l.statisticsDisplayName?l.statisticsDisplayName:this.myUserId(),confID:l.confID||`${this.connection.options.hosts.domain}/${this.options.name}`,roomName:this.options.name,applicationName:l.applicationName}),Mi.analytics.addPermanentProperties({callstats_name:this._statsCurrentId}),l.longTasksStatsInterval&&this.statistics.attachLongTasksStats()),this.eventManager.setupChatRoomListeners(),this.eventManager.setupStatisticsListeners(),l.enableTalkWhileMuted&&ci.supportsVADDetection())if(l.createVADProcessor){Hh.info("Using VAD detection for generating talk while muted events"),this._audioAnalyser||(this._audioAnalyser=new Fl(this,l.createVADProcessor));const e=new Vl;e.on(Dl,(()=>this.eventEmitter.emit(et))),this._audioAnalyser.addVADDetectionService(e)}else Hh.warn("No VAD Processor was provided. Talk while muted detection service was not initialized!");if(l.enableNoisyMicDetection&&ci.supportsVADDetection())if(l.createVADProcessor){this._audioAnalyser||(this._audioAnalyser=new Fl(this,l.createVADProcessor));const e=new jl;e.on(wl,(()=>this.eventEmitter.emit(je))),this._audioAnalyser.addVADDetectionService(e)}else Hh.warn("No VAD Processor was provided. Noisy microphone detection service was not initialized!");l.enableNoAudioDetection&&!l.disableAudioLevels&&_i.isLocalStatsSupported()&&(this._noAudioSignalDetection=new Ol(this),this._noAudioSignalDetection.on(Al,(()=>{this.eventEmitter.emit(Fe)})),this._noAudioSignalDetection.on(Rl,(e=>{this.eventEmitter.emit(z,e)}))),"channelLastN"in l&&this.setLastN(l.channelLastN),this.jvb121Status=new Kl(this),this.p2pDominantSpeakerDetection=new kl(this),l&&l.deploymentInfo&&l.deploymentInfo.userRegion&&this.setLocalParticipantProperty("region",l.deploymentInfo.userRegion),this.setLocalParticipantProperty("codecList",this.codecSelection.getCodecPreferenceList("jvb")),l&&l.transcriptionLanguage&&"en-US"!==l.transcriptionLanguage&&this.setLocalParticipantProperty("transcription_language",l.transcriptionLanguage)},Jh.prototype.join=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.room&&this.room.join(e,t).then((()=>this._maybeSetSITimeout()))},Jh.prototype.authenticateAndUpgradeRole=function(e){return Da.call(this,{...e,onCreateResource:Jh.resourceCreator})},Jh.prototype.isJoined=function(){return this.room&&this.room.joined},Jh.prototype.isP2PEnabled=function(){return Boolean(this.options.config.p2p&&this.options.config.p2p.enabled)||void 0===this.options.config.p2p},Jh.prototype.isP2PTestModeEnabled=function(){return Boolean(this.options.config.testing&&this.options.config.testing.p2pTestMode)},Jh.prototype.leave=async function(e){if(this.avgRtpStatsReporter&&(this.avgRtpStatsReporter.dispose(),this.avgRtpStatsReporter=null),this._audioOutputProblemDetector&&(this._audioOutputProblemDetector.dispose(),this._audioOutputProblemDetector=null),this.e2eping&&(this.e2eping.stop(),this.e2eping=null),this.getLocalTracks().forEach((e=>this.onLocalTrackRemoved(e))),this.rtc.closeBridgeChannel(),this._sendConferenceLeftAnalyticsEvent(),this.statistics&&this.statistics.dispose(),this._delayedIceFailed&&this._delayedIceFailed.cancel(),this._maybeClearSITimeout(),this._maybeClearDeferredStartP2P(),this.jvbJingleSession&&(this.jvbJingleSession.close(),this.jvbJingleSession=null),this.p2pJingleSession&&(this.p2pJingleSession.close(),this.p2pJingleSession=null),!this.room)throw new Error("You have already left the conference");const t=this.room;let n;t.removeListener(Hi.XMPPEvents.CONNECTION_INTERRUPTED,this._onIceConnectionInterrupted),t.removeListener(Hi.XMPPEvents.CONNECTION_RESTORED,this._onIceConnectionRestored),t.removeListener(Hi.XMPPEvents.CONNECTION_ESTABLISHED,this._onIceConnectionEstablished),t.removeListener(Hi.XMPPEvents.CONFERENCE_PROPERTIES_CHANGED,this._updateProperties),t.removeListener(Hi.XMPPEvents.MEETING_ID_SET,this._sendConferenceJoinAnalyticsEvent),t.removeListener(Hi.XMPPEvents.SESSION_ACCEPT,this._updateRoomPresence),t.removeListener(Hi.XMPPEvents.SOURCE_ADD,this._updateRoomPresence),t.removeListener(Hi.XMPPEvents.SOURCE_ADD_ERROR,this._removeLocalSourceOnReject),t.removeListener(Hi.XMPPEvents.SOURCE_REMOVE,this._updateRoomPresence),this.eventManager.removeXMPPListeners(),this._signalingLayer.setChatRoom(null),this.room=null;try{await t.leave(e)}catch(e){n=e,this.getParticipants().forEach((e=>this.onMemberLeft(e.getJid())))}if(this.rtc&&this.rtc.destroy(),n)throw n},Jh.prototype.isEndConferenceSupported=function(){return Boolean(this.room&&this.room.xmpp.endConferenceComponentAddress)},Jh.prototype.end=function(){if(this.isEndConferenceSupported()){if(!this.room)throw new Error("You have already left the conference");this.room.end()}else Hh.warn("Cannot end conference: is not supported.")},Jh.prototype.getActiveMediaSession=function(){return this.isP2PActive()?this.p2pJingleSession:this.jvbJingleSession},Jh.prototype.getMediaSessions=function(){const e=[];return this.jvbJingleSession&&e.push(this.jvbJingleSession),this.p2pJingleSession&&e.push(this.p2pJingleSession),e},Jh.prototype._registerRtcListeners=function(e){e.addListener(ji.default.DATA_CHANNEL_OPEN,(()=>{for(const e of this.rtc.localTracks)e.isVideoTrack()&&this._sendBridgeVideoTypeMessage(e)}))},Jh.prototype._sendBridgeVideoTypeMessage=function(e){let t=!e||e.isMuted()?Uh.NONE:e.getVideoType();t===Uh.DESKTOP&&this._desktopSharingFrameRate>5&&(t=Uh.DESKTOP_HIGH_FPS),e&&this.rtc.sendSourceVideoType(e.getSourceName(),t)},Jh.prototype.getName=function(){return this.options.name.toString()},Jh.prototype.getConnection=function(){return this.connection},Jh.prototype.isAuthEnabled=function(){return this.authEnabled},Jh.prototype.isLoggedIn=function(){return Boolean(this.authIdentity)},Jh.prototype.getAuthLogin=function(){return this.authIdentity},Jh.prototype.getLocalTracks=function(e){let t=[];return this.rtc&&(t=this.rtc.getLocalTracks(e)),t},Jh.prototype.getLocalAudioTrack=function(){return this.rtc?this.rtc.getLocalAudioTrack():null},Jh.prototype.getLocalVideoTrack=function(){return this.rtc?this.rtc.getLocalVideoTrack():null},Jh.prototype.getLocalVideoTracks=function(){return this.rtc?this.rtc.getLocalVideoTracks():null},Jh.prototype.getPerformanceStats=function(){return{longTasksStats:this.statistics.getLongTasksStats()}},Jh.prototype.on=function(e,t){this.eventEmitter&&this.eventEmitter.on(e,t)},Jh.prototype.once=function(e,t){this.eventEmitter&&this.eventEmitter.once(e,t)},Jh.prototype.off=function(e,t){this.eventEmitter&&this.eventEmitter.removeListener(e,t)},Jh.prototype.addEventListener=Jh.prototype.on,Jh.prototype.removeEventListener=Jh.prototype.off,Jh.prototype.addCommandListener=function(e,t){this.room&&this.room.addPresenceListener(e,t)},Jh.prototype.removeCommandListener=function(e,t){this.room&&this.room.removePresenceListener(e,t)},Jh.prototype.sendTextMessage=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"body";this.room&&this.room.sendMessage(e,t)},Jh.prototype.sendPrivateTextMessage=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"body";this.room&&this.room.sendPrivateMessage(e,t,n)},Jh.prototype.sendCommand=function(e,t){this.room?this.room.addOrReplaceInPresence(e,t)&&this.room.sendPresence():Hh.warn("Not sending a command, room not initialized.")},Jh.prototype.sendCommandOnce=function(e,t){this.sendCommand(e,t),this.removeCommand(e)},Jh.prototype.removeCommand=function(e){this.room&&this.room.removeFromPresence(e)},Jh.prototype.setDisplayName=function(e){if(this.room){const t="nick";e?this.room.addOrReplaceInPresence(t,{attributes:{xmlns:"http://jabber.org/protocol/nick"},value:e})&&this.room.sendPresence():this.room.getFromPresence(t)&&(this.room.removeFromPresence(t),this.room.sendPresence())}},Jh.prototype.setSubject=function(e){this.room&&this.isModerator()?this.room.setSubject(e):Hh.warn(`Failed to set subject, ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator"}`)},Jh.prototype.getTranscriptionStatus=function(){return this.room.transcriptionStatus},Jh.prototype.addTrack=function(e){if(!e)throw new Error("addTrack - a track is required");const t=e.getType(),n=this.rtc.getLocalTracks(t);if(n.length>0){if(e===n[0])return Promise.resolve(e);if(t===Ri.VIDEO&&!n.find((t=>t.getVideoType()===e.getVideoType()))){var i;const n=Cc(this.myUserId(),t,null===(i=this.getLocalTracks(t))||void 0===i?void 0:i.length);e.setSourceName(n);const r=[];return this.p2pJingleSession&&r.push(this.p2pJingleSession.addTracks([e])),this.jvbJingleSession&&r.push(this.jvbJingleSession.addTracks([e])),Promise.all(r).then((()=>{this._setupNewTrack(e),this._sendBridgeVideoTypeMessage(e),this._updateRoomPresence(this.getActiveMediaSession()),(this.isMutedByFocus||this.isVideoMutedByFocus)&&this._fireMuteChangeEvent(e)}))}return Promise.reject(new Error(`Cannot add second ${t} track to the conference`))}return this.replaceTrack(null,e).then((()=>{e.getVideoType()===Qo.VideoType.DESKTOP&&this._updateRoomPresence(this.getActiveMediaSession())}))},Jh.prototype._fireAudioLevelChangeEvent=function(e,t){const n=this.getActivePeerConnection();t&&n!==t||this.eventEmitter.emit(nt,this.myUserId(),e)},Jh.prototype._fireMuteChangeEvent=function(e){let t;if(this.isMutedByFocus&&e.isAudioTrack()&&!e.isMuted()?(this.isMutedByFocus=!1,this.room.muteParticipant(this.room.myroomjid,!1,Ri.AUDIO)):this.isVideoMutedByFocus&&e.isVideoTrack()&&!e.isMuted()&&(this.isVideoMutedByFocus=!1,this.room.muteParticipant(this.room.myroomjid,!1,Ri.VIDEO)),this.mutedByFocusActor&&e.isAudioTrack()){const e=St.Strophe.getResourceFromJid(this.mutedByFocusActor);t=this.participants.get(e)}else if(this.mutedVideoByFocusActor&&e.isVideoTrack()){const e=St.Strophe.getResourceFromJid(this.mutedVideoByFocusActor);t=this.participants.get(e)}const n=ci.isReactNative()?e.videoType===Qo.VideoType.DESKTOP:ci.doesVideoMuteByStreamRemove();e.isVideoTrack()&&!n&&this._sendBridgeVideoTypeMessage(e),this.eventEmitter.emit(it,e,t)},Jh.prototype._getInitialLocalTracks=function(){return this.getLocalTracks().filter((e=>{const t=e.getType();return!(t!==Ri.AUDIO||(this.isStartAudioMuted()||this.startMutedPolicy.audio)&&!ci.isWebKitBased()&&!ci.isReactNative())||t===Ri.VIDEO&&!this.isStartVideoMuted()&&!this.startMutedPolicy.video||(this.onLocalTrackRemoved(e),!1)}))},Jh.prototype.onLocalTrackRemoved=function(e){e.setConference(null),this.rtc.removeLocalTrack(e),e.removeEventListener(Rt,e.muteHandler),e.isAudioTrack()&&e.removeEventListener(Ct,e.audioLevelHandler),this.eventEmitter.emit(rt,e)},Jh.prototype.removeTrack=function(e){return this.replaceTrack(e,null)},Jh.prototype.replaceTrack=function(e,t){const n=null==e?void 0:e.getVideoType(),i=(null==e?void 0:e.getType())||(null==t?void 0:t.getType()),r=null==t?void 0:t.getVideoType();if(e&&t&&n!==r)throw new Error(`Replacing a track of videoType=${n} with a track of videoType=${r} is not supported in this mode.`);if(t){var o;const n=e?e.getSourceName():Cc(this.myUserId(),i,null===(o=this.getLocalTracks(i))||void 0===o?void 0:o.length);t.setSourceName(n)}const s=this===(null==e?void 0:e.conference);return s&&e.disposed||null!=t&&t.disposed?Promise.reject(new dr(tr)):(e&&!s&&Hh.warn(`JitsiConference.replaceTrack oldTrack (${e} does not belong to this conference`),this._doReplaceTrack(s?e:null,t).then((()=>(!s||e.isMuted()||t||e._sendMuteStatus(!0),s&&this.onLocalTrackRemoved(e),t&&this._setupNewTrack(t),(s&&null!=e&&e.isVideoTrack()||null!=t&&t.isVideoTrack())&&this._sendBridgeVideoTypeMessage(t),this._updateRoomPresence(this.getActiveMediaSession()),null!==t&&(this.isMutedByFocus||this.isVideoMutedByFocus)&&this._fireMuteChangeEvent(t),Promise.resolve()))).catch((e=>(Hh.error(`replaceTrack failed: ${null==e?void 0:e.stack}`),Promise.reject(e)))))},Jh.prototype._doReplaceTrack=function(e,t){const n=[];return this.jvbJingleSession?n.push(this.jvbJingleSession.replaceTrack(e,t)):Hh.info("_doReplaceTrack - no JVB JingleSession"),this.p2pJingleSession?n.push(this.p2pJingleSession.replaceTrack(e,t)):Hh.info("_doReplaceTrack - no P2P JingleSession"),Promise.all(n)},Jh.prototype._removeLocalSourceOnReject=function(e,t,n){if(!e)return;Hh.warn(`Source-add rejected on ${e}, reason="${null==t?void 0:t.reason}", message="${null==t?void 0:t.msg}"`);const i=this.getLocalTracks(n)[0];this.eventEmitter.emit(ot,i)},Jh.prototype._setupNewTrack=function(e){const t=e.getType();if(!e.getSourceName()){var n;const i=Cc(this.myUserId(),t,null===(n=this.getLocalTracks(t))||void 0===n?void 0:n.length);e.setSourceName(i)}this.rtc.addLocalTrack(e),e.setConference(this),e.muteHandler=this._fireMuteChangeEvent.bind(this,e),e.addEventListener(Rt,e.muteHandler),e.isAudioTrack()&&(e.audioLevelHandler=this._fireAudioLevelChangeEvent.bind(this),e.addEventListener(Ct,e.audioLevelHandler)),this.eventEmitter.emit(tt,e)},Jh.prototype._setNewVideoType=function(e){let t=!1;return e&&(t=this._signalingLayer.setTrackVideoType(e.getSourceName(),e.videoType)),t},Jh.prototype._setTrackMuteStatus=function(e,t,n){let i=!1;return t&&(i=this._signalingLayer.setTrackMuteStatus(t.getSourceName(),n),i&&Hh.debug(`Mute state of ${t} changed to muted=${n}`)),i},Jh.prototype._addLocalTrackToPc=function(e){const t=[];return e.conference===this?(this.jvbJingleSession?t.push(this.jvbJingleSession.addTrackToPc(e)):Hh.debug("Add local MediaStream - no JVB Jingle session started yet"),this.p2pJingleSession?t.push(this.p2pJingleSession.addTrackToPc(e)):Hh.debug("Add local MediaStream - no P2P Jingle session started yet")):t.push(this.addTrack(e)),Promise.allSettled(t)},Jh.prototype._removeLocalTrackFromPc=function(e){const t=[];return e.conference===this&&(this.jvbJingleSession?t.push(this.jvbJingleSession.removeTrackFromPc(e)):Hh.debug("Remove local MediaStream - no JVB JingleSession started yet"),this.p2pJingleSession?t.push(this.p2pJingleSession.removeTrackFromPc(e)):Hh.debug("Remove local MediaStream - no P2P JingleSession started yet")),Promise.allSettled(t)},Jh.prototype.getRole=function(){return this.room.role},Jh.prototype.isHidden=function(){return this.connection?St.Strophe.getDomainFromJid(this.connection.getJid())===this.options.config.hiddenDomain:null},Jh.prototype.isModerator=function(){return this.room?this.room.isModerator():null},Jh.prototype.lock=function(e){return this.isModerator()?new Promise(((t,n)=>{this.room.lockRoom(e||"",(()=>t()),(e=>n(e)),(()=>n(U)))})):Promise.reject(new Error("You are not moderator."))},Jh.prototype.unlock=function(){return this.lock()},Jh.prototype.getLastN=function(){return this.receiveVideoController.getLastN()},Jh.prototype.getForwardedSources=function(){return this.rtc.getForwardedSources()},Jh.prototype.setLastN=function(e){if(!Number.isInteger(e)&&!Number.parseInt(e,10))throw new Error(`Invalid value for lastN: ${e}`);const t=Number(e);if(t<-1)throw new RangeError("lastN cannot be smaller than -1");if(this.receiveVideoController.setLastN(t),this.p2pJingleSession){const e=0!==t;this.p2pJingleSession.setP2pVideoTransferActive(e).catch((t=>{Hh.error(`Failed to adjust video transfer status (${e})`,t)}))}},Jh.prototype.getParticipants=function(){return Array.from(this.participants.values())},Jh.prototype.getParticipantCount=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.getParticipants();return e||(t=t.filter((e=>!e.isHidden()))),t.length+1},Jh.prototype.getParticipantById=function(e){return this.participants.get(e)},Jh.prototype.grantOwner=function(e){const t=this.getParticipantById(e);t&&this.room.setAffiliation(t.getConnectionJid(),"owner")},Jh.prototype.revokeOwner=function(e){const t=this.getParticipantById(e),n=this.myUserId()===e,i=this.isMembersOnly()?"member":"none";n?this.room.setAffiliation(this.connection.getJid(),i):t&&this.room.setAffiliation(t.getConnectionJid(),i)},Jh.prototype.kickParticipant=function(e,t){const n=this.getParticipantById(e);n&&this.room.kick(n.getJid(),t)},Jh.prototype._maybeClearSITimeout=function(){this._sessionInitiateTimeout&&(this.jvbJingleSession||this.getParticipantCount()<2)&&(window.clearTimeout(this._sessionInitiateTimeout),this._sessionInitiateTimeout=null)},Jh.prototype._maybeSetSITimeout=function(){!this.jvbJingleSession&&this.getParticipantCount()>=2&&!this._sessionInitiateTimeout&&(this._sessionInitiateTimeout=window.setTimeout((()=>{this._sessionInitiateTimeout=null,Mi.sendAnalytics(dn(Ht,{p2p:!1,value:5e3}))}),5e3))},Jh.prototype.muteParticipant=function(e,t){const n=t||Ri.AUDIO;if(n!==Ri.AUDIO&&n!==Ri.VIDEO)return void Hh.error(`Unsupported media type: ${n}`);const i=this.getParticipantById(e);i&&this.room.muteParticipant(i.getJid(),!0,n)},Jh.prototype.onMemberJoined=function(e,t,n,i,r,o,s,a,d,c,l){var h,u,p,m;const g=St.Strophe.getResourceFromJid(e);if("focus"===g||this.myUserId()===g)return;const f=new Bi(e,this,t,i,r,o,s);f.setConnectionJid(d),f.setRole(n),f.setBotType(a),f.setFeatures(c),f.setIsReplacing(l);const v=this.isP2PActive()?null!==(h=null===(u=this.p2pJingleSession)||void 0===u?void 0:u.peerconnection.getRemoteTracks(g))&&void 0!==h?h:[]:null!==(p=null===(m=this.jvbJingleSession)||void 0===m?void 0:m.peerconnection.getRemoteTracks(g))&&void 0!==p?p:[];for(const e of v)f._tracks.push(e);this.participants.set(g,f),this.eventEmitter.emit(at,g,f),this._updateFeatures(f),this.isJoined()&&this._maybeStartOrStopP2P(),this._maybeSetSITimeout()},Jh.prototype._onMucJoined=function(){this._numberOfParticipantsOnJoin=this.getParticipantCount(),this._maybeStartOrStopP2P()},Jh.prototype._updateFeatures=function(e){e.getFeatures().then((t=>{e._supportsDTMF=t.has("urn:xmpp:jingle:dtmf:0"),this.updateDTMFSupport(),t.has(wa)&&e.setProperty("features_jigasi",!0),t.has(Ia)&&e.setProperty("features_e2ee",!0)})).catch((()=>!1))},Jh.prototype._onMemberBotTypeChanged=function(e,t){const n=this.getParticipants().find((t=>t.getJid()===e));if(n){n.setBotType(t);const i=St.Strophe.getResourceFromJid(e);this.eventEmitter.emit(ne,i,t)}n.getBotType()||this._maybeStartOrStopP2P()},Jh.prototype.onMemberLeft=function(e,t){const n=St.Strophe.getResourceFromJid(e);if("focus"===n||this.myUserId()===n)return;const i=this.getMediaSessions();let r=[];for(const e of i){const t=e.peerconnection.getRemoteTracks(n);t&&(r=[...r,...t]),e._signalingLayer.updateSsrcOwnersOnLeave(n),Ai.isSsrcRewritingSupported()||e.removeRemoteStreamsOnLeave(n)}r.forEach((e=>{Ai.isSsrcRewritingSupported()?(e.setSourceName(null),e.setOwner(null)):this.eventEmitter.emit(rt,e)}));const o=this.participants.get(n);o&&(this.participants.delete(n),this.eventEmitter.emit(dt,n,o,t)),null!==this.room&&(this._maybeStartOrStopP2P(!0),this._maybeClearSITimeout())},Jh.prototype.onMemberKicked=function(e,t,n,i,r){if(t===this.myUserId())return;const o=this.participants.get(t);if(e)return this.leave().finally((()=>this.xmpp.disconnect())),void this.eventEmitter.emit(we,o,i,r);const s=this.participants.get(n);s.setIsReplaced(r),this.eventEmitter.emit(He,o,s,i)},Jh.prototype.onLocalRoleChanged=function(e){this.eventEmitter.emit(ct,this.myUserId(),e)},Jh.prototype.onUserRoleChanged=function(e,t){const n=St.Strophe.getResourceFromJid(e),i=this.getParticipantById(n);i&&(i.setRole(t),this.eventEmitter.emit(ct,n,t))},Jh.prototype.onDisplayNameChanged=function(e,t){const n=St.Strophe.getResourceFromJid(e),i=this.getParticipantById(n);i&&i._displayName!==t&&(i._displayName=t,this.eventEmitter.emit(_e,n,t))},Jh.prototype.onRemoteTrackAdded=function(e){if(e.isP2P&&!this.isP2PActive())return void Hh.info("Trying to add remote P2P track, when not in P2P - IGNORED");if(!e.isP2P&&this.isP2PActive())return void Hh.info("Trying to add remote JVB track, when in P2P - IGNORED");const t=e.getParticipantId(),n=this.getParticipantById(t);n?n._tracks.push(e):Hh.info(`Source signaling received before presence for ${t}`);const i=this.eventEmitter;e.addEventListener(Rt,(()=>i.emit(it,e))),e.isAudioTrack()&&e.addEventListener(Ct,((e,n)=>{this.getActivePeerConnection()===n&&i.emit(nt,t,e)})),i.emit(tt,e)},Jh.prototype.onCallAccepted=function(e,t){this.p2pJingleSession===e&&(Hh.info("P2P setAnswer"),this.p2pJingleSession.setAnswer(t),this.eventEmitter.emit(q,this.p2pJingleSession))},Jh.prototype.onTransportInfo=function(e,t){this.p2pJingleSession===e&&(Hh.info("P2P addIceCandidates"),this.p2pJingleSession.addIceCandidates(t))},Jh.prototype.onRemoteTrackRemoved=function(e){this.getParticipants().forEach((t=>{const n=t.getTracks();for(let i=0;icontent").attr("name");"0"===i||"1"===i?!this.isP2PEnabled()&&!this.isP2PTestModeEnabled()||ci.isFirefox()&&!this._firefoxP2pEnabled?n={reason:"decline",reasonDescription:"P2P disabled",errorMsg:"P2P mode disabled in the configuration or browser unsupported"}:this.p2pJingleSession?n={reason:"busy",reasonDescription:"P2P already in progress",errorMsg:\'Duplicated P2P "session-initiate"\'}:this._shouldBeInP2PMode()||(n={reason:"decline",reasonDescription:"P2P requirements not met",errorMsg:\'Received P2P "session-initiate" when should not be in P2P mode\'},Mi.sendAnalytics(dn(qt))):n={reason:"decline",reasonDescription:"P2P disabled",errorMsg:"P2P across two endpoints in different SDP modes is disabled"},n?this._rejectIncomingCall(e,n):this._acceptP2PIncomingCall(e,t)},Jh.prototype.onIncomingCall=function(e,t,n){if(e.isP2P)this._onIncomingCallP2P(e,t);else{if(!this.isFocus(e.remoteJid)){const t="Rejecting session-initiate from non-focus.";return void this._rejectIncomingCall(e,{reason:"security-error",reasonDescription:t,errorMsg:t})}this._acceptJvbIncomingCall(e,t,n)}},Jh.prototype._acceptJvbIncomingCall=function(e,t,n){this.jvbJingleSession=e,this.room.connectionTimes["session.initiate"]=n,this._sendConferenceJoinAnalyticsEvent(),this.wasStopped&&Mi.sendAnalyticsAndLog(dn(jt,{p2p:!1}));const i=_t()(t).find(\'>bridge-session[xmlns="http://jitsi.org/protocol/focus"]\').attr("region");this.eventEmitter.emit(We,i),this._maybeClearSITimeout(),Mi.sendAnalytics(dn(Ut,{p2p:!1,value:n}));try{e.initialize(this.room,this.rtc,this._signalingLayer,{...this.options.config,codecSettings:{mediaType:Ri.VIDEO,codecList:this.codecSelection.getCodecPreferenceList("jvb")},enableInsertableStreams:this.isE2EEEnabled()||Ai.isRunInLiteModeEnabled()})}catch(e){return void Hh.error(e)}this._setBridgeChannel(t,e.peerconnection);const r=this._getInitialLocalTracks();try{e.acceptOffer(t,(()=>{this.isP2PActive()&&this.jvbJingleSession&&this._suspendMediaTransferForJvbConnection(),this.eventEmitter.emit(q,e),this.isP2PActive()||this.eventEmitter.emit(G,e)}),(e=>{Hh.error("Failed to accept incoming Jingle session",e)}),r),this._desktopSharingFrameRate&&e.peerconnection.setDesktopSharingFrameRate(this._desktopSharingFrameRate),this.statistics.startRemoteStats(this.jvbJingleSession.peerconnection)}catch(e){Hh.error(e)}},Jh.prototype._setBridgeChannel=function(e,t){var n,i,r,o,s,a,d;const c=null===(n=this.connection)||void 0===n||null===(i=n.options)||void 0===i||null===(r=i.bridgeChannel)||void 0===r?void 0:r.ignoreDomain,l=null!==(o=null===(s=this.connection)||void 0===s||null===(a=s.options)||void 0===a||null===(d=a.bridgeChannel)||void 0===d?void 0:d.preferSctp)&&void 0!==o&&o,h=1===_t()(e).find(\'>content[name="data"]\').first().length;let u=null;if(Hh.info(`SCTP: offered=${h}, prefered=${l}`),!(h&&l||(_t()(e).find(">content>transport>web-socket").toArray().map((e=>e.getAttribute("url"))).forEach((e=>{u||c&&c===new URL(e).hostname?u||Hh.info(`Ignoring colibri-ws url with domain ${c}`):(u=e,Hh.info(`Using colibri-ws url ${e}`))})),u))){const t=_t()(e).find(">content>transport>web-socket").first();1===t.length&&(u=t[0].getAttribute("url"),Hh.info(`Falling back to ${u}`))}!u||h&&l?h?this.rtc.initializeBridgeChannel(t,null):Hh.warn("Neither SCTP nor a websocket is available. Will not initialize bridge channel."):this.rtc.initializeBridgeChannel(null,u)},Jh.prototype._rejectIncomingCall=function(e,t){null!=t&&t.errorMsg&&Hh.warn(t.errorMsg),e.terminate(null,(e=>{Hh.warn("An error occurred while trying to terminate invalid Jingle session",e)}),{reason:t&&t.reason,reasonDescription:t&&t.reasonDescription,sendSessionTerminate:!0})},Jh.prototype.onCallEnded=function(e,t,n){if(Hh.info(`Call ended: ${t} - ${n} P2P ?${e.isP2P}`),e===this.jvbJingleSession)this.wasStopped=!0,Mi.sendAnalytics(dn($t,{p2p:!1})),this.statistics&&this.statistics.stopRemoteStats(this.jvbJingleSession.peerconnection),this.jvbJingleSession=null,this.rtc.onCallEnded();else if(e===this.p2pJingleSession){const e={};"connectivity-error"===t&&"ICE FAILED"===n?Mi.analytics.addPermanentProperties({p2pFailed:!0}):"success"===t&&"restart"===n&&(e.requestRestart=!0),this._stopP2PSession(e)}else Hh.error("Received onCallEnded for invalid session",e.sid,e.remoteJid,t,n)},Jh.prototype.onSuspendDetected=function(e){e.isP2P||(this.leave(),this.eventEmitter.emit(Ze))},Jh.prototype.updateDTMFSupport=function(){let e=!1;const t=this.getParticipants();for(let n=0;nt.tagName===`jitsi_participant_${e}`));return t?t.value:void 0},Jh.prototype.sendFeedback=function(e,t){return this.statistics.sendFeedback(e,t)},Jh.prototype.isCallstatsEnabled=function(){return Hh.warn("Callstats is no longer supported"),!1},Jh.prototype.getSsrcByTrack=function(e){var t;return e.isLocal()?null===(t=this.getActivePeerConnection())||void 0===t?void 0:t.getLocalSSRC(e):e.getSSRC()},Jh.prototype.sendApplicationLog=function(){},Jh.prototype.isFocus=function(e){return this.room?this.room.isFocus(e):null},Jh.prototype._fireIncompatibleVersionsEvent=function(){this.eventEmitter.emit(ae,j)},Jh.prototype.sendEndpointMessage=function(e,t){this.rtc.sendChannelMessage(e,t)},Jh.prototype.sendEndpointStatsMessage=function(e){this.rtc.sendEndpointStatsMessage(e)},Jh.prototype.broadcastEndpointMessage=function(e){this.sendEndpointMessage("",e)},Jh.prototype.sendMessage=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=typeof e;if("object"===i||!n&&"string"===i)if(n)this.sendEndpointMessage(t,e);else{let n=e,r="body";if("object"===i){r="json-message",n.hasOwnProperty(Aa)||(n[Aa]="");try{n=JSON.stringify(n)}catch(e){return void Hh.error("Can not send a message, stringify failed: ",e)}}t?this.sendPrivateTextMessage(t,n,r):this.sendTextMessage(n,r)}else Hh.error(`Can not send a message of type ${i}`)},Jh.prototype.isConnectionInterrupted=function(){return this.isP2PActive()?this.isP2PConnectionInterrupted:this.isJvbConnectionInterrupted},Jh.prototype._onConferenceRestarted=function(e){!e.isP2P&&this.options.config.enableForcedReload&&this.eventEmitter.emit(ae,I)},Jh.prototype._onIceConnectionInterrupted=function(e){e.isP2P?this.isP2PConnectionInterrupted=!0:this.isJvbConnectionInterrupted=!0,e.isP2P===this.isP2PActive()&&this.eventEmitter.emit(me)},Jh.prototype._onIceConnectionFailed=function(e){e.isP2P?(Mi.analytics.addPermanentProperties({p2pFailed:!0}),this.p2pJingleSession&&Mi.sendAnalyticsAndLog(cn(zt,{initiator:this.p2pJingleSession.isInitiator})),this._stopP2PSession({reason:"connectivity-error",reasonDescription:"ICE FAILED"})):e&&this.jvbJingleSession===e&&(this._delayedIceFailed=new Tl(this),this._delayedIceFailed.start(e))},Jh.prototype._onIceConnectionRestored=function(e){e.isP2P?this.isP2PConnectionInterrupted=!1:(this.isJvbConnectionInterrupted=!1,this._delayedIceFailed&&this._delayedIceFailed.cancel()),e.isP2P===this.isP2PActive()&&this.eventEmitter.emit(ge)},Jh.prototype._acceptP2PIncomingCall=function(e,t){this.isP2PConnectionInterrupted=!1,this.p2pJingleSession=e,this._sendConferenceJoinAnalyticsEvent(),this.p2pJingleSession.initialize(this.room,this.rtc,this._signalingLayer,{...this.options.config,codecSettings:{mediaType:Ri.VIDEO,codecList:this.codecSelection.getCodecPreferenceList("p2p")},enableInsertableStreams:this.isE2EEEnabled()||Ai.isRunInLiteModeEnabled()});const n=this.getLocalTracks();this.p2pJingleSession.acceptOffer(t,(()=>{Hh.debug(\'Got RESULT for P2P "session-accept"\'),this.eventEmitter.emit(q,e)}),(e=>{Hh.error("Failed to accept incoming P2P Jingle session",e)}),n)},Jh.prototype._addRemoteJVBTracks=function(){this._addRemoteTracks("JVB",this.jvbJingleSession.peerconnection.getRemoteTracks())},Jh.prototype._addRemoteP2PTracks=function(){this._addRemoteTracks("P2P",this.p2pJingleSession.peerconnection.getRemoteTracks())},Jh.prototype._addRemoteTracks=function(e,t){for(const n of t)(Ai.isSsrcRewritingSupported()||this.participants.has(n.ownerEndpointId))&&(Hh.info(`Adding remote ${e} track: ${n}`),this.onRemoteTrackAdded(n))},Jh.prototype._onIceConnectionEstablished=function(e){null!==this.p2pJingleSession&&(this.p2pEstablishmentDuration=this.p2pJingleSession.establishmentDuration),null!==this.jvbJingleSession&&(this.jvbEstablishmentDuration=this.jvbJingleSession.establishmentDuration);let t=!1;if(e.isP2P?this.p2pJingleSession!==e&&(Hh.error("CONNECTION_ESTABLISHED - wrong P2P session instance ?!"),t=!0):t=!0,!isNaN(this.p2pEstablishmentDuration)&&!isNaN(this.jvbEstablishmentDuration)){const e=this.p2pEstablishmentDuration-this.jvbEstablishmentDuration;Mi.sendAnalytics(Zt,{value:e})}e.isP2P===this.isP2PActive()&&this.eventEmitter.emit(pe),t||(this._setP2PStatus(!0),this.jvbJingleSession?this._removeRemoteJVBTracks():Hh.info("Not removing remote JVB tracks - no session yet"),this._addRemoteP2PTracks(),this.jvbJingleSession&&this._suspendMediaTransferForJvbConnection(),Hh.info("Starting remote stats with p2p connection"),this.statistics.startRemoteStats(this.p2pJingleSession.peerconnection),Mi.sendAnalyticsAndLog(cn(Gt,{initiator:this.p2pJingleSession.isInitiator})))},Jh.prototype._updateProperties=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=!Et()(e,this.properties);if(this.properties=e,t){var n,i;this.eventEmitter.emit(ze,this.properties);const t="true"===this.properties["audio-limit-reached"],r="true"===this.properties["video-limit-reached"];this._audioSenderLimitReached!==t&&(this._audioSenderLimitReached=t,this.eventEmitter.emit(K,t),Hh.info(`Audio unmute permissions set by Jicofo to ${t}`)),this._videoSenderLimitReached!==r&&(this._videoSenderLimitReached=r,this.eventEmitter.emit(pt,r),Hh.info(`Video unmute permissions set by Jicofo to ${r}`)),["bridge-count"].forEach((t=>{void 0!==e[t]&&Mi.analytics.addPermanentProperties({[t.replace("-","_")]:e[t]})}));let o=null===(n=this.properties["visitor-codecs"])||void 0===n?void 0:n.split(",");null!==(i=o)&&void 0!==i&&i.length&&(o=o.filter((e=>"string"==typeof e&&e.trim().length&&Object.values(Ds).find((t=>t===e))))),this._visitorCodecs!==o&&(this._visitorCodecs=o,this.eventEmitter.emit(ue,this._visitorCodecs));const s=this._hasVisitors;this._hasVisitors=this.properties["visitor-count"]>0,s!==this._hasVisitors&&this._maybeStartOrStopP2P(!0)}},Jh.prototype.getProperty=function(e){return this.properties[e]},Jh.prototype._maybeClearDeferredStartP2P=function(){this.deferredStartP2PTask&&(Hh.info("Cleared deferred start P2P task"),clearTimeout(this.deferredStartP2PTask),this.deferredStartP2PTask=null)},Jh.prototype._removeRemoteJVBTracks=function(){this._removeRemoteTracks("JVB",this.jvbJingleSession.peerconnection.getRemoteTracks())},Jh.prototype._removeRemoteP2PTracks=function(){this._removeRemoteTracks("P2P",this.p2pJingleSession.peerconnection.getRemoteTracks())},Jh.prototype._removeRemoteTracks=function(e,t){for(const n of t)Hh.info(`Removing remote ${e} track: ${n}`),this.onRemoteTrackRemoved(n)},Jh.prototype._resumeMediaTransferForJvbConnection=function(){Hh.info("Resuming media transfer over the JVB connection..."),this.jvbJingleSession.setMediaTransferActive(!0).then((()=>{Hh.info("Resumed media transfer over the JVB connection!")})).catch((e=>{Hh.error("Failed to resume media transfer over the JVB connection:",e)}))},Jh.prototype._setP2PStatus=function(e){if(this.p2p!==e){if(this.p2p=e,e){Hh.info("Peer to peer connection established!"),Mi.analytics.addPermanentProperties({p2pFailed:!1});const e=0!==this.getLastN();this.p2pJingleSession.setP2pVideoTransferActive(e).catch((t=>{Hh.error(`Failed to sync up P2P video transfer status (${e}), ${t}`)}))}else Hh.info("Peer to peer connection closed!");this.dtmfManager=null,this.eventEmitter.emit(Ue,this,this.p2p),this.eventEmitter.emit(G,this.getActiveMediaSession()),this.eventEmitter.emit(this.isConnectionInterrupted()?me:ge)}else Hh.debug(`Called _setP2PStatus with the same status: ${e}`)},Jh.prototype._startP2PSession=function(e){if(this._maybeClearDeferredStartP2P(),this.p2pJingleSession)return void Hh.error("P2P session already started!");if(!this.room)return void Hh.warn("Cannot start P2P session - conference has been left");this.isP2PConnectionInterrupted=!1,this.p2pJingleSession=this.xmpp.connection.jingle.newP2PJingleSession(this.room.myroomjid,e),Hh.info("Created new P2P JingleSession",this.room.myroomjid,e),this._sendConferenceJoinAnalyticsEvent(),this.p2pJingleSession.initialize(this.room,this.rtc,this._signalingLayer,{...this.options.config,codecSettings:{mediaType:Ri.VIDEO,codecList:this.codecSelection.getCodecPreferenceList("p2p")},enableInsertableStreams:this.isE2EEEnabled()||Ai.isRunInLiteModeEnabled()});const t=this.getLocalTracks();this.p2pJingleSession.invite(t)},Jh.prototype._suspendMediaTransferForJvbConnection=function(){Hh.info("Suspending media transfer over the JVB connection..."),this.jvbJingleSession.setMediaTransferActive(!1).then((()=>{Hh.info("Suspended media transfer over the JVB connection !")})).catch((e=>{Hh.error("Failed to suspend media transfer over the JVB connection:",e)}))},Jh.prototype._maybeStartOrStopP2P=function(e){if(!this.isP2PEnabled()||this.isP2PTestModeEnabled()||ci.isFirefox()&&!this._firefoxP2pEnabled||this.isE2EEEnabled())return void Hh.info("Auto P2P disabled");const t=this.getParticipants(),n=t.length,i=this._shouldBeInP2PMode();if(!i&&this.deferredStartP2PTask&&this._maybeClearDeferredStartP2P(),!this.p2pJingleSession&&i){const i=n&&t[0],r=this.myUserId(),o=i.getId();if(r>o)return void Hh.debug("I\'m the bigger peersId - the other peer should start P2P",r,o);if(r===o)return void Hh.error("The same IDs ? ",r,o);const s=i.getJid();if(e){if(this.deferredStartP2PTask)return void Hh.error("Deferred start P2P task\'s been set already!");Hh.info(`Will start P2P with: ${s} after ${this.backToP2PDelay} seconds...`),this.deferredStartP2PTask=setTimeout(this._startP2PSession.bind(this,s),1e3*this.backToP2PDelay)}else Hh.info(`Will start P2P with: ${s}`),this._startP2PSession(s)}else this.p2pJingleSession&&!i&&(Hh.info(`Will stop P2P with: ${this.p2pJingleSession.remoteJid}`),this.p2pJingleSession.isInitiator&&n>1&&Mi.sendAnalyticsAndLog(cn(Kt)),this._stopP2PSession())},Jh.prototype._shouldBeInP2PMode=function(){const e=this.getParticipants(),t=e.length,n=void 0!==e.find((e=>"poltergeist"===e.getBotType()||e.hasFeature(wa))),i=1===t&&!n&&!this._hasVisitors;return Hh.debug(`P2P? peerCount: ${t}, hasBotPeer: ${n} => ${i}`),i},Jh.prototype._stopJvbSession=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{requestRestart:t=!1,sendSessionTerminate:n=!1}=e;this.jvbJingleSession?(!this.isP2PActive()&&this._removeRemoteJVBTracks(),Hh.info("Stopping stats for jvb connection"),this.statistics.stopRemoteStats(this.jvbJingleSession.peerconnection),this.jvbJingleSession.terminate((()=>{t&&n&&Hh.info("session-terminate for ice restart - done"),this.jvbJingleSession=null}),(e=>{t&&n&&(Hh.error("session-terminate for ice restart failed: reloading the client"),this.eventEmitter.emit(ae,F)),Hh.error(`An error occurred while trying to terminate the JVB session\', reason=${e.reason},msg=${e.msg}`)}),e)):Hh.error("No JVB session to be stopped")},Jh.prototype._stopP2PSession=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{reason:t="success",reasonDescription:n="Turning off P2P session",requestRestart:i=!1}=e;if(!this.p2pJingleSession)return void Hh.error("No P2P session to be stopped!");const r=this.isP2PActive();r&&(this.jvbJingleSession&&!i&&this._resumeMediaTransferForJvbConnection(),this._removeRemoteP2PTracks()),Hh.info("Stopping remote stats for P2P connection"),this.statistics.stopRemoteStats(this.p2pJingleSession.peerconnection),this.p2pJingleSession.terminate((()=>{Hh.info("P2P session terminate RESULT"),this.p2pJingleSession=null}),(e=>{"success"!==t&&Hh.error("An error occurred while trying to terminate P2P Jingle session",e)}),{reason:t,reasonDescription:n,sendSessionTerminate:this.room&&this.getParticipantById(St.Strophe.getResourceFromJid(this.p2pJingleSession.remoteJid))}),this.p2pJingleSession=null,this._setP2PStatus(!1),r&&(this.jvbJingleSession&&!i?this._addRemoteJVBTracks():Hh.info("Not adding remote JVB tracks - no session yet"))},Jh.prototype._updateRoomPresence=function(e,t){if(!e)return;if(t){if(t.skip)return;t.skip=!0}let n,i,r=!1;const o=e.peerconnection.getLocalTracks();for(const e of o){const t=e.isMuted();n=this._setTrackMuteStatus(e.getType(),e,t),n&&Hh.debug(`Updating mute state of ${e} in presence to muted=${t}`),e.getType()===Ri.VIDEO&&(i=this._setNewVideoType(e),i&&Hh.debug(`Updating videoType in presence to ${e.getVideoType()}`)),r=r||n||i}r&&this.room.sendPresence()},Jh.prototype.isP2PActive=function(){return this.p2p},Jh.prototype.getP2PConnectionState=function(){return this.isP2PActive()?this.p2pJingleSession.peerconnection.getConnectionState():null},Jh.prototype.setDesktopSharingFrameRate=function(e){return"number"!=typeof e||isNaN(e)?(Hh.error(`Invalid value ${e} specified for desktop capture frame rate`),!1):(this._desktopSharingFrameRate=e,this.jvbJingleSession&&this.jvbJingleSession.peerconnection.setDesktopSharingFrameRate(e),this.rtc.setDesktopSharingFrameRate(e),!0)},Jh.prototype.startP2PSession=function(){const e=this.getParticipants();if(1!==e.length)throw new Error("There must be exactly 1 participant to start the P2P session !");{const t=e[0].getJid();this._startP2PSession(t)}},Jh.prototype.stopP2PSession=function(e){this._stopP2PSession(e)},Jh.prototype.getSpeakerStats=function(){return this.speakerStatsCollector.getStats()},Jh.prototype.sendFaceLandmarks=function(e){e.faceExpression&&this.xmpp.sendFaceLandmarksEvent(this.room.roomjid,e)},Jh.prototype.setReceiverConstraints=function(e){this.receiveVideoController.setReceiverConstraints(e)},Jh.prototype.setAssumedBandwidthBps=function(e){this.receiveVideoController.setAssumedBandwidthBps(e)},Jh.prototype.setReceiverVideoConstraint=function(e){this.receiveVideoController.setPreferredReceiveMaxFrameHeight(e)},Jh.prototype.setSenderVideoConstraint=function(e){return this.sendVideoController.setPreferredSendMaxFrameHeight(e)},Jh.prototype.createVideoSIPGWSession=function(e,t){return this.room?this.videoSIPGWHandler.createVideoSIPGWSession(e,t):new Error(Ph)},Jh.prototype._sendConferenceJoinAnalyticsEvent=function(){var e,t,n;const i=this.getMeetingUniqueId();if(this._conferenceJoinAnalyticsEventSent||!i||null===this.getActivePeerConnection())return;const r=this.getConnectionTimes(),o=this.connection.getConnectionTimes(),s=window.connectionTimes["firstObtainPermissions.start"],a=window.connectionTimes["firstObtainPermissions.end"],d=null!==(e=null===(t=window.JitsiMeetJS)||void 0===t||null===(n=t.app)||void 0===n?void 0:n.connectionTimes)&&void 0!==e?e:{},c={...r,...o,...d,gumDuration:Ti(a,s),xmppConnectingTime:Ti(o.connected,o.connecting),connectedToMUCJoinedTime:Ti(r["muc.joined"],o.connected),connectingToMUCJoinedTime:Ti(r["muc.joined"],o.connecting),numberOfParticipantsOnJoin:this._numberOfParticipantsOnJoin};Mi.sendAnalytics(on("joined",{...c,meetingId:i,participantId:`${i}.${this._statsCurrentId}`})),this._conferenceJoinAnalyticsEventSent=Date.now()},Jh.prototype._sendConferenceLeftAnalyticsEvent=function(){const e=this.getMeetingUniqueId();e&&this._conferenceJoinAnalyticsEventSent&&Mi.sendAnalytics(on("left",{meetingId:e,participantId:`${e}.${this._statsCurrentId}`,stats:{duration:Math.floor((Date.now()-this._conferenceJoinAnalyticsEventSent)/1e3),perf:this.getPerformanceStats()}}))},Jh.prototype._restartMediaSessions=function(){this.p2pJingleSession&&this._stopP2PSession({reasonDescription:"restart",requestRestart:!0}),this.jvbJingleSession&&this._stopJvbSession({reason:"success",reasonDescription:"restart required",requestRestart:!0,sendSessionTerminate:!0}),this._maybeStartOrStopP2P(!1)},Jh.prototype.isE2EEEnabled=function(){return Boolean(this._e2eEncryption&&this._e2eEncryption.isEnabled())},Jh.prototype.isE2EESupported=function(){return so.isSupported(this.options.config)},Jh.prototype.toggleE2EE=function(e){this.isE2EESupported()?this._e2eEncryption.setEnabled(e):Hh.warn("Cannot enable / disable E2EE: platform is not supported.")},Jh.prototype.setMediaEncryptionKey=function(e){this._e2eEncryption.setEncryptionKey(e)},Jh.prototype.startVerification=function(e){const t=this.getParticipantById(e);t&&this._e2eEncryption.startVerification(t)},Jh.prototype.markParticipantVerified=function(e,t){const n=this.getParticipantById(e);n&&this._e2eEncryption.markParticipantVerified(n,t)},Jh.prototype.isLobbySupported=function(){return Boolean(this.room&&this.room.getLobby().isSupported())},Jh.prototype.isMembersOnly=function(){return Boolean(this.room&&this.room.membersOnlyEnabled)},Jh.prototype.isVisitorsSupported=function(){return Boolean(this.room&&this.room.visitorsSupported)},Jh.prototype.enableLobby=function(){return this.room&&this.isModerator()?this.room.getLobby().enable():Promise.reject(new Error("The conference not started or user is not moderator"))},Jh.prototype.disableLobby=function(){this.room&&this.isModerator()?this.room.getLobby().disable():Hh.warn(`Failed to disable lobby, ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator"}`)},Jh.prototype.joinLobby=function(e,t){return this.room?this.room.getLobby().join(e,t):Promise.reject(new Error("The conference not started"))},Jh.prototype.myLobbyUserId=function(){if(this.room)return this.room.getLobby().getLocalId()},Jh.prototype.sendLobbyMessage=function(e,t){if(this.room)return t?this.room.getLobby().sendPrivateMessage(t,e):this.room.getLobby().sendMessage(e)},Jh.prototype.addLobbyMessageListener=function(e){if(this.room)return this.room.getLobby().addMessageListener(e)},Jh.prototype.removeLobbyMessageHandler=function(e){if(this.room)return this.room.getLobby().removeMessageHandler(e)},Jh.prototype.lobbyDenyAccess=function(e){this.room&&this.room.getLobby().denyAccess(e)},Jh.prototype.lobbyApproveAccess=function(e){this.room&&this.room.getLobby().approveAccess(e)},Jh.prototype.isAVModerationSupported=function(){return Boolean(this.room&&this.room.getAVModeration().isSupported())},Jh.prototype.enableAVModeration=function(e){this.room&&this.isModerator()&&(e===Ri.AUDIO||e===Ri.VIDEO)?this.room.getAVModeration().enable(!0,e):Hh.warn(`Failed to enable AV moderation, ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator, "}${this.room&&this.isModerator()?"wrong media type passed":""}`)},Jh.prototype.disableAVModeration=function(e){this.room&&this.isModerator()&&(e===Ri.AUDIO||e===Ri.VIDEO)?this.room.getAVModeration().enable(!1,e):Hh.warn(`Failed to disable AV moderation, ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator, "}${this.room&&this.isModerator()?"wrong media type passed":""}`)},Jh.prototype.avModerationApprove=function(e,t){if(this.room&&this.isModerator()&&(e===Ri.AUDIO||e===Ri.VIDEO)){const n=this.getParticipantById(t);if(!n)return;this.room.getAVModeration().approve(e,n.getJid())}else Hh.warn(`AV moderation approve skipped , ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator, "}${this.room&&this.isModerator()?"wrong media type passed":""}`)},Jh.prototype.avModerationReject=function(e,t){if(this.room&&this.isModerator()&&(e===Ri.AUDIO||e===Ri.VIDEO)){const n=this.getParticipantById(t);if(!n)return;this.room.getAVModeration().reject(e,n.getJid())}else Hh.warn(`AV moderation reject skipped , ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator, "}${this.room&&this.isModerator()?"wrong media type passed":""}`)},Jh.prototype.getBreakoutRooms=function(){var e;return null===(e=this.room)||void 0===e?void 0:e.getBreakoutRooms()},Jh.prototype.getMetadataHandler=function(){var e;return null===(e=this.room)||void 0===e?void 0:e.getMetadataHandler()},Bh.prototype.connect=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.xmpp.moderator.targetUrl&&!this.options.disableFocus&&e.name?this.xmpp.moderator.sendConferenceRequest(this.xmpp.getRoomJid(e.name)).then((()=>{this.xmpp.connect(e.id,e.password)})):this.xmpp.connect(e.id,e.password)},Bh.prototype.attach=function(e){this.xmpp.attach(e)},Bh.prototype.disconnect=function(){return this.xmpp.disconnect(...arguments)},Bh.prototype.getJid=function(){return this.xmpp.getJid()},Bh.prototype.setToken=function(e){this.token=e},Bh.prototype.initJitsiConference=function(e,t){return new Jh({name:e,config:t,connection:this})},Bh.prototype.addEventListener=function(e,t){this.xmpp.addListener(e,t)},Bh.prototype.removeEventListener=function(e,t){this.xmpp.removeListener(e,t)},Bh.prototype.getConnectionTimes=function(){return this.xmpp.connectionTimes},Bh.prototype.addFeature=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.xmpp.caps.addFeature(e,t,!0)},Bh.prototype.removeFeature=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.xmpp.caps.removeFeature(e,t,!0)},Bh.prototype.getLogs=function(){const e=this.xmpp.getJingleLog(),t={};t.time=new Date,t.url=window.location.href,t.ua=navigator.userAgent;const n=this.xmpp.getXmppLog();return n&&(t.xmpp=n),e.metadata=t,e},function(e){e.DEVICE_LIST_CHANGED="mediaDevices.devicechange",e.PERMISSIONS_CHANGED="rtc.permissions_changed",e.PERMISSION_PROMPT_IS_SHOWN="mediaDevices.permissionPromptIsShown",e.SLOW_GET_USER_MEDIA="mediaDevices.slowGetUserMedia"}(qh||(qh={}));const Gh=qh.DEVICE_LIST_CHANGED,zh=qh.PERMISSIONS_CHANGED,Kh=qh.PERMISSION_PROMPT_IS_SHOWN,Wh=qh.SLOW_GET_USER_MEDIA,Xh="microphone",Yh="camera",Qh=new class extends xr{constructor(){super(),this._permissions={},pl.addListener(ji.default.DEVICE_LIST_CHANGED,(e=>this.eventEmitter.emit(Gh,e))),pl.addListener(ji.default.PERMISSIONS_CHANGED,(e=>this._handlePermissionsChange(e))),this._permissionsApiSupported=new Promise((e=>{if(!navigator.permissions)return void e(!1);const t=this,n=[];n.push(navigator.permissions.query({name:Yh}).then((e=>(this._handlePermissionsChange({[Ri.VIDEO]:this._parsePermissionState(e)}),e.onchange=function(){try{t._handlePermissionsChange({[Ri.VIDEO]:t._parsePermissionState(this)})}catch(e){}},!0))).catch((()=>!1))),n.push(navigator.permissions.query({name:Xh}).then((e=>(this._handlePermissionsChange({[Ri.AUDIO]:this._parsePermissionState(e)}),e.onchange=function(){try{t._handlePermissionsChange({[Ri.AUDIO]:t._parsePermissionState(this)})}catch(e){}},!0))).catch((()=>!1))),Promise.all(n).then((t=>e(t.every((e=>e)))))}))}_parsePermissionState(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=e.state||e.status;if("string"!=typeof t)throw new TypeError;return"granted"===t}_handlePermissionsChange(e){[Ri.AUDIO,Ri.VIDEO].some((t=>t in e&&e[t]!==this._permissions[t]))&&(this._permissions={...this._permissions,...e},this.eventEmitter.emit(zh,this._permissions),(this._permissions[Ri.AUDIO]||this._permissions[Ri.VIDEO])&&this.enumerateDevices((()=>{})))}enumerateDevices(e){pl.enumerateDevices(e)}isDeviceListAvailable(){return pl.isDeviceListAvailable()}isDeviceChangeAvailable(e){return pl.isDeviceChangeAvailable(e)}isDevicePermissionGranted(e){return new Promise((t=>{e in this._permissions?t(this._permissions[e]):this._permissionsApiSupported.then((n=>{if(!n)return void t(!1);const i=[];switch(e){case Ri.VIDEO:i.push(navigator.permissions.query({name:Yh}));break;case Ri.AUDIO:i.push(navigator.permissions.query({name:Xh}));break;default:i.push(navigator.permissions.query({name:Yh})),i.push(navigator.permissions.query({name:Xh}))}Promise.all(i).then((e=>t(e.every((e=>{try{return this._parsePermissionState(e)}catch{return!1}})))),(()=>t(!1)))}))}))}isMultipleAudioInputSupported(){return!(ci.isFirefox()&&ci.isVersionLessThan("101")||ci.isIosBrowser())}getAudioOutputDevice(){return pl.getAudioOutputDevice()}setAudioOutputDevice(e){return pl.setAudioOutputDevice(e)}},Zh=(0,E.getLogger)("modules/detection/ActiveDeviceDetector.js");function eu(e){for(const t of e)t.stopStream()}const tu=(0,E.getLogger)("modules/proxyconnection/CustomSignalingLayer.js");class nu extends Ac{constructor(){super(),this.ssrcOwners=new Map,this.chatRoom=null}getPeerMediaInfo(e,t,n){return{}}getPeerSourceInfo(e,t){}getSSRCOwner(e){return this.ssrcOwners.get(e)}getTrackSourceName(e){}removeSSRCOwners(e){if(null!=e&&e.length)for(const t of e)this.ssrcOwners.delete(t)}setChatRoom(e){this.chatRoom=e}setSSRCOwner(e,t){if("number"!=typeof e)throw new TypeError(`SSRC(${e}) must be a number`);const n=this.ssrcOwners.get(e);n&&n!==t&&tu.error(`SSRC owner re-assigned from ${n} to ${t}`),this.ssrcOwners.set(e,t)}setTrackMuteStatus(e,t){return!1}setTrackVideoType(e,t){return!1}updateSsrcOwnersOnLeave(e){const t=Array.from(this.ssrcOwners).filter((t=>t[1]===e)).map((e=>e[0]));null!=t&&t.length&&this.removeSSRCOwners(t)}}let iu;!function(e){e.ACCEPT="session-accept",e.CONNECTION_ERROR="connection-error-encountered",e.INITIATE="session-initiate",e.TERMINATE="session-terminate",e.TRANSPORT_INFO="transport-info",e.UNAVAILABLE="unavailable"}(iu||(iu={}));const ru=(0,E.getLogger)("modules/proxyconnection/ProxyConnectionPC.js");class ou{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._options={pcConfig:{},isInitiator:!1,receiveAudio:!1,receiveVideo:!1,...e},this._tracks=[],this._peerConnection=null,this._onError=this._onError.bind(this),this._onRemoteStream=this._onRemoteStream.bind(this),this._onSendMessage=this._onSendMessage.bind(this)}getPeerJid(){return this._options.peerJid}processMessage(e){switch(e.attr("action")){case iu.ACCEPT:this._onSessionAccept(e);break;case iu.INITIATE:this._onSessionInitiate(e);break;case iu.TERMINATE:this._onSessionTerminate(e);break;case iu.TRANSPORT_INFO:this._onTransportInfo(e)}}start(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this._peerConnection||(this._tracks=this._tracks.concat(e),this._peerConnection=this._createPeerConnection(),this._peerConnection.invite(e))}stop(){this._peerConnection&&this._peerConnection.terminate(),this._onSessionTerminate()}_createPeerConnection(){const e={connected:!0,jingle:{terminate:()=>{}},sendIQ:this._onSendMessage,addEventListener:()=>()=>{},addCancellableListener:()=>()=>{}},t={iceServers:Ra,...this._options.pcConfig},n={addEventListener:()=>{},addPresenceListener:()=>{},connectionTimes:[],eventEmitter:{emit:e=>{switch(e){case Hi.XMPPEvents.CONNECTION_ICE_FAILED:case Hi.XMPPEvents.CONNECTION_FAILED:this._onError(iu.CONNECTION_ERROR,e)}}},removeEventListener:()=>{},removePresenceListener:()=>{},supportsRestartByTerminate:()=>!1};this._rtc=new pl({myUserId:()=>""},{}),this._rtc.addListener(ji.default.REMOTE_TRACK_ADDED,this._onRemoteStream);const i=new ua(void 0,void 0,this._options.peerJid,e,{offerToReceiveAudio:this._options.receiveAudio,offerToReceiveVideo:this._options.receiveVideo},t,!0,this._options.isInitiator),r=new nu;return r.setChatRoom(n),i.initialize(n,this._rtc,r,{}),i}_onError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";this._options.onError(this._options.peerJid,e,t)}_onRemoteStream(e){this._tracks.push(e),this._options.onRemoteStream(e)}_onSendMessage(e,t){this._options.onSendMessage(this._options.peerJid,e),t&&setTimeout(t,250)}_onSessionAccept(e){this._peerConnection?this._peerConnection.setAnswer(e):ru.error("Received an answer when no peer connection exists.")}_onSessionInitiate(e){this._peerConnection?ru.error("Received an offer when an offer was already sent."):(this._peerConnection=this._createPeerConnection(),this._peerConnection.acceptOffer(e,(()=>{}),(()=>this._onError(this._options.peerJid,iu.CONNECTION_ERROR,"session initiate error")),[]))}_onSessionTerminate(){this._tracks.forEach((e=>e.dispose())),this._tracks=[],this._peerConnection&&this._peerConnection.onTerminated(),this._rtc&&(this._rtc.removeListener(ji.default.REMOTE_TRACK_ADDED,this._onRemoteStream),this._rtc.destroy())}_onTransportInfo(e){this._peerConnection.addIceCandidates(e)}}const su=(0,E.getLogger)("modules/proxyconnection/ProxyConnectionService.js");var au=n(549),du=n.n(au);const cu=(0,E.getLogger)("modules/webaudio/AudioMixer.js");class lu{constructor(){this._started=!1,this._streamsToMix=[],this._streamMSSArray=[]}addMediaStream(e){e.getAudioTracks()||cu.warn("Added MediaStream doesn\'t contain audio tracks."),this._streamsToMix.push(e)}start(){if(this._started)return this._mixedMSD.stream;if(this._audioContext=Nl(),!this._streamsToMix.length)return cu.warn("No MediaStream\'s added to AudioMixer, nothing will happen."),null;this._started=!0,this._mixedMSD=this._audioContext.createMediaStreamDestination();for(const e of this._streamsToMix){const t=this._audioContext.createMediaStreamSource(e);t.connect(this._mixedMSD),this._streamMSSArray.push(t)}return this._mixedMSD.stream}reset(){this._started=!1,this._streamsToMix=[];for(const e of this._streamMSSArray)e.disconnect();this._streamMSSArray=[],this._audioContext&&(this._audioContext=void 0)}}const hu=S().getLogger("JitsiMeetJS.ts");let uu=!1;function pu(e){const t={};return t.audio_requested=e.devices.includes("audio"),t.video_requested=e.devices.includes("video"),t.screen_sharing_requested=e.devices.includes("desktop"),t.video_requested&&(t.resolution=e.resolution),t}const mu={version:"bbd9796e",JitsiConnection:Bh,ProxyConnectionService:class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{jitsiConnection:t,...n}=e;this._options={pcConfig:t&&t.xmpp.connection.jingle.p2pIceConfig,...n},this._peerConnection=null,this._onFatalError=this._onFatalError.bind(this),this._onSendMessage=this._onSendMessage.bind(this),this._onRemoteStream=this._onRemoteStream.bind(this)}processMessage(e){const t=e.from;if(!t)return;if(this._peerConnection&&this._peerConnection.getPeerJid()!==t)return void this._onFatalError(t,iu.CONNECTION_ERROR,"rejected");const n=this._convertStringToXML(e.data.iq),i=n&&n.find("jingle"),r=i&&i.attr("action");r===iu.INITIATE&&(this._peerConnection=this._createPeerConnection(t,{isInitiator:!1,receiveVideo:!0})),this._peerConnection&&this._peerConnection.processMessage(i),r!==iu.CONNECTION_ERROR&&r!==iu.UNAVAILABLE&&r!==iu.TERMINATE||this._selfCloseConnection()}start(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];this._peerConnection=this._createPeerConnection(e,{isInitiator:!0,receiveVideo:!1}),t.forEach(((e,t)=>{const n=Cc("peer",e.getType(),t);e.setSourceName(n)})),this._peerConnection.start(t)}stop(){this._peerConnection&&this._peerConnection.stop(),this._peerConnection=null}_convertStringToXML(e){try{const t=(new DOMParser).parseFromString(e,"text/xml");return _t()(t)}catch(e){return su.error("Attempted to convert incorrectly formatted xml"),null}}_createPeerConnection(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Cannot create ProxyConnectionPC without a peer.");const n={pcConfig:this._options.pcConfig,onError:this._onFatalError,onRemoteStream:this._onRemoteStream,onSendMessage:this._onSendMessage,peerJid:e,...t};return new ou(n)}_onFatalError(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";su.error("Received a proxy connection error",e,t,n);const i=(0,St.$iq)({to:e,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:t}).c("details").t(n).up();this._onSendMessage(e,i),this._peerConnection&&this._peerConnection.getPeerJid()===e&&this._selfCloseConnection()}_onRemoteStream(e){if(!this._options.onRemoteStream)return su.error("Remote track received without callback."),void e.dispose();const t=e.isVideoTrack();let n;t&&(n=this._options.convertVideoToDesktop?Qo.VideoType.DESKTOP:Qo.VideoType.CAMERA);const i=e.getOriginalStream(),r=pl.createLocalTracks([{deviceId:`proxy:${this._peerConnection.getPeerJid()}`,mediaType:t?Ri.VIDEO:Ri.AUDIO,sourceType:"proxy",stream:i,track:i.getVideoTracks()[0],videoType:n}]);this._options.onRemoteStream(r[0])}_onSendMessage(e,t){if(this._options.onSendMessage)try{const n=(new XMLSerializer).serializeToString(t.nodeTree||t);this._options.onSendMessage(e,{iq:n})}catch(e){su.error("Attempted to send an incorrectly formatted iq.")}}_selfCloseConnection(){this.stop(),this._options.onConnectionClosed&&this._options.onConnectionClosed()}},constants:{recording:{error:{BUSY:"busy",ERROR:"error",RESOURCE_CONSTRAINT:"resource-constraint",UNEXPECTED_REQUEST:"unexpected-request",SERVICE_UNAVAILABLE:"service-unavailable"},mode:{FILE:"file",STREAM:"stream"},status:{OFF:"off",ON:"on",PENDING:"pending"}},sipVideoGW:_,transcriptionStatus:l,trackStreamingStatus:Jc},events:{conference:r,connection:d,detection:f,track:o,mediaDevices:y,connectionQuality:g,e2eping:v,rtcstats:s},errors:{conference:i,connection:c,track:a},errorTypes:{JitsiTrackError:dr},logLevels:S().levels,mediaDevices:Qh,analytics:Mi.analytics,init(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return S().setLogLevel(S().levels.INFO),hu.info(`This appears to be ${ci.getName()}, ver: ${ci.getVersion()}`),$o.init(e.externalStorage),Mi.init(e),window.connectionTimes||(window.connectionTimes={}),!0!==e.enableAnalyticsLogging&&(hu.warn("Analytics disabled, disposing."),this.analytics.dispose()),pl.init(e)},isDesktopSharingEnabled:()=>pl.isDesktopSharingEnabled(),isWebRtcSupported:()=>pl.isWebRtcSupported(),setLogLevel(e){S().setLogLevel(e)},rtcstats:{sendIdentityEntry(e){si.sendIdentity(e)},sendStatsEntry(e,t){si.sendStatsEntry(e,null,t)},on(e,t){si.events.on(e,t)}},setLogLevelById(e,t){S().setLogLevelById(e,t)},addGlobalLogTransport(e){S().addGlobalTransport(e)},removeGlobalLogTransport(e){S().removeGlobalTransport(e)},setGlobalLogOptions(e){S().setGlobalOptions(e)},createLocalTracks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=!1;const{firePermissionPromptIsShownEvent:n,fireSlowPromiseEvent:i,...r}=e;n&&!pl.arePermissionsGrantedForAvailableDevices()?Qh.emit(Kh,ci.getName()):i&&window.setTimeout((()=>{t||Qh.emit(Wh)}),1e3);let o=!1,s=window.performance.now();return window.connectionTimes||(window.connectionTimes={}),uu||(uu=!0,o=!0,window.connectionTimes["firstObtainPermissions.start"]=s),window.connectionTimes["obtainPermissions.start"]=s,pl.obtainAudioAndVideoPermissions(r).then((e=>{t=!0;let n=window.performance.now();if(window.connectionTimes["obtainPermissions.end"]=n,o&&(window.connectionTimes["firstObtainPermissions.end"]=n),Mi.sendAnalytics(an("success",pu(r))),this.isCollectingLocalStats())for(let t=0;t{if(t=!0,n.name===Zi)Mi.sendAnalytics(an("warning",{reason:"extension install user canceled"}));else if(n.name===Xi){const t=pu(e);t.reason="device not found",t.devices=n.gum.devices.join("."),Mi.sendAnalytics(an("error",t))}else{const t=pu(e);t.reason=n.name,Mi.sendAnalytics(an("error",t))}let i=window.performance.now();return window.connectionTimes["obtainPermissions.end"]=i,o&&(window.connectionTimes["firstObtainPermissions.end"]=i),Promise.reject(n)}))},createLocalTracksFromMediaStreams:e=>pl.createLocalTracks(e.map((e=>{const t=e.stream.getTracks().filter((t=>t.kind===e.mediaType));if(!t||0===t.length)throw new dr(or,null,null);if(t.length>1)throw new dr(rr,null,null);return e.track=t[0],e}))),createTrackVADEmitter:(e,t,n)=>Ml.create(e,t,n),createAudioMixer:()=>new lu,getActiveAudioDevice:()=>new Promise((e=>{pl.enumerateDevices((t=>{const n=t.filter((e=>"audioinput"===e.kind)),i=[];for(const e of n){const t=pl.obtainAudioAndVideoPermissions({devices:["audio"],micDeviceId:e.deviceId}).then((e=>{const t=e[0];return Mi.startLocalStats(t,t.setAudioLevel.bind(t)),t}));i.push(t)}Promise.allSettled(i).then((t=>{const n=t.filter((e=>"fulfilled"===e.status)),i=t.filter((e=>"rejected"===e.status)),r=n.map((e=>e.value)),o=i.map((e=>e.value));for(const e of o)Zh.error("Failed to acquire audio device with error: ",e);for(const t of r)t.on(Ct,(n=>{n>.008&&(eu(r),e({deviceId:t.deviceId,deviceLabel:t.track.label}))}));setTimeout((()=>{eu(r),e({deviceId:"",deviceLabel:""})}),3e3)}))}))})),isDeviceListAvailable(){return hu.warn("This method is deprecated, use JitsiMeetJS.mediaDevices.isDeviceListAvailable instead"),this.mediaDevices.isDeviceListAvailable()},isDeviceChangeAvailable(e){return hu.warn("This method is deprecated, use JitsiMeetJS.mediaDevices.isDeviceChangeAvailable instead"),this.mediaDevices.isDeviceChangeAvailable(e)},isMultipleAudioInputSupported(){return this.mediaDevices.isMultipleAudioInputSupported()},isCollectingLocalStats:()=>Mi.audioLevelsEnabled&&_i.isLocalStatsSupported(),enumerateDevices(e){hu.warn("This method is deprecated, use JitsiMeetJS.mediaDevices.enumerateDevices instead"),this.mediaDevices.enumerateDevices(e)},setNetworkInfo(e){let{isOnline:t}=e;xo.updateNetworkInfo({isOnline:t})},util:{ScriptUtil:du(),browser:ci}}}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.loaded=!0,n.exports}__webpack_require__.amdO={},__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var __webpack_exports__=__webpack_require__(449);return __webpack_exports__})()));\n//# sourceMappingURL=lib-jitsi-meet.min.map'; +const IT = '/*! For license information please see lib-jitsi-meet.min.js.LICENSE.txt */\n!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.JitsiMeetJS=t():e.JitsiMeetJS=t()}(self,(()=>(()=>{var __webpack_modules__={449:(e,t,n)=>{const i=n(526).Z;e.exports=function(e){return"object"==typeof window.JitsiMeetJS?Object.assign({},window.JitsiMeetJS,e):e}(i)},444:e=>{e.exports=class{constructor(e,t,n){this._userId=e,this.setDisplayName(t),this._isLocalStats=n||!1,this.setDominantSpeaker(!1),this.totalDominantSpeakerTime=0,this._dominantSpeakerStart=0,this._isDominantSpeaker=!1,this._isSilent=!1,this._hasLeft=!1,this._faceLandmarks=[]}getUserId(){return this._userId}getDisplayName(){return this.displayName}setDisplayName(e){this.displayName=e}isLocalStats(){return this._isLocalStats}isDominantSpeaker(){return this._isDominantSpeaker}setDominantSpeaker(e,t){if(this.isDominantSpeaker()||!e||t){if(this.isDominantSpeaker())if(e){if(this._isSilent&&!t)this._dominantSpeakerStart=Date.now();else if(!this._isSilent&&t){const e=Date.now()-this._dominantSpeakerStart;this.totalDominantSpeakerTime+=e,this._dominantSpeakerStart=0}}else if(!this._isSilent){const e=Date.now()-this._dominantSpeakerStart;this.totalDominantSpeakerTime+=e,this._dominantSpeakerStart=0}}else this._dominantSpeakerStart=Date.now();this._isDominantSpeaker=e,this._isSilent=t}getTotalDominantSpeakerTime(){let e=this.totalDominantSpeakerTime;return this.isDominantSpeaker()&&!this._isSilent&&(e+=Date.now()-this._dominantSpeakerStart),e}hasLeft(){return this._hasLeft}markAsHasLeft(){this._hasLeft=!0,this.setDominantSpeaker(!1)}getFaceLandmarks(){return this._faceLandmarks}setFaceLandmarks(e){this._faceLandmarks=e}addFaceLandmarks(e){this._faceLandmarks.push(e)}}},832:e=>{function t(e,t){if(!e||!t||"function"!=typeof e.addListener||"function"!=typeof t.emit)throw new Error("Invalid arguments passed to EventEmitterForwarder");this.src=e,this.dest=t,this.listeners=new Map}t.prototype.forward=function(){for(var e=arguments.length,t=new Array(e),n=0;n{const t=this.listeners.get(e);t&&(this.src.removeListener(e,t),this.listeners.delete(e))}))},e.exports=t},399:e=>{function t(e,t){return Math.floor(Math.random()*(t-e+1))+e}function n(e){return e[t(0,e.length-1)]}const i={randomHexDigit:()=>n("0123456789abcdef"),randomHexString(e){let t="";for(;e--;)t+=this.randomHexDigit();return t},randomElement:n,randomAlphanumStr:function(e){let t="";for(let i=0;i{const i=n(799),r={loadScript(e,t,n,r,o,s){const a=document,d="script",c=a.createElement(d),l=a.getElementsByTagName(d)[0];if(c.async=t,r){const t=i();if(t){const n=t.src,i=n.substring(0,n.lastIndexOf("/")+1);n&&i&&(e=i+e)}}o&&(c.onload=o),s&&(c.onerror=s),c.src=e,n?l.parentNode.insertBefore(c,l):l.parentNode.appendChild(c)}};e.exports=r},667:(e,t,n)=>{const i=n(399),r=["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D\'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zula"];e.exports={generateUsername:function(){return`${i.randomElement(r)}-${i.randomAlphanumStr(3)}`}}},32:(e,t)=>{"use strict";const n=/"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])"\\s*\\:/;t.parse=function(e){const i="object"==typeof(arguments.length<=1?void 0:arguments[1])&&(arguments.length<=1?void 0:arguments[1]),r=(arguments.length<=1?0:arguments.length-1)>1||!i?arguments.length<=1?void 0:arguments[1]:void 0,o=(arguments.length<=1?0:arguments.length-1)>1&&(arguments.length<=2?void 0:arguments[2])||i||{},s=JSON.parse(e,r);return"ignore"===o.protoAction?s:s&&"object"==typeof s&&e.match(n)?(t.scan(s,o),s):s},t.scan=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[e];for(;n.length;){const e=n;n=[];for(const i of e){if(Object.prototype.hasOwnProperty.call(i,"__proto__")){if("remove"!==t.protoAction)throw new SyntaxError("Object contains forbidden prototype property");delete i.__proto__}for(const e in i){const t=i[e];t&&"object"==typeof t&&n.push(i[e])}}}},t.safeParse=function(e,n){try{return t.parse(e,n)}catch(e){return null}}},122:function(e,t,n){var i;!function(r,o){"use strict";var s="function",a="undefined",d="object",c="string",l="major",h="model",u="name",p="type",m="vendor",g="version",f="architecture",v="console",_="mobile",y="tablet",E="smarttv",S="wearable",b="embedded",T="Amazon",C="Apple",x="ASUS",R="BlackBerry",A="Browser",w="Chrome",I="Firefox",P="Google",D="Huawei",O="LG",k="Microsoft",N="Motorola",M="Opera",L="Samsung",F="Sharp",j="Sony",V="Xiaomi",U="Zebra",H="Facebook",$="Chromium OS",J="Mac OS",B=function(e){for(var t={},n=0;n0?2===a.length?typeof a[1]==s?this[a[0]]=a[1].call(this,l):this[a[0]]=a[1]:3===a.length?typeof a[1]!==s||a[1].exec&&a[1].test?this[a[0]]=l?l.replace(a[1],a[2]):o:this[a[0]]=l?a[1].call(this,l,a[2]):o:4===a.length&&(this[a[0]]=l?a[3].call(this,l.replace(a[1],a[2])):o):this[a]=l||o;h+=2}},W=function(e,t){for(var n in t)if(typeof t[n]===d&&t[n].length>0){for(var i=0;i2&&(e[h]="iPad",e[p]=y),e},this.getEngine=function(){var e={};return e[u]=o,e[g]=o,K.call(e,i,E.engine),e},this.getOS=function(){var e={};return e[u]=o,e[g]=o,K.call(e,i,E.os),S&&!e[u]&&v&&"Unknown"!=v.platform&&(e[u]=v.platform.replace(/chrome os/i,$).replace(/macos/i,J)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return i},this.setUA=function(e){return i=typeof e===c&&e.length>350?z(e,350):e,this},this.setUA(i),this};Q.VERSION="1.0.35",Q.BROWSER=B([u,g,l]),Q.CPU=B([f]),Q.DEVICE=B([h,m,p,v,_,E,y,S,b]),Q.ENGINE=Q.OS=B([u,g]),typeof t!==a?(e.exports&&(t=e.exports=Q),t.UAParser=Q):n.amdO?(i=function(){return Q}.call(t,n,t,e))===o||(e.exports=i):typeof r!==a&&(r.UAParser=Q);var Z=typeof r!==a&&(r.jQuery||r.Zepto);if(Z&&!Z.ua){var ee=new Q;Z.ua=ee.getResult(),Z.ua.get=function(){return ee.getUA()},Z.ua.set=function(e){ee.setUA(e);var t=ee.getResult();for(var n in t)Z.ua[n]=t[n]}}}("object"==typeof window?window:this)},505:(e,t,n)=>{var i=n(350);function r(e,t){this.logStorage=e,this.stringifyObjects=!(!t||!t.stringifyObjects)&&t.stringifyObjects,this.storeInterval=t&&t.storeInterval?t.storeInterval:3e4,this.maxEntryLength=t&&t.maxEntryLength?t.maxEntryLength:1e4,Object.values(i.levels).forEach(function(e){this[e]=function(){this._log.apply(this,arguments)}.bind(this,e)}.bind(this)),this.storeLogsIntervalID=null,this.queue=[],this.totalLen=0,this.outputCache=[]}r.prototype.stringify=function(e){try{return JSON.stringify(e)}catch(e){return"[object with circular refs?]"}},r.prototype.formatLogMessage=function(e){for(var t="",n=1,i=arguments.length;n=this.maxEntryLength&&this._flush(!0,!0)},r.prototype.start=function(){this._reschedulePublishInterval()},r.prototype._reschedulePublishInterval=function(){this.storeLogsIntervalID&&(window.clearTimeout(this.storeLogsIntervalID),this.storeLogsIntervalID=null),this.storeLogsIntervalID=window.setTimeout(this._flush.bind(this,!1,!0),this.storeInterval)},r.prototype.flush=function(){this._flush(!1,!0)},r.prototype._storeLogs=function(e){try{this.logStorage.storeLogs(e)}catch(e){console.error("LogCollector error when calling logStorage.storeLogs(): ",e)}},r.prototype._flush=function(e,t){var n=!1;try{n=this.logStorage.isReady()}catch(e){console.error("LogCollector error when calling logStorage.isReady(): ",e)}this.totalLen>0&&(n||e)&&(n?(this.outputCache.length&&(this.outputCache.forEach(function(e){this._storeLogs(e)}.bind(this)),this.outputCache=[]),this._storeLogs(this.queue)):this.outputCache.push(this.queue),this.queue=[],this.totalLen=0),t&&this._reschedulePublishInterval()},r.prototype.stop=function(){this._flush(!1,!1)},e.exports=r},350:e=>{var t={trace:0,debug:1,info:2,log:3,warn:4,error:5};o.consoleTransport=console;var n=[o.consoleTransport];o.addGlobalTransport=function(e){-1===n.indexOf(e)&&n.push(e)},o.removeGlobalTransport=function(e){var t=n.indexOf(e);-1!==t&&n.splice(t,1)};var i={};function r(){var e=arguments[0],r=arguments[1],o=Array.prototype.slice.call(arguments,2);if(!(t[r]1&&h.push("<"+s.methodName+">: ");var u=h.concat(o);try{l.bind(c).apply(c,u)}catch(e){console.error("An error occured when trying to log with one of the available transports",e)}}}}function o(e,n,i,o){this.id=n,this.options=o||{},this.transports=i,this.transports||(this.transports=[]),this.level=t[e];for(var s=Object.keys(t),a=0;a{var i=n(350),r=n(505),o={},s=[],a=i.levels.TRACE;e.exports={addGlobalTransport:function(e){i.addGlobalTransport(e)},removeGlobalTransport:function(e){i.removeGlobalTransport(e)},setGlobalOptions:function(e){i.setGlobalOptions(e)},getLogger:function(e,t,n){var r=new i(a,e,t,n);return e?(o[e]=o[e]||[],o[e].push(r)):s.push(r),r},getUntrackedLogger:function(e,t,n){return new i(a,e,t,n)},setLogLevelById:function(e,t){for(var n=t?o[t]||[]:s,i=0;i{var t=e.exports={v:[{name:"version",reg:/^(\\d*)$/}],o:[{name:"origin",reg:/^(\\S*) (\\d*) (\\d*) (\\S*) IP(\\d) (\\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\\d*) (\\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\\d) (\\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\\w*) (\\d*) ([\\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\\d*) ([\\w\\-.]*)(?:\\s*\\/(\\d*)(?:\\s*\\/(\\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\\d*) ([\\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\\d*)(?: (\\S*) IP(\\d) (\\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\\*|\\d*) trr-int (\\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\\*|\\d*) ([\\w-_]*)(?: ([\\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\\d+)(?:\\/(\\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\\S*)(?: (\\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\\d*) ([\\w_]*) (\\S*)(?: (\\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\\d*(?:\\.\\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\\d*(?:\\.\\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\\S*) (\\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\\S*) (\\d*) (\\S*) (\\d*) (\\S*) (\\d*) typ (\\S*)(?: raddr (\\S*) rport (\\d*))?(?: tcptype (\\S*))?(?: generation (\\d*))?(?: network-id (\\d*))?(?: network-cost (\\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),(t+=null!=e["network-id"]?" network-id %d":"%v")+(null!=e["network-cost"]?" network-cost %d":"%v")}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\\d*) ([\\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\\x21\\x23\\x24\\x25\\x26\\x27\\x2A\\x2B\\x2D\\x2E\\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\\s?(\\w*) (\\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\\w_/]*) (\\S*)(?: (\\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\\d\\w]+) (\\w+)(?: ([\\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\\\d+|\\\\*)[\\\\s\\\\t]+(send|recv)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*)(?:[\\\\s\\\\t]+(recv|send)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\\\-_~;,]+)(?:\\\\s?(send|recv) ([a-zA-Z0-9\\\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\\s\\t]+([\\S+\\s\\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\\d+(?:$|\\.\\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\\S*) (IP4|IP6|\\*) (\\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\\s=]*)(?:=(\\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\\S*))? *([^\\s=]*)(?:=(\\S*))?(?: *rate=(\\d+)\\/(\\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",(t+=null!=e.rateNumerator?" rate=%s":"")+(null!=e.rateDenominator?"/%s":"")}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(t).forEach((function(e){t[e].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))}))},561:(e,t,n)=>{var i=n(92),r=n(508);t.write=r,t.parse=i.parse,t.parseParams=i.parseParams,t.parseFmtpConfig=i.parseFmtpConfig,t.parsePayloads=i.parsePayloads,t.parseRemoteCandidates=i.parseRemoteCandidates,t.parseImageAttributes=i.parseImageAttributes,t.parseSimulcastStreamList=i.parseSimulcastStreamList},92:(e,t,n)=>{var i=function(e){return String(Number(e))===e?Number(e):e},r=function(e,t,n){var r=e.name&&e.names;e.push&&!t[e.push]?t[e.push]=[]:r&&!t[e.name]&&(t[e.name]={});var o=e.push?{}:r?t[e.name]:t;!function(e,t,n,r){if(r&&!n)t[r]=i(e[1]);else for(var o=0;o1&&(e[n[0]]=void 0),e};t.parseParams=function(e){return e.split(/;\\s?/).reduce(a,{})},t.parseFmtpConfig=t.parseParams,t.parsePayloads=function(e){return e.toString().split(" ").map(Number)},t.parseRemoteCandidates=function(e){for(var t=[],n=e.split(" ").map(i),r=0;r{var i=n(22),r=/%[sdv%]/g,o=function(e){var t=1,n=arguments,i=n.length;return e.replace(r,(function(e){if(t>=i)return e;var r=n[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(r);case"%d":return Number(r);case"%v":return""}}))},s=function(e,t,n){var i=[e+"="+(t.format instanceof Function?t.format(t.push?n:n[t.name]):t.format)];if(t.names)for(var r=0;r{var e={607:(e,t,n)=>{"use strict";t.ap=t.Tk=t.Vk=t.b1=t.zP=t.$j=t.dL=t.aM=t.vP=t.xt=t.Zt=t.UN=t.IO=t.zl=t.v6=t.S1=void 0,n(699);var i=n(231);t.S1=function(e,t){(0,i.initSDK)(e||{},[""],t)},t.v6=function(e){(0,i.setConfig)(e)},t.zl=function(e){},t.IO=function(e,t){(0,i.setUserRating)(e,t)},t.UN=function(e){(0,i.addKeys)(e)},t.Zt=function(){(0,i.disableDataCollection)()},t.xt=function(){(0,i.enableDataCollection)()},t.vP=function(e){(0,i.addEvent)(e)},t.aM=function(e,t){(0,i.mapStream)(e,t)},t.dL=function(e,t){(0,i.mapTrack)(e,t)},t.$j=function(){(0,i.connect)()},t.zP=function(){(0,i.disconnect)()},t.b1=function(e){(0,i.registerOnStatsListener)(e)},t.Vk=function(e){(0,i.persistentEnd)(e)},t.Tk=function(e,t){(0,i.persistentStart)(e,t)},t.ap=function(e){(0,i.registerStateListener)(e)},t.default={init:t.S1,addTags:t.zl,setUserRating:t.IO,addKeys:t.UN,setConfig:t.v6,disableDataCollection:t.Zt,enableDataCollection:t.xt,addEvent:t.vP,mapStream:t.aM,mapTrack:t.dL,connect:t.$j,disconnect:t.zP,addStatsListener:t.b1,persistentEnd:t.Vk,persistentStart:t.Tk,addStateListener:t.ap,qualityrtc:{run:i.qrtcRun,stop:i.qrtcStop}}},231:function(e,t,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var t,n=1,i=arguments.length;n0&&r[r.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!r||a[1]>r[0]&&a[1]0&&"function"==typeof r[0]))return t;r[0].apply(null,[t])}),(function(t){if(a({data:[e+"OnFailure",i,t.toString()]}),!(r.length>1&&"function"==typeof r[1]))throw t;r[1].apply(null,[t])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){var n=this.__rtcStatsId,i=arguments,r=this,o="setLocalDescription"===e&&(!i[0]||i[0]&&!i[0].sdp);return a({data:[e,this.__rtcStatsId,o?{parameterless:!0}:i[0]]}),t.apply(this,[i[0]]).then((function(){a({data:[e+"OnSuccess",n,o?null==r?void 0:r.localDescription:void 0]}),i.length>=2&&"function"==typeof i[1]&&i[1].apply(null,[])}),(function(t){if(a({data:[e+"OnFailure",n,t.toString()]}),!(i.length>=3&&"function"==typeof i[2]))throw t;i[2].apply(null,[t])}))})})),n.generateCertificate&&Object.defineProperty(r,"generateCertificate",{get:function(){return arguments.length?n.generateCertificate.apply(null,arguments):n.generateCertificate}}),v[e+"RTCPeerConnection"]=r,v[e+"RTCPeerConnection"].prototype=n.prototype,(0,t.sdkLog)("debug","RTCPeerConnection prefixes override complete")}else(0,t.sdkLog)("debug","RTCPeerConnection prefixes override failed")})),f){if(n.forEach((function(e){var t=e+(e.length?"GetUserMedia":"getUserMedia");if(navigator[t]){var n=navigator[t].bind(navigator);navigator[t]=function(){a({data:["getUserMedia",null,arguments[0]]});var e=arguments[1],t=arguments[2];n(arguments[0],(function(t){a({data:["getUserMediaOnSuccess",null,(0,m.dumpStream)(t)]}),e&&e(t)}),(function(e){var n=["getUserMediaOnFailure",null,e.name];a({data:n}),H(n),t&&t(e)}))}.bind(navigator)}})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var h=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(){return a({data:["navigator.mediaDevices.getUserMedia",null,arguments[0]]}),h.apply(navigator.mediaDevices,arguments).then((function(e){return a({data:["navigator.mediaDevices.getUserMediaOnSuccess",null,(0,m.dumpStream)(e)]}),e}),(function(e){var t=["navigator.mediaDevices.getUserMediaOnFailure",null,e.name];return a({data:t}),H(t),Promise.reject(e)}))}.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var g=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getDisplayMedia=function(){return a({data:["navigator.mediaDevices.getDisplayMedia",null,arguments[0]]}),g.apply(navigator.mediaDevices,arguments).then((function(e){return a({data:["navigator.mediaDevices.getDisplayMediaOnSuccess",null,(0,m.dumpStream)(e)]}),e}),(function(e){var t=["navigator.mediaDevices.getDisplayMediaOnFailure",null,e.name];return a({data:t}),H(t),Promise.reject(e)}))}.bind(navigator.mediaDevices)}}(null===(s=e.console)||void 0===s?void 0:s.level)&&(0,m.setConsoleLevel)(e.console.level,a)}else(0,t.sdkLogWithoutTrace)("info","init. RTCPeerConnection does not exist in global globalContext")},t.setConfig=function(e){var n;v.watchRTCInitialized?(!(!1===(null==T?void 0:T.allowBrowserLogCollection))&&!0===(null===(n=null==e?void 0:e.console)||void 0===n?void 0:n.override)&&e.console.level&&(0,m.setConsoleLevel)(e.console.level,a),"collectionInterval"in e&&delete e.collectionInterval,T=i(i({},T),e),b.rtcRoomId=T.rtcRoomId,b.rtcPeerId=T.rtcPeerId,(0,t.sdkLog)("debug","setConfig",{newWatchrtcConfig:JSON.stringify(e),watchrtcConfig:JSON.stringify(T)}),F({})):(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first.")},t.setUserRating=function(e,n){var i;if(!v.watchRTCInitialized)return(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first."),Promise.resolve({error:"SDK is not initialized. Use \'init\' function first."});if(!(0,m.validateRating)(e))return Promise.resolve({error:"Rating is invalid"});var r=(null===(i=null==x?void 0:x.connection)||void 0===i?void 0:i.readyState)===v.WebSocket.OPEN,o=["userRating",null,{rating:e,ratingComment:n}];return new Promise((function(e,t){r?a({data:o,options:{promiseFuncs:{resolve:e,reject:t}}}):U.apply(void 0,o).then((function(){return e({})})).catch((function(t){return e({error:t})}))}))},t.addKeys=function(e){var n;if(v.watchRTCInitialized){Object.keys(e||{}).forEach((function(t){"string"==typeof e[t]&&(e[t]=[e[t]])}));var i=["keys",null,e],r=(null===(n=null==x?void 0:x.connection)||void 0===n?void 0:n.readyState)===v.WebSocket.OPEN,o=null==x?void 0:x.wasConnected;return new Promise((function(e,t){var n={promiseFuncs:{resolve:e,reject:t}};r?a({data:i,options:n}):o?U.apply(void 0,i).then((function(){return e({})})).catch((function(t){return e({error:t})})):a({data:i,options:n})}))}(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first.")},t.disableDataCollection=function(){v.watchRTCInitialized?(a({data:["disableDataCollection",null,null]}),null==x||x.disableDataCollection()):(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first.")},t.enableDataCollection=function(){v.watchRTCInitialized?(a({data:["enableDataCollection",null,null]}),null==x||x.enableDataCollection()):(0,t.sdkLog)("error","SDK is not initialized. Use \'init\' function first.")},t.addEvent=function(e){if(v.watchRTCInitialized){if((0,m.validateEvent)(e,y)){var n=i({},e),r=null;n.pc&&(r=n.pc.__rtcStatsId||null,delete n.pc);var o=["event",r,n];return new Promise((function(e,t){a({data:o,options:{promiseFuncs:{resolve:e,reject:t}}})}))}}else(0,t.sdkLog)("error","addEvent error. SDK is not initialized. Use \'init\' function first.")},t.mapStream=function(e,n){if(v.watchRTCInitialized){if(e&&n){var i=["mapStream",null,{id:e,name:n}];(0,t.sdkLog)("info","mapStream method is deprecated. Please use mapTrack instead."),a({data:i})}}else(0,t.sdkLog)("error","mapStream error. SDK is not initialized. Use \'init\' function first.")},t.mapTrack=function(e,n){v.watchRTCInitialized?!e||!n||(L[e]=n,a({data:["mapTrack",null,{id:e,name:n}]})):(0,t.sdkLog)("error","mapTrack error. SDK is not initialized. Use \'init\' function first.")},t.connect=function(){v.watchRTCInitialized?(N=!0,P=!0,(0,t.sdkLog)("debug","manual connect"),F({})):(0,t.sdkLog)("error","connect error. SDK is not initialized. Use \'init\' function first.")},t.disconnect=function(){v.watchRTCInitialized?(P=!1,D=!0,null==x||x.close(),(0,t.sdkLog)("debug","manual disconnect")):(0,t.sdkLog)("error","disconnect error. SDK is not initialized. Use \'init\' function first.")},t.registerOnStatsListener=function(e){O=e},t.registerStateListener=function(e){k=e};var U=function(){for(var e,n=[],i=0;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getStreamsFromStats=t.getTransportFromStats=void 0,t.getTransportFromStats=function(e,t){if(!t)return null;var n=Object.keys(t),i=n.filter((function(e){return"candidate-pair"===t[e].type&&t[e].nominated}));if(i.length>0){var r=t[i[0]],o=r.localCandidateId,s=r.remoteCandidateId,a=n.find((function(e){return"local-candidate"===t[e].type&&t[e].id===o})),d=n.find((function(e){return"remote-candidate"===t[e].type&&t[e].id===s}));if(a&&d){var c=t[a],l=t[d],h={};return h[e]={connection:"relay"===c.candidateType?"relay":"direct",transport:"relay"===c.candidateType?c.relayProtocol:"udp",address:"".concat(l.address,":").concat(l.port)},h}}return null},t.getStreamsFromStats=function(e,t,n,i){var r={},o=Object.keys(n);return o.filter((function(e){return"inbound-rtp"===n[e].type||"outbound-rtp"===n[e].type})).forEach((function(s){var a=n[s],d=t&&s in t?t[s]:null,c="inbound-rtp"===a.type?"inbound":"outbound",l=a.kind,h=a.remoteId in n?n[a.remoteId]:null,u=d&&d.remoteId in t?t[d.remoteId]:null,p=d?(a.timestamp-d.timestamp)/1e3:null,m={direction:c,kind:l,peerId:e};if("video"===l&&(m.frameWidth=a.frameWidth,m.frameHeight=a.frameHeight,m.framerate=a.framesPerSecond),"inbound-rtp"===a.type)m.jitter=a.jitter,m.mappedName=a.trackIdentifier in i?i[a.trackIdentifier]:null,m.bytesReceived=d?a.bytesReceived-d.bytesReceived:null,m.packetsReceived=d?a.packetsReceived-d.packetsReceived:null,m.packetsLost=d?a.packetsLost-d.packetsLost:null,m.packetsLoss=m.packetsLost+m.packetsReceived>0?100*m.packetsLost/(m.packetsLost+m.packetsReceived):null,m.bitrate=p?8*m.bytesReceived/p:null,m.roundTripTime=h&&"roundTripTime"in h?h.roundTripTime:null;else{m.bytesSent=d?a.bytesSent-d.bytesSent:null,m.packetsSent=d?a.packetsSent-d.packetsSent:null,m.bitrate=p?8*m.bytesSent/p:null,m.roundTripTime=h&&"roundTripTime"in h?h.roundTripTime:null,m.jitter=h&&"jitter"in h?h.jitter:null,m.packetsLost=h&&u?h.packetsLost-u.packetsLost:null,m.packetsLoss=h&&"fractionLost"in h?h.fractionLost:null;var g=o.find((function(e){return n[e].id===a.mediaSourceId}));if(g){var f=n[g].trackIdentifier;m.mappedName=f in i?i[f]:null}}var v=o.find((function(e){return n[e].id===a.codecId}));if(v){var _=n[v].mimeType||"";m.codec=_.includes("/")?_.split("/")[1]:_}r[n[s].id]=m})),r}},699:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},593:function(e,t,n){"use strict";var i,r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,i=arguments.length;n0&&r[r.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!r||a[1]>r[0]&&a[1]n&&(n=i.timestamp)})),Object.keys(t).forEach((function(e){var i=t[e];i.timestamp===n&&(i.timestamp=0)})),t.timestamp=n,t},t.mangleChromeStats=function(e,t){var n={};return t.result().forEach((function(e){var t={id:e.id,timestamp:e.timestamp.getTime(),type:e.type};e.names().forEach((function(n){t[n]=e.stat(n)})),n[t.id]=t})),n},t.map2obj=function(e){if(!e.entries)return e;var t={};return e.forEach((function(e,n){t[n]=e})),t},t.dumpStream=function(e){return{id:e.id,tracks:e.getTracks().map((function(e){return{id:e.id,kind:e.kind,label:e.label,enabled:e.enabled,muted:e.muted,readyState:e.readyState}}))}},t.getConnectionData=function(e,t,n){var i="".concat("ws"==e?"ws":"http","://localhost:9101"),r="".concat("ws"==e?"wss":"https","://watchrtc-staging1.testrtc.com"),o="".concat("ws"==e?"wss":"https","://watchrtc-staging2.testrtc.com"),s="".concat("ws"==e?"wss":"https","://watchrtc.testrtc.com"),a="".concat("ws"==e?"wss":"https","://watchrtc-app1.testrtc.com");n&&"http"===e&&(n=n.includes("wss://")?n.replace("wss://","https://"):n.replace("ws://","http://"));var d=t.split(":");return-1!==t.indexOf("local")?{url:n||i,key:d[1]}:-1!==t.indexOf("staging1")?{url:n||r,key:d[1]}:-1!==t.indexOf("staging")?{url:n||o,key:d[1]}:-1!==t.indexOf("production1")?{url:n||a,key:d[1]}:-1!==t.indexOf("production")?{url:n||s,key:d[1]}:{url:n||s,key:d[0]}},t.validateConfig=function(e){return(null==e?void 0:e.rtcApiKey)?!(!(null==e?void 0:e.rtcRoomId)||!(null==e?void 0:e.rtcPeerId))||((0,l.sdkLog)("debug","config.rtcRoomId or config.rtcPeerId is empty."),!1):((0,l.sdkLog)("debug","config.rtcApiKey or config.rtcToken need to be provided."),!1)},t.countOfValidConnections=function(e){return Object.keys(e).filter((function(t){return e[t].validConnection})).length},t.isRoomIdOrPeerIdChanged=function(e,t){var n=!1;return t.rtcRoomId&&e.rtcRoomId&&e.rtcRoomId!==t.rtcRoomId&&(n=!0),t.rtcPeerId&&e.rtcPeerId&&e.rtcPeerId!==t.rtcPeerId&&(n=!0),n&&(0,l.sdkLog)("debug","maybeOpenWebsocketConnection. rtcRoomId or rtcPeerId has been changed",{old:{rtcRoomId:e.rtcRoomId,rtcPeerId:e.rtcPeerId},new:{rtcRoomId:t.rtcRoomId,rtcPeerId:t.rtcPeerId}}),n},t.validateRating=function(e){return e?!("number"!=typeof e||e<1||e>5)||((0,l.sdkLog)("error","rating parameter should be number from 1 to 5"),!1):((0,l.sdkLog)("error","rating parameter is required"),!1)},t.validateEvent=function(e,t){return e?["global","local","log"].includes(e.type)?e.parameters&&"object"!=typeof e.parameters?((0,l.sdkLog)("error",\'event.parameters should be JSON object"\'),!1):!e.pc||e.pc.__rtcStatsId in t||((0,l.sdkLog)("error",\'event.pc should be a RTCPeerConnection used in the call"\'),!1):((0,l.sdkLog)("error",\'event.type should be either "global" or "local" or "log"\'),!1):((0,l.sdkLog)("error","event parameter is required"),!1)},t.getHardwareInfo=function(){return o(void 0,void 0,void 0,(function(){function e(e){return(Math.round(100*e)/100).toFixed(2)}var t,i,a,c;return s(this,(function(h){switch(h.label){case 0:return"undefined"==typeof window?[2]:(t=function(e){return o(void 0,void 0,void 0,(function(){return s(this,(function(t){switch(t.label){case 0:return[4,new Promise((function(t){try{var i=n(804)("./".concat(e));return i.shift(),t(i)}catch(n){(0,l.sdkLog)("error","Error. getHardwareInfo. loadBenchmarks",{err:n.stack,fileName:e}),t([])}}))];case 1:return[2,t.sent()]}}))}))},[4,d.getGPUTier({override:{loadBenchmarks:t}})]);case 1:return i=h.sent(),a=r(r({},i),{cores_count:window.navigator.hardwareConcurrency}),(c=window.performance.memory)&&(a.jsHeapSizeLimit=e(c.jsHeapSizeLimit/1048576),a.totalJSHeapSize=e(c.totalJSHeapSize/1048576),a.usedJSHeapSize=e(c.usedJSHeapSize/1048576)),[2,a]}}))}))};var m={originalMethodPrefix:"_original_",methodsToPatch:["log","debug","info","warn","error"],level:""},g=function(e,t){var n=console[e];n&&(console[m.originalMethodPrefix+e]=n,console[e]=function(){for(var i=[],r=0;r=0&&o>=s){var a=f(i);t({data:["log",null,{type:e,text:a}]})}}n.apply(console,i)})};t.setConsoleLevel=function(e,t){if(e&&m.methodsToPatch.includes(e)&&e!==m.level){var n=m.methodsToPatch.indexOf(e),i=m.methodsToPatch.indexOf(m.level);if(i<0)for(var r=0,o=m.methodsToPatch.slice(n);r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default="1.38.2"},911:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(231),r=function(){function e(){e._instance?(0,i.sdkLog)("info","WatchRTCSocket instance already created"):e._instance=this}return e.prototype.trace=function(e,t,n,r){for(var o=[],s=4;s{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(231),r=n(354),o="undefined"!=typeof window?window:n.g,s=function(){function e(){var t=this;this.connection=null,this.wasConnected=!1,this.buffer=[],this.sendInterval=1,this.onClose=function(){},this.dataCollection=!0,this.sendPromises=[],this.prevMessageTs=Date.now(),this.trace=function(n){var s=n.data,a=n.options,d=Array.prototype.slice.call(s),c=t.prevMessageTs,l=Date.now(),h=l-c;if(Math.abs(h)>=432e5&&t.trace({data:["timeChange",null,{now:l,prevMessageTs:c,timeSinceLastMessage:h}]}),d.push(l),d[1]instanceof RTCPeerConnection&&(d[1]=d[1].__rtcStatsId),e._instance.dataCollection)if(e._instance.connection&&e._instance.connection.readyState===o.WebSocket.OPEN||!(e._instance.buffer.length>1e3)){if(e._instance.buffer.push(d),(null==a?void 0:a.promiseFuncs)&&e._instance.sendPromises.push(a.promiseFuncs),e._instance.connection&&e._instance.connection.readyState===o.WebSocket.OPEN&&e._instance.buffer.length>=e._instance.sendInterval){var u=JSON.stringify(e._instance.buffer),p=r.compressToEncodedURIComponent(u);(0,i.sdkLogWithoutTrace)("debug","lines: ".concat(u.length)),(0,i.sdkLogWithoutTrace)("debug","compressedMessage: ".concat(p.length)),e._instance.buffer=[],e._instance.connection.send(p),e._instance.sendPromises.forEach((function(e){return(0,e.resolve)({})})),e._instance.sendPromises=[]}}else(null==a?void 0:a.promiseFuncs)&&a.promiseFuncs.resolve({error:"Message buffer size exceeded"});else(null==a?void 0:a.promiseFuncs)&&a.promiseFuncs.resolve({error:"Data collection disabled"})},e._instance?(0,i.sdkLog)("info","WatchRTCSocket instance already created"):e._instance=this}return e.prototype.connect=function(t){var n=t.url,r=t.onData,s=t.onError,a=t.onOpen,d=t.onClose,c=t.options,l=(void 0===c?{}:c).cleanOldTraces;e._instance.connection&&(e._instance.connection.close(),e._instance.connection=null);var h=e._instance;if(l){var u=Date.now()-6e5,p=h.buffer.filter((function(e){return e[3]>u})),m=h.buffer.length-p.length;h.buffer=p;var g=["oldTracesCleanup",null,{filteredCount:m},Date.now()];(0,i.sdkLog)("info","watchRTC SDK flushed ".concat(m," messages")),h.buffer.push(g)}e._instance.connection=new o.WebSocket(n,"2.0"),e._instance.connection.onopen=a||null,e._instance.connection.onclose=d||null,e._instance.connection.onmessage=function(t){var n;try{var o=JSON.parse(t.data);o.error?(null===(n=null==h?void 0:h.connection)||void 0===n||n.close(),h.connection=null,(0,i.sdkLog)("error","\\n"+o.error),s(o.error,"auth")):(o.sendInterval&&(e._instance.sendInterval=o.sendInterval),r(o),e._instance.wasConnected=!0)}catch(e){(0,i.sdkLog)("error","\\n",{err:e.stack}),s(e.message)}},e._instance.connection.onerror=function(e){(0,i.sdkLog)("error","\\n",e),s(e,"connection")}},e.prototype.close=function(t){var n,i;if(t&&(null===(i=null===(n=e._instance)||void 0===n?void 0:n.connection)||void 0===i?void 0:i.readyState)===o.WebSocket.OPEN){var s=JSON.stringify(["nailUpCallEnd",null,null,Date.now()]),a=r.compressToEncodedURIComponent(s);e._instance.connection.send(a)}e._instance.buffer=[],e._instance.sendPromises.forEach((function(e){return(0,e.resolve)({error:"Connection was close"})})),e._instance.sendPromises=[],e._instance.connection&&(e._instance.connection.close(),e._instance.onClose(),e._instance.connection=null)},e.prototype.disableDataCollection=function(){(0,i.sdkLog)("debug","Data collection disabled."),e._instance.dataCollection=!1},e.prototype.enableDataCollection=function(){(0,i.sdkLog)("debug","Data collection enabled."),e._instance.dataCollection=!0},e.prototype.isDisabledDataCollection=function(){return!e._instance.dataCollection},e}();t.default=s},240:function(e,t){!function(e){"use strict";var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,n)};function n(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}d((i=i.apply(e,t||[])).next())}))}function i(e,t){var n,i,r,o,s={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,i&&(r=2&o[0]?i.return:o[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;switch(i=0,r&&(o=[2&o[0],r.value]),o[0]){case 0:case 1:r=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((r=(r=s.trys).length>0&&r[r.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]0&&!window.MSStream;return{isIpad:o,isMobile:/android/i.test(t)||r||o,isSafari12:/Version\\/12.+Safari/.test(t)}}}();var d=[],c=[];function l(e,t){if(e===t)return 0;var n=e;e.length>t.length&&(e=t,t=n);for(var i=e.length,r=t.length;i>0&&e.charCodeAt(~-i)===t.charCodeAt(~-r);)i--,r--;for(var o,s=0;sh?l>h?h+1:l:l>a?a+1:l;return h}function h(e){return null!=e}var u=function(e){function n(t){var n=this.constructor,i=e.call(this,t)||this;return Object.setPrototypeOf(i,n.prototype),i}return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}(n,e),n}(Error);e.getGPUTier=function(e){var t=void 0===e?{}:e,d=t.mobileTiers,c=void 0===d?[0,15,30,60]:d,p=t.desktopTiers,m=void 0===p?[0,15,30,60]:p,g=t.override,f=void 0===g?{}:g,v=t.glContext,_=t.failIfMajorPerformanceCaveat,y=void 0!==_&&_,E=t.benchmarksURL,S=void 0===E?"https://unpkg.com/detect-gpu@".concat("4.0.8","/dist/benchmarks"):E;return n(void 0,void 0,void 0,(function(){var e,t,d,p,g,_,E,b,T,C,x,R,A,w,I,P,D,O,k,N,M,L,F,j,V,U;return i(this,(function(H){switch(H.label){case 0:if(e={},s)return[2,{tier:0,type:"SSR"}];if(t=f.isIpad,d=void 0===t?!!(null==a?void 0:a.isIpad):t,p=f.isMobile,g=void 0===p?!!(null==a?void 0:a.isMobile):p,_=f.screenSize,E=void 0===_?window.screen:_,b=f.loadBenchmarks,T=void 0===b?function(e){return n(void 0,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return[4,fetch("".concat(S,"/").concat(e)).then((function(e){return e.json()}))];case 1:if(t=n.sent(),parseInt(t.shift().split(".")[0],10)<4)throw new u("Detect GPU benchmark data is out of date. Please update to version 4x");return[2,t]}}))}))}:b,C=f.renderer,x=function(e){for(var t=0,n=g?["adreno","apple","mali-t","mali","nvidia","powervr"]:["intel","apple","amd","radeon","nvidia","geforce"];t1?h.map((function(e){return[e,l(t,e[0])]})).sort((function(e,t){return e[1]-t[1]}))[0][0]:h[0],f=m[0],v=m[3],_=Number.MAX_VALUE,S=window.devicePixelRatio,b=E.width*S*E.height*S,C=0,R=v;C=14})):(i=c.filter((function(e){return e[1]===r}))).length||(i=c),i.map((function(e){var t=e[0];return"apple ".concat(t," gpu")}))}(e,t,n):[t]}(P,C,g)}return[4,Promise.all(w.map(R))];case 1:if(!(O=H.sent().filter(h).sort((function(e,t){var n=e[0],i=void 0===n?Number.MAX_VALUE:n,r=e[1],o=t[0],s=void 0===o?Number.MAX_VALUE:o,a=t[1];return i===s?r-a:i-s}))).length)return[2,(k=r.find((function(e){return C.includes(e)})))?A(0,"BLOCKLISTED",k):A(1,"FALLBACK","".concat(C," (").concat(I,")"))];if(N=O[0],M=N[1],L=N[2],F=N[3],-1===M)return[2,A(0,"BLOCKLISTED",L,M,F)];for(j=g?c:m,V=0,U=0;U=j[U]&&(V=U);return[2,A(V,"BENCHMARK",L,M,F)]}}))}))},Object.defineProperty(e,"__esModule",{value:!0})}(t)},622:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["qualcomm adreno 540","540",0,[[1919,1279,19]]],["qualcomm adreno 540 gpu","540",0,[[1919,1279,24]]],["qualcomm adreno 618 gpu","618",0,[[1920,1080,20]]],["qualcomm adreno 630 gpu","630",0,[[1920,1080,21]]],["qualcomm adreno 680 gpu","680",0,[[2880,1920,25]]],["qualcomm adreno 685 gpu","685",0,[[1920,1080,28]]],["qualcomm adreno 690 gpu","690",0,[[1920,1280,28]]],["qualcomm adreno 8cx gen 3","8",0,[[1920,1080,22]]]]\')},183:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["amd ???","",0,[[1920,1080,144]]],["amd [amd/ati] fiji [radeon r9 fury / nano series]","9",0,[[1920,1200,162]]],["amd 15dd","15",0,[[3840,2160,14]]],["amd 66af:f1","66",0,[[3840,2160,181]]],["amd 67df:c4","67",0,[[2560,1600,59]]],["amd 67e8:00","67",0,[[1920,1080,59]]],["amd 67ef:c5","67",0,[[1920,1080,52]]],["amd 67ef:cf","67",0,[[1920,1080,74]]],["amd 67ef:e7","67",0,[[1920,1080,60]]],["amd 67ff:08","67",0,[[1920,1200,31]]],["amd 694c:c0","694",0,[[1919,1080,28],[3840,2160,12]]],["amd 694e:c0","694",0,[[3840,2160,27]]],["amd 6980:00","6980",0,[[1920,1200,59]]],["amd 699f:c1","699",0,[[1920,1080,48]]],["amd 7310:00","7310",0,[[3840,2160,55]]],["amd 731f:c1","731",0,[[1920,1080,60]]],["amd 7340:c5","7340",0,[[2560,1600,44]]],["amd advanced micro devices [amd] nee ati device","nee",0,[[1920,1200,157]]],["amd asus amd radeon r9-990x","9",0,[[1920,1080,60]]],["amd asus eah5450","5450",0,[[1600,900,12],[1680,1050,11],[1920,1200,12]]],["amd asus eah5670","5670",0,[[1920,1080,28]]],["amd asus eah6450","6450",0,[[1920,1080,12]]],["amd asus hd7750","7750",0,[[1920,1080,105]]],["amd asus hd7770","7770",0,[[1680,1050,60]]],["amd asus hd7850","7850",0,[[1920,1080,60]]],["amd asus hd7970","7970",0,[[3840,2160,50]]],["amd asus hd8760","8760",0,[[1680,1050,59]]],["amd asus r5 230","5",0,[[1920,1080,12]]],["amd asus r7 240","7",0,[[1600,900,28],[1920,1080,31]]],["amd asus r7 250","7",0,[[1920,1080,59]]],["amd asus r7 250x","7",0,[[1920,1080,60]]],["amd asus r7 265","7",0,[[1920,1080,60]]],["amd asus r7 360","7",0,[[1920,1080,78]]],["amd asus r7 370","7",0,[[1600,900,60],[1920,1080,143]]],["amd asus r9 270","9",0,[[1600,900,60]]],["amd asus r9 280x","9",0,[[1920,1080,146]]],["amd asus r9 295x2","9",0,[[2560,1440,93]]],["amd asus r9 380","9",0,[[1920,1080,60]]],["amd asus r9 390","9",0,[[1920,1080,235]]],["amd asus radeon r7 250","7",0,[[800,638,60]]],["amd asus radeon r7 260x","7",0,[[2560,1080,65]]],["amd asus radeon r9 270x","9",0,[[1024,768,85],[1920,1080,60]]],["amd asus radeon r9 280","9",0,[[1920,1080,60]]],["amd asus radeon rx 460","460",0,[[1360,768,104]]],["amd asus radeon rx 470","470",0,[[1920,1080,60]]],["amd asus radeon rx 480","480",0,[[1920,1080,124]]],["amd asus radeon rx 550","550",0,[[1440,900,60],[1920,1080,49]]],["amd asus radeon rx 5500 xt","5500",0,[[1920,1080,325]]],["amd asus radeon rx 560","560",0,[[1360,768,60],[1920,1080,85]]],["amd asus radeon rx 570","570",0,[[1600,900,202],[1920,1080,60]]],["amd asus radeon rx 5700","5700",0,[[1920,1080,327]]],["amd asus radeon rx 5700 xt","5700",0,[[1920,1080,224],[2560,1440,60]]],["amd asus radeon rx 580","580",0,[[1920,1080,177],[2560,1080,60]]],["amd asus radeon rx vega","rx",0,[[2560,1440,117]]],["amd asus rx 6600xt macos","6600",0,[[3840,2160,60]]],["amd ati mobility radeon hd 5870","5870",0,[[1920,1200,19]]],["amd baffin amd radeon rx 560","560",0,[[1920,1080,60]]],["amd barco mxrt 5600","5600",0,[[2800,2100,30]]],["amd carrizo 9874","9874",0,[[1920,1200,11]]],["amd cezanne","",0,[[1920,1080,162]]],["amd device","",0,[[1920,1080,188]]],["amd ellesmere radeon rx 570","570",0,[[1920,1080,60]]],["amd embedded radeon e9171","9171",0,[[3840,2160,26]]],["amd embedded radeon e9173","9173",0,[[3840,2160,16]]],["amd firepro 2270","2270",0,[[1245,768,19],[1920,1200,9]]],["amd firepro 3800 graphics adapter","3800",0,[[1920,1080,18]]],["amd firepro d300","300",0,[[1920,1080,60],[2560,1440,60],[3440,1440,60],[3840,2160,30]]],["amd firepro d500","500",0,[[1600,900,60],[2560,1440,59],[2560,1600,87],[3840,2160,57]]],["amd firepro d700","700",0,[[2048,1152,59],[2560,1440,59]]],["amd firepro m2000","2000",0,[[1600,900,28],[1920,1080,24]]],["amd firepro m4000","4000",0,[[1920,1080,57]]],["amd firepro m4000 mobility pro","4000",0,[[1920,1080,57]]],["amd firepro m4100","4100",0,[[1920,1080,58]]],["amd firepro m4100 firegl v","4100",0,[[1920,1080,24]]],["amd firepro m4150","4150",0,[[1600,900,51]]],["amd firepro m4170","4170",0,[[1920,1080,43]]],["amd firepro m5100","5100",0,[[1920,1080,60]]],["amd firepro m5100 firegl v","5100",0,[[1920,1080,29]]],["amd firepro m5950","5950",0,[[1920,1080,42]]],["amd firepro m6000 mobility pro","6000",0,[[1600,900,33],[1920,1080,60]]],["amd firepro m6100","6100",0,[[1920,1080,60]]],["amd firepro m6100 firegl v","6100",0,[[1920,1080,60]]],["amd firepro m7820","7820",0,[[1680,1050,44]]],["amd firepro r5000","5000",0,[[1920,1080,60]]],["amd firepro s10000","10000",0,[[2560,1440,58]]],["amd firepro s7150","7150",0,[[1440,900,70]]],["amd firepro s9000","9000",0,[[1920,1080,60]]],["amd firepro s9050","9050",0,[[1920,1080,101]]],["amd firepro v graphics adapter","v",0,[[1680,1050,53],[1920,1080,54]]],["amd firepro v3800","3800",0,[[1280,992,28],[1680,1050,25]]],["amd firepro v3900","3900",0,[[1920,1080,28],[2560,1440,26]]],["amd firepro v4800","4800",0,[[1440,900,37],[1920,1080,50]]],["amd firepro v4800 graphics adapter","4800",0,[[1920,1080,46]]],["amd firepro v4900","4900",0,[[1600,900,76],[1920,1080,53]]],["amd firepro v4900 graphics adapter","4900",0,[[1920,1200,40]]],["amd firepro v5800","5800",0,[[1366,768,60],[1920,1200,62]]],["amd firepro v5800 graphics adapter","5800",0,[[1360,768,83],[1280,1024,58]]],["amd firepro v5900","5900",0,[[1920,1080,53],[1920,1200,58],[3440,1440,34]]],["amd firepro v5900 graphics adapter","5900",0,[[1600,1200,54],[1920,1080,65]]],["amd firepro v7800 graphics adapter","7800",0,[[1680,1050,60],[1920,1080,60]]],["amd firepro v7900","7900",0,[[1920,1080,135],[1920,1200,60],[2560,1080,124]]],["amd firepro v7900 graphics adapter","7900",0,[[1920,1080,58]]],["amd firepro v8800","8800",0,[[2560,1440,58]]],["amd firepro w2100","2100",0,[[1920,1080,33]]],["amd firepro w4100","4100",0,[[1920,1080,55]]],["amd firepro w4100 graphics adapter","4100",0,[[1600,1200,70],[1920,1080,56]]],["amd firepro w4150m firegl v","4150",0,[[1920,1080,45]]],["amd firepro w4170m","4170",0,[[1366,768,11]]],["amd firepro w4190m","4190",0,[[1920,1080,42]]],["amd firepro w4300","4300",0,[[1280,1024,116]]],["amd firepro w5000","5000",0,[[1920,1080,60],[2560,1600,75]]],["amd firepro w5000 graphics adapter","5000",0,[[1280,1024,60],[1920,1080,117]]],["amd firepro w5100","5100",0,[[1920,1080,60],[1920,1200,59]]],["amd firepro w5100 graphics adapter","5100",0,[[1920,1080,89],[3840,2160,29]]],["amd firepro w5130m","5130",0,[[1920,1080,60]]],["amd firepro w5170m","5170",0,[[1920,1080,84],[2560,1440,51]]],["amd firepro w600","600",0,[[3840,2160,25]]],["amd firepro w6150m","6150",0,[[1920,1080,45]]],["amd firepro w7000","7000",0,[[1920,1080,60],[1920,1200,136]]],["amd firepro w7000 graphics adapter","7000",0,[[1920,1080,60]]],["amd firepro w7100","7100",0,[[1920,1080,60],[1920,1200,141]]],["amd firepro w7100 graphics adapter","7100",0,[[1200,900,60]]],["amd firepro w7170m","7170",0,[[1920,1080,60]]],["amd firepro w8000","8000",0,[[1920,1200,110],[2560,1440,60]]],["amd firepro w8100","8100",0,[[1920,1080,60],[1920,1200,60]]],["amd firepro w8100 graphic adapter","8100",0,[[1280,1024,113]]],["amd firepro w9100","9100",0,[[1920,1080,60],[1920,1200,188],[2560,1600,59]]],["amd gigabyte radeon rx 580","580",0,[[1920,1080,60]]],["amd gigabyte vega 64 macos","64",0,[[1920,1080,60]]],["amd hd7950 martin rev.","7950",0,[[2560,1440,101]]],["amd hd7950 martin ver.","7950",0,[[2560,1440,104]]],["amd kamen rider black rx","rx",0,[[1920,1080,60]]],["amd kaveri","",0,[[1920,1080,9]]],["amd madison [mobility radeon hd 5650 / 6530m/6550m]","5650",0,[[1366,768,43]]],["amd matrox c680 pcie x16","680",0,[[2560,1440,49]]],["amd matrox c900 pcie x16","900",0,[[5760,3240,9]]],["amd metal","",0,[[1920,1080,120]]],["amd mobility radeon hd 4250","4250",0,[[963,722,26]]],["amd mobility radeon hd 5000","5000",0,[[1366,768,47]]],["amd mobility radeon hd 5400","5400",0,[[1366,768,24]]],["amd mobility radeon hd 5430","5430",0,[[1600,900,15],[1920,1080,60]]],["amd mobility radeon hd 5470","5470",0,[[1366,768,24]]],["amd mobility radeon hd 5570","5570",0,[[1920,1080,27]]],["amd mobility radeon hd 5730 / 6570m","5730",0,[[1366,768,58]]],["amd mobility radeon hd 5850","5850",0,[[1600,900,55]]],["amd mobility radeon hd 5870","5870",0,[[1600,900,64],[1920,1200,53]]],["amd msi / amd rx 560","560",0,[[1920,1080,60]]],["amd msi / amd rx 560 4g","560",0,[[1920,1080,60]]],["amd msi baffin rx650","650",0,[[1920,1080,399]]],["amd msi rx560","560",0,[[1920,1080,343]]],["amd msi rx650","650",0,[[1920,1080,60]]],["amd mxgpu","",0,[[1920,1012,67],[1920,1080,106]]],["amd navi 10 5700 xt","10",0,[[3840,2160,60]]],["amd opal xt/gl","xt",0,[[1366,768,60]]],["amd park [mobility radeon hd 5430","5430",0,[[1280,720,11]]],["amd picasso","",0,[[1920,1080,48]]],["amd pitcairn pro radeon hd 7850","7850",0,[[1920,1080,60]]],["amd powercolor radeon r9 280","9",0,[[1920,1080,60]]],["amd r9 270x devil","9",0,[[1920,1080,60]]],["amd r9 280x dual-x","9",0,[[1920,1080,60]]],["amd r9 380","9",0,[[2560,1440,119]]],["amd r9 xxx","9",0,[[1920,1080,60]]],["amd radeon","",0,[[1920,1080,299],[3440,1440,60]]],["amd radeon 500","500",0,[[1920,1080,73]]],["amd radeon 520","520",0,[[1920,1080,35],[2560,1440,29]]],["amd radeon 530","530",0,[[1366,768,60],[1920,1080,30]]],["amd radeon 535","535",0,[[1920,1080,35]]],["amd radeon 535dx","535",0,[[1366,768,31],[1920,1080,37]]],["amd radeon 540","540",0,[[1920,1080,38]]],["amd radeon 540 / rx 540x/550/550x","540",0,[[2560,1440,88]]],["amd radeon 540x","540",0,[[1920,1080,59]]],["amd radeon 550","550",0,[[1920,1080,115]]],["amd radeon 550x","550",0,[[1920,1080,28]]],["amd radeon 610","610",0,[[1920,1080,29]]],["amd radeon 620","620",0,[[1920,1080,18]]],["amd radeon 625","625",0,[[1366,768,55],[1920,1080,47]]],["amd radeon 630","630",0,[[1920,1080,29]]],["amd radeon 6600m and 6700m","6600",0,[[1366,768,36],[1440,900,60]]],["amd radeon 6800","6800",0,[[3440,1440,100]]],["amd radeon 7500m/7600m","7500",0,[[1366,768,37]]],["amd radeon 7950 x2","7950",0,[[2560,1440,174]]],["amd radeon d700","700",0,[[2560,1440,120]]],["amd radeon e6460","6460",0,[[1600,1200,13]]],["amd radeon e6760","6760",0,[[1200,900,54],[1920,1080,42]]],["amd radeon e8860","8860",0,[[1920,1200,27],[2560,1374,88]]],["amd radeon e8870","8870",0,[[1920,1080,81]]],["amd radeon e8870mxm","8870",0,[[1920,1080,60]]],["amd radeon e9260","9260",0,[[1680,1050,60],[3840,2160,38]]],["amd radeon e9550","9550",0,[[1680,1050,60],[3840,2160,58]]],["amd radeon embedded e9560","9560",0,[[1920,1200,60]]],["amd radeon fury","",0,[[1920,1080,60]]],["amd radeon fury x","x",0,[[1920,1080,60],[2560,1440,144]]],["amd radeon hd - firepro d300","300",0,[[1920,1080,60]]],["amd radeon hd - firepro d300 opengl engine","300",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd - firepro d500 opengl engine","500",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd - firepro d700 opengl engine","700",0,[[3840,2160,52]]],["amd radeon hd 2600 xt","2600",1,[[2560,1600,-1]]],["amd radeon hd 5000","5000",0,[[1920,1080,8]]],["amd radeon hd 5400","5400",0,[[1920,1080,12]]],["amd radeon hd 5450","5450",0,[[1920,1080,13]]],["amd radeon hd 5470","5470",0,[[1280,1024,16]]],["amd radeon hd 5500","5500",0,[[1920,1080,27]]],["amd radeon hd 5570","5570",0,[[1920,1080,60],[2048,1152,31]]],["amd radeon hd 5600","5600",0,[[1920,1080,56]]],["amd radeon hd 5650","5650",0,[[1366,768,53]]],["amd radeon hd 5670","5670",1,[[1920,1080,-1],[2560,1440,-1]]],["amd radeon hd 5670 opengl engine","5670",1,[[2560,1440,-1]]],["amd radeon hd 5700","5700",0,[[1920,1080,59]]],["amd radeon hd 5730","5730",0,[[1366,768,46],[1680,1050,40]]],["amd radeon hd 5750","5750",1,[[1920,1080,-1],[1920,1200,-1],[2560,1440,-1]]],["amd radeon hd 5750 opengl engine","5750",1,[[2560,1440,-1]]],["amd radeon hd 5770","5770",0,[[1776,1000,43],[1920,1080,59]]],["amd radeon hd 5800","5800",0,[[1366,768,60],[1920,1200,102]]],["amd radeon hd 5850","5850",0,[[1920,1080,60]]],["amd radeon hd 5870","5870",0,[[1280,960,75],[1920,1080,60],[2048,1280,60]]],["amd radeon hd 5870m","5870",0,[[2560,1080,31]]],["amd radeon hd 5970","5970",0,[[1360,768,60],[1920,1080,60]]],["amd radeon hd 6230","6230",0,[[1366,768,13]]],["amd radeon hd 6250","6250",0,[[1280,800,8],[1366,768,8]]],["amd radeon hd 6290","6290",1,[[1366,768,-1]]],["amd radeon hd 6300m","6300",1,[[1366,768,-1]]],["amd radeon hd 6310","6310",1,[[1366,768,-1]]],["amd radeon hd 6320","6320",1,[[1366,768,-1]]],["amd radeon hd 6350","6350",0,[[1280,1024,18],[1920,1080,14]]],["amd radeon hd 6370d","6370",0,[[1920,1080,14]]],["amd radeon hd 6370m","6370",0,[[1366,768,25]]],["amd radeon hd 6380g","6380",0,[[1366,768,19]]],["amd radeon hd 6400","6400",0,[[1920,1080,13]]],["amd radeon hd 6400m","6400",0,[[1366,768,28]]],["amd radeon hd 6400m/7400m","6400",0,[[1366,768,28]]],["amd radeon hd 6410d","6410",0,[[1920,1080,11]]],["amd radeon hd 6450","6450",0,[[1920,1080,14]]],["amd radeon hd 6450 / r5 230","6450",0,[[1440,900,12]]],["amd radeon hd 6450 230","6450",0,[[1920,1080,15]]],["amd radeon hd 6470m","6470",0,[[1366,768,27],[1600,900,21]]],["amd radeon hd 6470m/7400m","6470",0,[[1366,768,44]]],["amd radeon hd 6480g","6480",0,[[1280,768,19],[1366,768,27],[1600,900,18]]],["amd radeon hd 6490m","6490",1,[[1366,768,-1],[1440,900,-1],[1680,1050,-1]]],["amd radeon hd 6500","6500",0,[[1920,1080,25]]],["amd radeon hd 6500m/5600","6500",0,[[1920,1080,27]]],["amd radeon hd 6510","6510",0,[[1600,900,32]]],["amd radeon hd 6520g","6520",0,[[1366,768,21],[1600,900,20]]],["amd radeon hd 6530d","6530",0,[[1366,768,31],[1440,900,36],[1920,1080,24]]],["amd radeon hd 6540","6540",0,[[1600,1200,13]]],["amd radeon hd 6550d","6550",0,[[1920,1080,28]]],["amd radeon hd 6570","6570",0,[[1920,1080,52],[2560,1440,17]]],["amd radeon hd 6620g","6620",0,[[1360,768,43],[1366,768,28]]],["amd radeon hd 6630m","6630",1,[[1366,768,-1],[1600,900,-1],[1920,1080,-1]]],["amd radeon hd 6630m/6650m/6750m/7670m/7690m","6630",1,[[1366,768,-1],[1920,1080,-1]]],["amd radeon hd 6650m","6650",0,[[1366,768,51],[1600,900,31]]],["amd radeon hd 6670","6670",0,[[1920,1080,55]]],["amd radeon hd 6700","6700",0,[[1920,1080,56]]],["amd radeon hd 6700 green","6700",0,[[1360,768,89]]],["amd radeon hd 6700m/7700m/7900m","6700",0,[[1366,768,59]]],["amd radeon hd 6730m/6770m","6730",0,[[1366,768,58],[1920,1080,46]]],["amd radeon hd 6730m/6770m/7690m xt","6730",0,[[1920,1080,48]]],["amd radeon hd 6750","6750",0,[[1440,900,72],[1920,1080,60]]],["amd radeon hd 6750m","6750",1,[[1440,900,-1],[1920,1080,-1],[1920,1200,-1]]],["amd radeon hd 6770","6770",0,[[1920,1080,60]]],["amd radeon hd 6770m","6770",1,[[1440,900,-1],[2560,1440,-1]]],["amd radeon hd 6770m opengl engine","6770",1,[[2560,1440,-1]]],["amd radeon hd 6790","6790",0,[[1920,1080,59]]],["amd radeon hd 6800","6800",0,[[1280,1024,89],[1920,1080,60]]],["amd radeon hd 6800m","6800",0,[[1600,900,18],[1920,1080,40]]],["amd radeon hd 6850","6850",0,[[1920,1080,59],[2560,1600,54]]],["amd radeon hd 6870","6870",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd 6900","6900",0,[[1920,1080,60]]],["amd radeon hd 6900m","6900",0,[[1920,1080,60]]],["amd radeon hd 6950","6950",0,[[1680,1050,60],[1920,1080,41]]],["amd radeon hd 6970","6970",0,[[1920,1080,60]]],["amd radeon hd 6970m","6970",1,[[2560,1440,-1]]],["amd radeon hd 6970m opengl engine","6970",1,[[2560,1440,-1]]],["amd radeon hd 6990","6990",0,[[1920,1080,60]]],["amd radeon hd 7000","7000",0,[[1920,1080,24]]],["amd radeon hd 7290","7290",0,[[1366,768,9]]],["amd radeon hd 7310","7310",0,[[1366,768,14]]],["amd radeon hd 7340","7340",0,[[1366,768,17],[1920,1080,10]]],["amd radeon hd 7340g","7340",0,[[1366,768,15]]],["amd radeon hd 7340m","7340",0,[[1366,768,15]]],["amd radeon hd 7350","7350",0,[[1920,1080,13]]],["amd radeon hd 7400","7400",0,[[1920,1080,18]]],["amd radeon hd 7400g","7400",0,[[963,768,31]]],["amd radeon hd 7400m","7400",0,[[1366,768,44]]],["amd radeon hd 7420g","7420",0,[[1366,768,28],[1600,900,26]]],["amd radeon hd 7450","7450",0,[[1920,1080,15]]],["amd radeon hd 7450a","7450",0,[[1920,1080,15]]],["amd radeon hd 7450m","7450",0,[[1366,768,30]]],["amd radeon hd 7470","7470",0,[[1680,1050,22],[1920,1080,144]]],["amd radeon hd 7470m","7470",0,[[1366,768,31],[1600,900,23]]],["amd radeon hd 7480d","7480",0,[[1280,1024,25],[1920,1080,24],[1920,1200,18]]],["amd radeon hd 7500","7500",0,[[1366,696,49],[1366,768,49]]],["amd radeon hd 7500g","7500",0,[[1366,768,26]]],["amd radeon hd 7500m/7600m","7500",0,[[1366,768,46]]],["amd radeon hd 7520g","7520",0,[[1366,768,33]]],["amd radeon hd 7520g + hd 7400m dual","7520",0,[[1366,768,34]]],["amd radeon hd 7520g + hd 7600m dual","7520",0,[[1366,768,31],[1600,900,41]]],["amd radeon hd 7540d","7540",0,[[1024,768,55],[1280,1024,44],[1920,1080,22]]],["amd radeon hd 7540d + hd 6670 dual","7540",0,[[1280,1024,36]]],["amd radeon hd 7550m/7650m","7550",0,[[1366,768,57]]],["amd radeon hd 7560d","7560",0,[[1920,1080,34]]],["amd radeon hd 7560d + hd 6570 dual","7560",0,[[1680,1050,44]]],["amd radeon hd 7560d + hd 6670 dual","7560",0,[[800,638,60]]],["amd radeon hd 7570","7570",0,[[1024,768,72],[1920,1080,52]]],["amd radeon hd 7570m","7570",0,[[1366,768,35]]],["amd radeon hd 7570m/hd 7670m","7570",0,[[1366,768,50],[1600,900,29]]],["amd radeon hd 7600","7600",0,[[1920,1080,60]]],["amd radeon hd 7600a","7600",0,[[1920,1080,28]]],["amd radeon hd 7600g","7600",0,[[1366,768,29]]],["amd radeon hd 7600g + 7500m/7600m dual","7600",0,[[1366,768,19]]],["amd radeon hd 7600g + hd 8670m dual","7600",0,[[1366,768,29]]],["amd radeon hd 7600g + hd dual","7600",0,[[1366,768,20]]],["amd radeon hd 7600m","7600",0,[[1366,768,56]]],["amd radeon hd 7600m/7700m","7600",0,[[1366,768,31]]],["amd radeon hd 7610m","7610",0,[[1366,768,43]]],["amd radeon hd 7620g","7620",0,[[1366,768,22],[1920,1080,19]]],["amd radeon hd 7640g","7640",0,[[1366,768,38]]],["amd radeon hd 7640g + 7470m dual","7640",0,[[1366,768,32]]],["amd radeon hd 7640g + 7600m dual","7640",0,[[1366,768,23]]],["amd radeon hd 7640g + 7670m dual","7640",0,[[1600,900,15]]],["amd radeon hd 7640g + 8500m dual","7640",0,[[1366,768,35]]],["amd radeon hd 7640g + hd 7400m dual","7640",0,[[1366,768,37]]],["amd radeon hd 7640g + hd 7500 dual","7640",0,[[1366,768,35]]],["amd radeon hd 7640g + hd 7670m dual","7640",0,[[1366,768,34]]],["amd radeon hd 7640g + hd 8500m dual","7640",0,[[1366,768,40]]],["amd radeon hd 7640g + hd 8570m dual","7640",0,[[1366,768,31]]],["amd radeon hd 7650a","7650",0,[[1680,1050,43],[1920,1080,15]]],["amd radeon hd 7650m","7650",0,[[1366,768,41],[1600,900,45]]],["amd radeon hd 7660d","7660",0,[[1680,1050,40],[1920,1008,60],[1920,1080,38]]],["amd radeon hd 7660d + hd 6570 dual","7660",0,[[1200,900,32]]],["amd radeon hd 7660d + hd 6670 dual","7660",0,[[1360,768,57],[1920,1080,53]]],["amd radeon hd 7660g","7660",0,[[1366,768,44],[1600,900,41],[1920,1080,34],[1920,1200,27]]],["amd radeon hd 7660g + 7600m dual","7660",0,[[1366,768,53],[1600,900,45]]],["amd radeon hd 7660g + 7670m dual","7660",0,[[1366,768,52]]],["amd radeon hd 7660g + 8670m dual","7660",0,[[1600,900,46]]],["amd radeon hd 7660g + hd 7600m dual","7660",0,[[1366,768,50]]],["amd radeon hd 7660g + hd 7670m dual","7660",0,[[1366,768,35]]],["amd radeon hd 7660g + hd 8600m dual","7660",0,[[1600,900,29]]],["amd radeon hd 7670","7670",0,[[1920,1080,39]]],["amd radeon hd 7670m","7670",0,[[1366,768,49],[1920,1080,36]]],["amd radeon hd 7700","7700",0,[[1400,1050,45],[1920,1080,60]]],["amd radeon hd 7700m","7700",0,[[1920,1080,54]]],["amd radeon hd 7730m","7730",0,[[1920,1080,57]]],["amd radeon hd 7750","7750",0,[[1280,1024,60],[1600,900,60],[1400,1050,98],[1920,1080,60],[3840,2160,23]]],["amd radeon hd 7750 / r7 250e","7750",0,[[2560,1080,69]]],["amd radeon hd 7750m","7750",0,[[1680,1050,57]]],["amd radeon hd 7770","7770",0,[[1920,1080,60]]],["amd radeon hd 7770 / r7 250x","7770",0,[[1680,1050,78]]],["amd radeon hd 7770 ghz","7770",0,[[1920,1080,78]]],["amd radeon hd 7790","7790",0,[[1920,1080,16]]],["amd radeon hd 7790 / r7 360 / r9 260/360","7790",0,[[1280,1024,131]]],["amd radeon hd 7800","7800",0,[[1920,1080,60]]],["amd radeon hd 7800m","7800",0,[[1920,1080,57]]],["amd radeon hd 7850","7850",0,[[1920,1080,60]]],["amd radeon hd 7850 / r7 265 / r9 270 1024sp","7850",0,[[1280,1024,87]]],["amd radeon hd 7870","7870",0,[[1920,1080,120],[2560,1440,60],[2560,1600,114],[3840,2160,30]]],["amd radeon hd 7870 ghz","7870",0,[[1920,1080,75]]],["amd radeon hd 7870 xt","7870",0,[[1920,1080,57],[3840,2160,53]]],["amd radeon hd 7870m","7870",0,[[1920,1080,22],[2732,1536,40]]],["amd radeon hd 7900","7900",0,[[2560,1600,59]]],["amd radeon hd 7950","7950",0,[[1920,1080,50]]],["amd radeon hd 7950 / r9 280","7950",0,[[1920,1080,59]]],["amd radeon hd 7950 oem / r9 280","7950",0,[[1920,1080,60]]],["amd radeon hd 7970","7970",0,[[1920,1080,60]]],["amd radeon hd 7970 / r9 280x","7970",0,[[1920,1080,193]]],["amd radeon hd 7970m","7970",0,[[1366,768,60],[1920,1080,60]]],["amd radeon hd 7970x/8970 280x","7970",0,[[1920,1080,60]]],["amd radeon hd 7990","7990",0,[[1920,1080,60],[5120,2880,63]]],["amd radeon hd 7xxx","7",0,[[1920,1080,60]]],["amd radeon hd 8180","8180",0,[[1366,768,10]]],["amd radeon hd 8200 / r3","8200",0,[[1366,768,21],[1600,900,13],[1680,1050,13]]],["amd radeon hd 8210","8210",0,[[1366,768,18]]],["amd radeon hd 8240","8240",0,[[1600,900,17]]],["amd radeon hd 8240 / r3","8240",0,[[1366,768,14]]],["amd radeon hd 8250","8250",0,[[1366,768,14],[1920,1200,10]]],["amd radeon hd 8280","8280",0,[[1600,900,60]]],["amd radeon hd 8280 / r3","8280",0,[[1366,768,22]]],["amd radeon hd 8280e","8280",0,[[2880,1620,6]]],["amd radeon hd 8330","8330",0,[[1366,768,24]]],["amd radeon hd 8350","8350",0,[[1920,1080,57]]],["amd radeon hd 8350g","8350",0,[[1366,768,18]]],["amd radeon hd 8370d","8370",0,[[1366,768,60],[1280,1024,26],[1920,1080,22]]],["amd radeon hd 8400","8400",0,[[1366,768,30],[1920,1080,16]]],["amd radeon hd 8400 / r3","8400",0,[[1360,768,19],[1366,768,22],[1920,1080,12]]],["amd radeon hd 8400e","8400",0,[[1680,1050,17],[1920,1080,16],[1920,1200,14]]],["amd radeon hd 8410g","8410",0,[[1366,768,32]]],["amd radeon hd 8450g","8450",0,[[1366,768,23]]],["amd radeon hd 8450g + hd 8750m dual","8450",0,[[1366,768,21]]],["amd radeon hd 8470","8470",0,[[1920,1080,17]]],["amd radeon hd 8470 + 7660d dual","8470",0,[[1920,1080,60]]],["amd radeon hd 8470d","8470",0,[[1280,1024,44],[1920,1080,21]]],["amd radeon hd 8470d + hd 6450 dual","8470",0,[[1600,900,37]]],["amd radeon hd 8490","8490",0,[[1920,1080,18],[1920,1200,20]]],["amd radeon hd 8500m","8500",0,[[1366,768,41],[1920,1080,19]]],["amd radeon hd 8500m/8700m","8500",0,[[1920,1080,30]]],["amd radeon hd 8510g","8510",0,[[1366,768,29],[1920,1080,17]]],["amd radeon hd 8550","8550",0,[[1920,1080,25]]],["amd radeon hd 8550g","8550",0,[[1366,768,34],[1600,900,41],[1920,1080,34]]],["amd radeon hd 8550g + 8500m dual","8550",0,[[1366,768,42]]],["amd radeon hd 8550g + 8600 dual","8550",0,[[1920,1080,27]]],["amd radeon hd 8550g + hd 8570m dual","8550",0,[[1366,768,32]]],["amd radeon hd 8550g + hd 8600 dual","8550",0,[[1366,768,60]]],["amd radeon hd 8550g + hd 8750m dual","8550",0,[[1366,768,37]]],["amd radeon hd 8550g + r5 m230 dual","8550",0,[[1366,768,29]]],["amd radeon hd 8570","8570",0,[[1280,1024,60],[1680,1050,54],[1920,1080,50]]],["amd radeon hd 8570 / r5 430 / r7 240 / radeon 520","8570",0,[[1920,1080,25]]],["amd radeon hd 8570d","8570",0,[[1920,1080,16]]],["amd radeon hd 8570d + r7 240 dual","8570",0,[[1920,1080,45]]],["amd radeon hd 8570m","8570",0,[[1366,768,40]]],["amd radeon hd 8600","8600",0,[[1366,768,41]]],["amd radeon hd 8600m","8600",0,[[1366,768,42],[1920,1080,14]]],["amd radeon hd 8610g","8610",0,[[1366,768,31],[1920,1080,16]]],["amd radeon hd 8610g + 8600m dual","8610",0,[[1366,768,22]]],["amd radeon hd 8610g + hd 8600m dual","8610",0,[[1366,768,41]]],["amd radeon hd 8610g + hd 8670m dual","8610",0,[[1366,768,33]]],["amd radeon hd 8650g","8650",0,[[1360,768,44],[1366,768,44]]],["amd radeon hd 8650g + 8500m dual","8650",0,[[1366,768,35]]],["amd radeon hd 8650g + 8600 dual","8650",0,[[1920,1080,38]]],["amd radeon hd 8650g + 8600m dual","8650",0,[[1366,768,21]]],["amd radeon hd 8650g + 8670m dual","8650",0,[[1366,768,66]]],["amd radeon hd 8650g + 8750m dual","8650",0,[[1920,1080,28]]],["amd radeon hd 8650g + hd 7600m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + hd 8500m dual","8650",0,[[1366,768,23]]],["amd radeon hd 8650g + hd 8570m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + hd 8600m dual","8650",0,[[1366,768,46],[1600,900,29]]],["amd radeon hd 8650g + hd 8750m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + r5 m200 dual","8650",0,[[1366,768,35]]],["amd radeon hd 8670 / r7 250","8670",0,[[1024,768,1]]],["amd radeon hd 8670a/8670m/8690m","8670",0,[[1366,768,47]]],["amd radeon hd 8670a/8670m/8750m","8670",0,[[1366,768,60]]],["amd radeon hd 8670d","8670",0,[[1024,768,45],[1280,1024,69],[1920,1080,38]]],["amd radeon hd 8670d + 7700 dual","8670",0,[[1680,1050,58]]],["amd radeon hd 8670d + hd 6670 dual","8670",0,[[1680,1050,33]]],["amd radeon hd 8670d + r5 200 dual","8670",0,[[2560,1080,14]]],["amd radeon hd 8670d + r7 200 dual","8670",0,[[1920,1080,37]]],["amd radeon hd 8670m","8670",0,[[1366,768,41]]],["amd radeon hd 8690a","8690",0,[[1920,1080,31]]],["amd radeon hd 8690m","8690",0,[[1600,900,35]]],["amd radeon hd 8700m","8700",0,[[1366,768,60]]],["amd radeon hd 8730m","8730",0,[[1366,768,59]]],["amd radeon hd 8750m","8750",0,[[1366,768,60]]],["amd radeon hd 8770","8770",0,[[1920,1080,111]]],["amd radeon hd 8790m","8790",0,[[1600,900,78],[1920,1080,60]]],["amd radeon hd 8800m","8800",0,[[1920,1080,60],[2880,1800,45]]],["amd radeon hd 8830m","8830",0,[[1920,1080,82]]],["amd radeon hd 8850m","8850",0,[[1366,768,45]]],["amd radeon hd 8870m","8870",0,[[1280,1024,60],[1600,900,60]]],["amd radeon hd 8950","8950",0,[[1920,1080,60],[1920,1200,59]]],["amd radeon hd 8970","8970",0,[[2560,1600,60]]],["amd radeon hd 8970m","8970",0,[[1920,1080,146],[1920,1200,60]]],["amd radeon hd 8xxx","8",0,[[1920,1080,120],[2560,1440,58]]],["amd radeon hd5450","5450",0,[[1280,720,24]]],["amd radeon hd6870","6870",0,[[1920,1080,60]]],["amd radeon hd7970m","7970",0,[[2560,1440,116]]],["amd radeon hd8530m","8530",0,[[1366,768,40]]],["amd radeon hd8730","8730",0,[[1680,1050,42]]],["amd radeon hd8970m","8970",0,[[1920,1080,74]]],["amd radeon hybrid","",0,[[1366,768,27]]],["amd radeon infoshock rx 460","460",0,[[1360,768,102]]],["amd radeon instinct mi25","25",0,[[1920,1200,26]]],["amd radeon instinct mi25 mxgpu","25",0,[[1920,1080,20],[1920,1200,32]]],["amd radeon m535dx","535",0,[[1366,768,58]]],["amd radeon navi14","14",0,[[3840,2160,60]]],["amd radeon polaris","",0,[[3840,2160,60],[5120,2880,44]]],["amd radeon polaris 10","10",0,[[1920,1200,60]]],["amd radeon pro","pro",0,[[1920,1080,114]]],["amd radeon pro 270x","270",0,[[2560,1440,74]]],["amd radeon pro 450","450",0,[[1920,1080,30],[2880,1800,43],[3360,2100,36],[5120,2880,30]]],["amd radeon pro 450 opengl engine","450",0,[[1920,1200,60]]],["amd radeon pro 455","455",0,[[2879,1800,54],[2880,1800,48],[3360,2100,37]]],["amd radeon pro 455 opengl engine","455",0,[[3360,2100,36]]],["amd radeon pro 460","460",0,[[2880,1800,50],[3360,2100,42]]],["amd radeon pro 460 opengl engine","460",0,[[5760,3240,15]]],["amd radeon pro 470","470",0,[[6016,3384,49]]],["amd radeon pro 480","480",0,[[1920,1080,60]]],["amd radeon pro 5300","5300",0,[[5120,2880,60]]],["amd radeon pro 5300m","5300",0,[[1920,1080,214],[3584,2240,130]]],["amd radeon pro 5500 xt","5500",0,[[5120,2880,51]]],["amd radeon pro 5500m","5500",0,[[3072,1920,60],[3584,2240,139]]],["amd radeon pro 555","555",0,[[2879,1800,54],[2880,1800,36],[3360,2100,40]]],["amd radeon pro 555x","555",0,[[2880,1800,42],[3360,2100,39]]],["amd radeon pro 560","560",0,[[2879,1800,56],[2880,1800,56],[3360,2100,42]]],["amd radeon pro 5600m","5600",0,[[3072,1920,60],[3584,2240,60]]],["amd radeon pro 560x","560",0,[[2879,1800,59],[2880,1800,71],[3360,2100,43]]],["amd radeon pro 570","570",0,[[5120,2880,48]]],["amd radeon pro 570 opengl engine","570",0,[[5120,2880,46]]],["amd radeon pro 5700","5700",0,[[5120,2880,60]]],["amd radeon pro 5700 xt","5700",0,[[5120,2880,60]]],["amd radeon pro 570x","570",0,[[5120,2880,50]]],["amd radeon pro 575","575",0,[[4096,2304,60],[5120,2880,50]]],["amd radeon pro 575 opengl engine","575",0,[[5120,2880,48]]],["amd radeon pro 575x","575",0,[[5120,2880,56]]],["amd radeon pro 580","580",0,[[5120,2880,54]]],["amd radeon pro 580 opengl engine","580",0,[[5120,2880,50]]],["amd radeon pro 580x","580",0,[[5120,2880,52]]],["amd radeon pro duo","pro",0,[[1920,1080,234],[1800,1350,59],[3840,2160,82],[4096,2160,60]]],["amd radeon pro rx 560","560",0,[[2560,1080,60]]],["amd radeon pro ssg","pro",0,[[3440,1440,125]]],["amd radeon pro v340","340",0,[[1920,1080,112]]],["amd radeon pro v520 mxgpu","520",0,[[1920,1080,271]]],["amd radeon pro v7350x2","7350",0,[[1920,1080,60]]],["amd radeon pro vega 16","16",0,[[2879,1800,60],[3360,2100,60]]],["amd radeon pro vega 20","20",0,[[2880,1800,120],[3360,2100,121],[3840,2160,30]]],["amd radeon pro vega 48","48",0,[[5120,2880,86]]],["amd radeon pro vega 56","56",0,[[1920,1080,60],[5120,2880,60]]],["amd radeon pro vega 56 opengl engine","56",0,[[5120,2880,60]]],["amd radeon pro vega 64","64",0,[[5120,2880,60]]],["amd radeon pro vega 64 opengl engine","64",0,[[5120,2880,60]]],["amd radeon pro vega 64x","64",0,[[2560,1440,206],[4096,2304,60],[5120,2880,60]]],["amd radeon pro vega ii","proii",0,[[3840,1600,60],[5120,2880,60]]],["amd radeon pro vega ii duo","proii",0,[[2560,1440,239],[5120,2880,60]]],["amd radeon pro w5500","5500",0,[[1920,1080,195],[3840,2160,59],[7680,3240,56]]],["amd radeon pro w5500m","5500",0,[[1920,1080,60]]],["amd radeon pro w5500x","5500",0,[[1920,1200,60]]],["amd radeon pro w5700","5700",0,[[1680,1050,253],[5120,1440,120],[3840,2160,60]]],["amd radeon pro w5700x","5700",0,[[3840,2160,60]]],["amd radeon pro w6600","6600",0,[[1920,1200,60],[3840,2160,166]]],["amd radeon pro w6600m","6600",0,[[1920,1080,60]]],["amd radeon pro w6800","6800",0,[[1920,1080,60],[3840,2160,237]]],["amd radeon pro w6800x","6800",0,[[6016,3384,60]]],["amd radeon pro w6800x duo","6800",0,[[3840,1600,60],[5120,2880,45]]],["amd radeon pro w6900x","6900",0,[[3840,2160,60]]],["amd radeon pro wx","pro",0,[[2560,1080,69]]],["amd radeon pro wx 2100","2100",0,[[1280,1024,145],[1920,1080,60]]],["amd radeon pro wx 3100","3100",0,[[1919,1080,58],[1920,1080,123],[2560,1440,82]]],["amd radeon pro wx 3200","3200",0,[[2560,1440,92]]],["amd radeon pro wx 4100","4100",0,[[1920,1080,60],[1920,1200,60],[3840,2160,30],[5120,2880,18]]],["amd radeon pro wx 4130","4130",0,[[1920,1080,60],[3840,2160,30]]],["amd radeon pro wx 4150","4150",0,[[1920,1080,56],[3840,2160,37],[4096,2160,34]]],["amd radeon pro wx 5100","5100",0,[[1920,1080,60],[2560,1440,91],[3840,2160,55]]],["amd radeon pro wx 5100 opengl engine","5100",0,[[2560,1440,60]]],["amd radeon pro wx 7100","7100",0,[[1920,1080,122],[2560,1080,58],[3840,2160,60],[5120,2880,60]]],["amd radeon pro wx 7100 mobile","7100",0,[[2560,1440,60]]],["amd radeon pro wx 7100 opengl engine","7100",0,[[3840,2160,60]]],["amd radeon pro wx 8200","8200",0,[[3440,1440,124]]],["amd radeon pro wx 9100","9100",0,[[1920,1080,60],[4096,2160,101]]],["amd radeon pro wx 9100 opengl engine","9100",0,[[1920,1080,60]]],["amd radeon pro wx vega m gl","prom",0,[[3840,2160,14]]],["amd radeon pro wx3200","3200",0,[[1920,1080,55]]],["amd radeon pro wx9100","9100",0,[[2560,1440,60]]],["amd radeon r2","2",0,[[1366,768,13],[1600,900,14]]],["amd radeon r2e","2",0,[[1366,768,16],[1920,1080,45],[3840,2160,4]]],["amd radeon r3","3",0,[[1366,768,17],[1920,1080,15]]],["amd radeon r4","4",0,[[1366,768,19],[1920,1080,13]]],["amd radeon r4e","4",0,[[3840,2160,6]]],["amd radeon r5","5",0,[[1024,768,38],[1360,768,25],[1366,768,21],[1280,1024,33],[1920,1080,14],[3200,1800,7]]],["amd radeon r5 220","5",0,[[1366,768,19],[1920,1080,12]]],["amd radeon r5 230","5",0,[[1920,1080,21]]],["amd radeon r5 235","5",0,[[1920,1080,17]]],["amd radeon r5 240","5",0,[[1280,1024,34],[1920,1080,24]]],["amd radeon r5 340","5",0,[[1920,1080,27]]],["amd radeon r5 340x","5",0,[[1920,1080,31]]],["amd radeon r5 430","5",0,[[1280,1024,31],[1680,1050,54],[1920,1080,54]]],["amd radeon r5 435","5",0,[[1920,1080,30]]],["amd radeon r5 m200","5",0,[[1600,900,45],[1920,1080,20]]],["amd radeon r5 m200 / hd 8500m","5",0,[[1366,768,31],[1920,1080,24]]],["amd radeon r5 m230","5",0,[[1366,768,37]]],["amd radeon r5 m240","5",0,[[1366,768,42],[1920,1080,23]]],["amd radeon r5 m255","5",0,[[1366,768,59],[1600,900,33]]],["amd radeon r5 m315","5",0,[[1366,768,45]]],["amd radeon r5 m320","5",0,[[1920,1080,19]]],["amd radeon r5 m330","5",0,[[1366,768,27],[1920,1080,26]]],["amd radeon r5 m335","5",0,[[1366,768,55],[1920,1080,19]]],["amd radeon r5 m420","5",0,[[1366,768,49]]],["amd radeon r5 m430","5",0,[[1366,768,36],[1920,1080,20]]],["amd radeon r5 m435","5",0,[[1920,1080,41],[2560,1440,67]]],["amd radeon r5 m445","5",0,[[1920,1080,32]]],["amd radeon r5e","5",0,[[1600,768,14],[1920,1080,16]]],["amd radeon r6","6",0,[[1366,768,30],[1280,1024,23],[1920,1080,12]]],["amd radeon r6 m255dx","6",0,[[1366,768,25]]],["amd radeon r6 m340dx","6",0,[[1366,768,31],[1920,1080,15]]],["amd radeon r6e","6",0,[[3840,2160,5]]],["amd radeon r7","7",0,[[1366,768,35],[1280,1024,31],[1680,1050,39],[1920,1080,12],[1920,1200,16],[2560,1080,15],[2560,1440,21],[3840,2160,8]]],["amd radeon r7 200","7",0,[[1280,1024,45],[1920,1080,120]]],["amd radeon r7 200 series","7",0,[[1920,1080,43]]],["amd radeon r7 240","7",0,[[1920,1080,29]]],["amd radeon r7 240 + hd 8570d dual","7",0,[[1920,1080,43]]],["amd radeon r7 250","7",0,[[1920,1080,49]]],["amd radeon r7 250e","7",0,[[1920,1080,60]]],["amd radeon r7 250x","7",0,[[1920,1080,60]]],["amd radeon r7 260x","7",0,[[1920,1080,56]]],["amd radeon r7 260x/360","7",0,[[1920,1200,102]]],["amd radeon r7 350","7",0,[[1024,768,60],[1280,1024,79],[1920,1080,59]]],["amd radeon r7 350x","7",0,[[1920,1080,50]]],["amd radeon r7 360","7",0,[[1920,1048,60],[1920,1080,102]]],["amd radeon r7 360 / r9 360","7",0,[[1920,1080,60]]],["amd radeon r7 370","7",0,[[1600,900,60],[1920,1080,75]]],["amd radeon r7 370 / r9 270","7",0,[[1920,1080,74]]],["amd radeon r7 370 / r9 270x/370","7",0,[[1600,900,115],[1920,1080,60]]],["amd radeon r7 370 / r9 270x/370x","7",0,[[1920,1080,115]]],["amd radeon r7 370 series","7",0,[[1920,1080,212],[3840,2160,60]]],["amd radeon r7 430","7",0,[[1920,1080,55],[3840,2160,10]]],["amd radeon r7 450","7",0,[[1920,1080,60]]],["amd radeon r7 a360","7",0,[[1920,1080,28]]],["amd radeon r7 graphics + hd 7700 dual","7",0,[[1600,1200,72]]],["amd radeon r7 graphics + r5 340 dual","7",0,[[1920,1080,47]]],["amd radeon r7 graphics + r7 200 dual","7",0,[[1920,1080,45],[1920,1200,47]]],["amd radeon r7 graphics + r7 350 dual","7",0,[[1919,1080,60]]],["amd radeon r7 m260","7",0,[[1600,900,44],[1920,1080,13]]],["amd radeon r7 m260dx","7",0,[[1366,768,46],[1920,1080,18]]],["amd radeon r7 m260x","7",0,[[1920,1080,29]]],["amd radeon r7 m265","7",0,[[1366,768,48],[1920,1080,27]]],["amd radeon r7 m270","7",0,[[1920,1080,31],[3840,2160,10]]],["amd radeon r7 m340","7",0,[[1366,768,60],[1920,1080,32]]],["amd radeon r7 m350","7",0,[[3840,2160,12]]],["amd radeon r7 m360","7",0,[[1366,768,40],[1920,1080,22]]],["amd radeon r7 m370","7",0,[[1920,1080,24]]],["amd radeon r7 m440","7",0,[[1920,1080,39]]],["amd radeon r7 m445","7",0,[[1920,1080,36]]],["amd radeon r7 m460","7",0,[[1919,1080,24],[1920,1080,29]]],["amd radeon r7 m520","7",0,[[1919,1080,17]]],["amd radeon r7 series / hd 9000","7",0,[[1920,1080,71],[2560,1080,59]]],["amd radeon r7e","7",0,[[1024,768,41]]],["amd radeon r8 m350dx","8",0,[[1366,768,30]]],["amd radeon r8 m365dx","8",0,[[1920,1080,28]]],["amd radeon r8 m435dx","8",0,[[1920,1080,22]]],["amd radeon r8 m445dx","8",0,[[1366,768,38],[1920,1080,27]]],["amd radeon r8 m535dx","8",0,[[1366,768,55]]],["amd radeon r9","9",0,[[1920,1080,60]]],["amd radeon r9 200","9",0,[[1920,1080,60]]],["amd radeon r9 200 / hd 7900","9",0,[[1920,1080,250]]],["amd radeon r9 255","9",0,[[1600,900,52],[1920,1080,51]]],["amd radeon r9 260","9",0,[[1920,1080,16]]],["amd radeon r9 270","9",0,[[1280,1024,60],[1920,1080,60]]],["amd radeon r9 270 1024sp","9",0,[[1920,1080,135]]],["amd radeon r9 270x","9",0,[[1920,1080,30]]],["amd radeon r9 280","9",0,[[1920,1080,75],[1920,1200,428],[2560,1440,60]]],["amd radeon r9 280,","9",0,[[5120,2880,39]]],["amd radeon r9 280x","9",0,[[1920,1080,137]]],["amd radeon r9 285","9",0,[[1920,1080,60],[1920,1200,129]]],["amd radeon r9 290","9",0,[[1920,1080,60]]],["amd radeon r9 290x","9",0,[[1920,1080,60],[2560,1440,60],[3840,2160,118]]],["amd radeon r9 300","9",0,[[1920,1080,59]]],["amd radeon r9 350","9",0,[[1920,1200,63]]],["amd radeon r9 360","9",0,[[1600,900,83],[1920,1080,60],[2560,1440,59]]],["amd radeon r9 370","9",0,[[1680,1050,205],[1920,1080,60],[3840,2160,49]]],["amd radeon r9 370x","9",0,[[1920,1080,60]]],["amd radeon r9 380","9",0,[[1920,1080,41],[2560,1440,75]]],["amd radeon r9 380x","9",0,[[2560,1600,60]]],["amd radeon r9 390","9",0,[[1920,1080,60],[2560,1440,60]]],["amd radeon r9 390x","9",0,[[2560,1440,60],[3840,2160,60]]],["amd radeon r9 a375","9",0,[[1920,1080,28]]],["amd radeon r9 fury","9",0,[[1920,1080,75],[3840,2160,133]]],["amd radeon r9 fury / nano","9",0,[[1920,1200,155]]],["amd radeon r9 m200x","9",0,[[1366,768,104],[1920,1080,60]]],["amd radeon r9 m265x","9",0,[[1920,1080,33]]],["amd radeon r9 m270x","9",0,[[1600,900,60],[1920,1080,68]]],["amd radeon r9 m275","9",0,[[1920,1080,29]]],["amd radeon r9 m275x","9",0,[[1920,1080,20]]],["amd radeon r9 m280x","9",0,[[1920,1080,60],[2560,1440,25]]],["amd radeon r9 m290","9",0,[[5120,2880,33]]],["amd radeon r9 m290x","9",0,[[1920,1080,60],[3840,2160,61],[5120,2880,33]]],["amd radeon r9 m295x","9",0,[[3840,2160,33],[5120,2880,36]]],["amd radeon r9 m295x mac","9",0,[[5120,2880,42]]],["amd radeon r9 m295x mac edition / r9 380x","9",0,[[1920,1080,128]]],["amd radeon r9 m360","9",0,[[1920,1080,60],[3840,2160,26]]],["amd radeon r9 m370x","9",0,[[2560,1440,30],[2880,1800,27]]],["amd radeon r9 m370x opengl engine","9",0,[[5120,2880,14]]],["amd radeon r9 m375","9",0,[[1920,1080,29]]],["amd radeon r9 m375x","9",0,[[1920,1080,60],[3840,2160,22]]],["amd radeon r9 m380","9",0,[[1920,1080,50],[3840,2160,8],[5120,2880,9]]],["amd radeon r9 m380 opengl engine","9",0,[[5120,2880,15]]],["amd radeon r9 m385","9",0,[[1920,1080,58]]],["amd radeon r9 m385x","9",0,[[1920,1080,60]]],["amd radeon r9 m390","9",0,[[5119,2879,29],[5120,2880,21],[5760,3240,32]]],["amd radeon r9 m390 opengl engine","9",0,[[5120,2880,27]]],["amd radeon r9 m390x","9",0,[[1920,1080,140]]],["amd radeon r9 m395","9",0,[[2560,1440,59],[5120,2880,19]]],["amd radeon r9 m395 opengl engine","9",0,[[5120,2880,38]]],["amd radeon r9 m395x","9",0,[[3840,2160,58],[5120,2880,36]]],["amd radeon r9 m395x opengl engine","9",0,[[5120,2880,35]]],["amd radeon r9 m470","9",0,[[3840,2160,29]]],["amd radeon r9 m470x","9",0,[[1920,1080,60]]],["amd radeon r9-290x","9",0,[[1920,1080,60]]],["amd radeon renoir graphics d1","1",0,[[1366,768,60]]],["amd radeon rro 580x","580",0,[[5120,2880,59]]],["amd radeon rx 460","460",0,[[1920,1080,55],[2560,1080,60],[3840,2160,31]]],["amd radeon rx 460 / pro 450/455/460/555/555x/560/560x","460",0,[[3440,1440,93]]],["amd radeon rx 460 / pro 450/455/460/560","460",0,[[1920,1080,72]]],["amd radeon rx 470","470",0,[[1280,1024,73],[1920,1080,58],[1920,1200,147],[3840,2160,51]]],["amd radeon rx 470 opengl engine","470",0,[[2560,1440,60]]],["amd radeon rx 475m","475",0,[[1920,1080,60]]],["amd radeon rx 480","480",0,[[1400,1050,267],[1920,1080,60],[2560,1080,71]]],["amd radeon rx 480 opengl engine","480",0,[[1920,1080,60]]],["amd radeon rx 5300m","5300",0,[[1920,1080,60],[3840,2160,60]]],["amd radeon rx 540","540",0,[[1919,1080,52],[1920,1080,36]]],["amd radeon rx 550","550",0,[[1280,1024,135],[1920,1080,60],[1920,1200,60],[6016,3384,15]]],["amd radeon rx 550 640sp / rx 560","550",0,[[1920,1080,60]]],["amd radeon rx 5500","5500",0,[[1920,1080,139]]],["amd radeon rx 5500 / pro 5500m","5500",0,[[1920,1080,60],[2560,1440,227]]],["amd radeon rx 5500 xt","5500",0,[[1920,1080,239]]],["amd radeon rx 5500m","5500",0,[[1920,1048,144],[1920,1080,144],[3840,2160,60]]],["amd radeon rx 550x","550",0,[[1920,1080,52]]],["amd radeon rx 560","560",0,[[1920,1080,60],[1920,1200,42],[2560,1440,60]]],["amd radeon rx 560 [baffin]","560",0,[[1920,1080,60]]],["amd radeon rx 5600 oem/5600 xt / 5700 xt","5600",0,[[1920,1080,360],[2560,1440,164]]],["amd radeon rx 5600 xt","5600",0,[[1920,1080,75]]],["amd radeon rx 5600m","5600",0,[[1920,1080,144]]],["amd radeon rx 560d","560",0,[[2560,1080,60]]],["amd radeon rx 560x","560",0,[[1920,1080,115],[3840,2160,35]]],["amd radeon rx 570","570",0,[[1920,1080,60],[3072,1728,60]]],["amd radeon rx 570 opengl engine","570",0,[[1920,1080,226]]],["amd radeon rx 5700","5700",0,[[1920,1080,144]]],["amd radeon rx 5700 / 5700 xt","5700",0,[[3840,2160,201]]],["amd radeon rx 5700 xt","5700",0,[[1920,1080,464],[3840,2160,60],[6016,3384,34]]],["amd radeon rx 5700 xt 50th anniversary","5700",0,[[2560,1440,144],[3840,1600,60],[3840,2160,222],[5120,2880,60]]],["amd radeon rx 5700xt","5700",0,[[1920,1080,369]]],["amd radeon rx 580","580",0,[[1920,1080,60],[1920,1200,97],[2560,1440,60],[3840,2160,60]]],["amd radeon rx 580 2048sp","580",0,[[1920,1080,60]]],["amd radeon rx 580 opengl engine","580",0,[[1920,1080,145]]],["amd radeon rx 580 special","580",0,[[2560,1440,60]]],["amd radeon rx 580x","580",0,[[1920,1200,60],[3840,2160,79]]],["amd radeon rx 590","590",0,[[1920,1080,75],[2560,1440,164],[3584,2240,60]]],["amd radeon rx 640","640",0,[[1920,1080,39]]],["amd radeon rx 6500 xt","6500",0,[[1920,1080,60]]],["amd radeon rx 6600","6600",0,[[1920,1080,433],[3840,2160,57]]],["amd radeon rx 6600 xt","6600",0,[[1920,1080,60]]],["amd radeon rx 6600 xt/6600m","6600",0,[[2560,1440,60]]],["amd radeon rx 6600m","6600",0,[[1920,1080,139]]],["amd radeon rx 6700 xt","6700",0,[[1920,1080,451]]],["amd radeon rx 6700 xt / 6800m","6700",0,[[2560,1440,144]]],["amd radeon rx 6700m","6700",0,[[1920,1080,240]]],["amd radeon rx 6800","6800",0,[[2560,1440,564],[3840,2160,60]]],["amd radeon rx 6800 xt","6800",0,[[2560,1440,446],[3440,1440,144],[3840,2160,60]]],["amd radeon rx 6800 xt / 6900 xt","6800",0,[[2560,1440,239]]],["amd radeon rx 6800 xt 16gb","6800",0,[[6400,2666,60]]],["amd radeon rx 6800m","6800",0,[[1920,1080,300]]],["amd radeon rx 6900 xt","6900",0,[[3840,2160,60]]],["amd radeon rx rx 560","560",0,[[1920,1080,60]]],["amd radeon rx vega","rx",0,[[1920,1080,39]]],["amd radeon rx vega 10","10",0,[[1920,1080,38]]],["amd radeon rx vega 11","11",0,[[1920,1080,35]]],["amd radeon rx vega 56","56",0,[[1920,1080,144],[3440,1440,60],[3840,2160,60]]],["amd radeon rx vega 56 8gb","56",0,[[2560,1600,60]]],["amd radeon rx vega 56 opengl engine","56",0,[[2560,1440,60]]],["amd radeon rx vega 64","64",0,[[2560,1440,518]]],["amd radeon rx vega 64 8gb","64",0,[[2560,1440,60]]],["amd radeon rx vega 64 opengl engine","64",0,[[3840,2160,119]]],["amd radeon rx vega 64.1","64",0,[[6016,3384,60]]],["amd radeon rx vega 8","8",0,[[1920,1080,53]]],["amd radeon rx vega m gh","rxm",0,[[1920,1080,60],[2560,1440,60],[3840,2160,51]]],["amd radeon rx vega m gl","rxm",0,[[2560,1440,567],[3840,2160,59]]],["amd radeon rx vega11","11",0,[[2496,1664,30]]],["amd radeon rx460","460",0,[[1920,1080,60]]],["amd radeon rx480","480",0,[[1920,1080,102],[2560,1080,71]]],["amd radeon rx540","540",0,[[2400,1800,37]]],["amd radeon rx550","550",0,[[1920,1080,60]]],["amd radeon rx560","560",0,[[1920,1080,93]]],["amd radeon rx5600","5600",0,[[3840,2160,129]]],["amd radeon rx570","570",0,[[5120,2880,59]]],["amd radeon rx5700","5700",0,[[1920,1080,60]]],["amd radeon rx580","580",0,[[1920,1080,60]]],["amd radeon rx590 gme","590",0,[[1920,1080,112]]],["amd radeon rx6600xt","6600",0,[[3840,2160,60]]],["amd radeon sky 500","500",0,[[4096,2160,34]]],["amd radeon vega","",0,[[5120,2880,32]]],["amd radeon vega 10","10",0,[[1920,1080,44]]],["amd radeon vega 10 mobile","10",0,[[1920,1080,30]]],["amd radeon vega 11","11",0,[[1280,1024,60],[1920,1080,60],[3840,2160,17]]],["amd radeon vega 2","2",0,[[1366,768,30]]],["amd radeon vega 3","3",0,[[1440,900,44],[1920,1080,29],[3840,2160,8]]],["amd radeon vega 3 mobile","3",0,[[1920,1080,30]]],["amd radeon vega 56","56",0,[[2560,1440,144]]],["amd radeon vega 6","6",0,[[1366,768,61],[1920,1080,23]]],["amd radeon vega 64","64",0,[[6016,3384,35]]],["amd radeon vega 64 lc","64",0,[[2560,1080,60]]],["amd radeon vega 8","8",0,[[1920,1080,35],[2560,1440,24],[4096,2160,15]]],["amd radeon vega 8 mobile","8",0,[[1920,1080,36]]],["amd radeon vega 9","9",0,[[2496,1663,32],[2496,1664,39]]],["amd radeon vega fe","fe",0,[[1920,1080,120],[2560,1440,60]]],["amd radeon vega frontier","",0,[[1920,1080,120],[3840,2160,60]]],["amd radeon vega frontier edition opengl engine","",0,[[3440,1440,60]]],["amd radeon vega series / radeon vega mobile","",0,[[1920,1080,67]]],["amd radeon vii","vii",0,[[1920,1080,468],[2560,1440,60],[3840,2160,60]]],["amd radeont 540x","540",0,[[1920,1080,74],[3840,2160,22]]],["amd radeont rx 5300","5300",0,[[1920,1080,60]]],["amd radeont rx 5500m","5500",0,[[1920,1080,303]]],["amd radeont rx 560x","560",0,[[1920,1080,60]]],["amd renoir","",0,[[1920,1080,60]]],["amd rx 480","480",0,[[1680,1050,119]]],["amd rx 560","560",0,[[5120,2880,37]]],["amd rx 5700xt","5700",0,[[3840,2160,60]]],["amd rx 580","580",0,[[1920,1200,60],[5120,2880,60]]],["amd rx 590","590",0,[[5120,2880,60]]],["amd rx vega 64","64",0,[[1920,1080,60]]],["amd rx xxx","xxx",0,[[1920,1080,60],[2560,1440,144]]],["amd saphire radeon rx 580","580",0,[[1920,1080,57]]],["amd sapphire hd 5770","5770",0,[[1440,900,60]]],["amd sapphire nitro+ rx 6800","6800",0,[[1920,1080,75]]],["amd sapphire radeon hd6870","6870",0,[[1680,1050,60]]],["amd sapphire radeon rx 560","560",0,[[1280,1024,60]]],["amd sapphire radeon rx vega 64 8gb","64",0,[[2560,1440,144]]],["amd tonga pro gl [firepro w7100]","7100",0,[[1920,1200,127]]],["amd video controller","",0,[[1919,1079,60],[1920,1080,291]]],["intel radeong 0.4 on amd bonaire","0",0,[[1920,1200,92]]],["intel radeong 0.4 on amd cape verde","0",0,[[1920,1200,73]]],["intel radeong 0.4 on amd polaris10","0",0,[[3840,2160,108]]],["intel radeong 0.4 on amd tonga","0",0,[[1920,1080,124]]],["radeong 0.4 on amd polaris10","0",0,[[3840,2160,109]]],["radeong 0.4 on amd tahiti","0",0,[[1920,1080,223]]]]\')},732:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["apple a14","14",0,[[2704,1756,120]]],["apple m1","1",0,[[2880,1800,60]]],["apple m1 max","1",0,[[3456,2234,120]]],["apple m1 pro","1",0,[[3024,1964,120]]],["apple paravirtual device","",0,[[1024,768,30]]]]\')},405:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["intel geforce gtx 960","960",0,[[1920,1080,26]]],["nvidia asus geforce gt 430","430",0,[[1366,768,35]]],["nvidia asus geforce gt 440","440",0,[[1920,1080,28]]],["nvidia asus geforce gt 520","520",0,[[1680,1050,12]]],["nvidia asus geforce gt 610","610",0,[[1920,1200,15]]],["nvidia asus geforce gt 630","630",0,[[1680,1050,41]]],["nvidia asus geforce gt 640","640",0,[[2560,1440,34]]],["nvidia asus geforce gt 710","710",0,[[1920,1080,31]]],["nvidia asus geforce gt 730","730",0,[[2560,1080,28],[3840,2160,12]]],["nvidia asus geforce gts 450","450",0,[[1920,1080,54]]],["nvidia asus geforce gtx 1060","1060",0,[[3840,2160,38]]],["nvidia asus geforce gtx 1080","1080",0,[[2560,1440,120]]],["nvidia asus geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia asus geforce gtx 480","480",0,[[1920,1080,59]]],["nvidia asus geforce gtx 550 ti","550",0,[[1920,1080,57]]],["nvidia asus geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia asus geforce gtx 560 se","560",0,[[1920,1080,59]]],["nvidia asus geforce gtx 560 ti","560",0,[[1680,1050,58]]],["nvidia asus geforce gtx 570","570",0,[[1280,1024,74]]],["nvidia asus geforce gtx 570 hd","570",0,[[1920,1080,60]]],["nvidia asus geforce gtx 580","580",0,[[1920,1200,59]]],["nvidia asus geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia asus geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia asus geforce gtx 750 ti","750",0,[[1360,768,59],[1920,1080,118]]],["nvidia asus geforce gtx 760","760",0,[[1920,1080,60],[1920,1200,60]]],["nvidia asus geforce gtx 770","770",0,[[1920,1080,60]]],["nvidia asus geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia asus geforce gtx 950","950",0,[[1920,1080,60]]],["nvidia asus geforce gtx 960","960",0,[[1920,1080,60],[2560,1600,117]]],["nvidia asus geforce gtx 970","970",0,[[2560,1600,60]]],["nvidia asus geforce gtx 980 ti","980",0,[[2560,1440,131]]],["nvidia colorful geforce gtx 960","960",0,[[2560,1440,60]]],["nvidia elitegroup geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia evga geforce gt 545","545",0,[[1920,1080,37]]],["nvidia evga geforce gt 640","640",0,[[1366,768,60]]],["nvidia evga geforce gt 710","710",0,[[1680,1050,36],[1920,1080,29]]],["nvidia evga geforce gt 730","730",0,[[1600,900,59]]],["nvidia evga geforce gt 740","740",0,[[1280,1024,45]]],["nvidia evga geforce gtx 1050 ti","1050",0,[[2560,1440,60],[4096,2304,58]]],["nvidia evga geforce gtx 1070","1070",0,[[5120,2880,60]]],["nvidia evga geforce gtx 1080 ti","1080",0,[[1920,1200,60]]],["nvidia evga geforce gtx 560 ti","560",0,[[1680,1050,59]]],["nvidia evga geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia evga geforce gtx 580","580",0,[[2560,1440,60]]],["nvidia evga geforce gtx 650","650",0,[[1920,1200,87],[2560,1600,43]]],["nvidia evga geforce gtx 650 ti","650",0,[[1680,1050,116],[2560,1440,55]]],["nvidia evga geforce gtx 650 ti boost","650",0,[[1920,1080,56]]],["nvidia evga geforce gtx 660 ti","660",0,[[1920,1200,60]]],["nvidia evga geforce gtx 680","680",0,[[1600,1200,60]]],["nvidia evga geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia evga geforce gtx 760","760",0,[[1920,1080,119],[1920,1200,60]]],["nvidia evga geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia evga geforce gtx 960","960",0,[[1920,1080,60],[2560,1440,115]]],["nvidia evga geforce gtx 970","970",0,[[1920,1080,120]]],["nvidia evga geforce gtx 980","980",0,[[3440,1440,60]]],["nvidia evga geforce gtx 980 ti","980",0,[[1920,1080,60]]],["nvidia gainward geforce gt 630","630",0,[[1920,1080,28]]],["nvidia gainward geforce gts 450","450",0,[[1920,1080,55]]],["nvidia gainward geforce gtx 460","460",0,[[1920,1080,58]]],["nvidia gainward geforce gtx 550 ti","550",0,[[1280,1024,67]]],["nvidia gainward geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia gainward geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia gainward geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia geforce 210","210",0,[[1920,1080,8]]],["nvidia geforce 410m","410",0,[[1366,768,25],[1600,900,19]]],["nvidia geforce 510","510",0,[[1280,960,20]]],["nvidia geforce 605","605",0,[[1768,992,17],[1920,1080,15]]],["nvidia geforce 610m","610",0,[[1366,768,26]]],["nvidia geforce 610m/710m/810m/820m / gt 620m/625m/630m/720m","610",0,[[1366,768,51]]],["nvidia geforce 615","615",0,[[1920,1080,21]]],["nvidia geforce 705m","705",0,[[1920,1080,18]]],["nvidia geforce 710a","710",0,[[1920,1080,32]]],["nvidia geforce 710m","710",0,[[1366,768,55]]],["nvidia geforce 730a","730",0,[[1920,1080,37]]],["nvidia geforce 800m","800",0,[[1920,1080,18]]],["nvidia geforce 810m","810",0,[[1366,768,44],[1920,1080,31]]],["nvidia geforce 820a","820",0,[[1920,1080,28]]],["nvidia geforce 820m","820",0,[[1366,768,57],[1920,1080,23]]],["nvidia geforce 830a","830",0,[[1920,1080,53]]],["nvidia geforce 830m","830",0,[[1366,768,60]]],["nvidia geforce 8400 gs","8400",0,[[1680,1050,4]]],["nvidia geforce 8400 gs rev. 3","8400",0,[[1920,1080,4]]],["nvidia geforce 840a","840",0,[[1920,1080,56]]],["nvidia geforce 840m","840",0,[[1920,1080,56]]],["nvidia geforce 845m","845",0,[[1920,1080,59]]],["nvidia geforce 8600 gt","8600",1,[[1920,1200,-1]]],["nvidia geforce 8600 gts","8600",1,[[1920,1080,-1]]],["nvidia geforce 910m","910",0,[[1366,768,58],[1600,900,45]]],["nvidia geforce 920m","920",0,[[1366,768,60]]],["nvidia geforce 920mx","920",0,[[1366,768,60],[1920,1080,60]]],["nvidia geforce 9300 / nforce 730i","9300",0,[[1920,1080,6]]],["nvidia geforce 930a","930",0,[[1920,1080,55]]],["nvidia geforce 930m","930",0,[[1366,768,60]]],["nvidia geforce 930mx","930",0,[[1366,768,89],[1920,1080,59]]],["nvidia geforce 9400 gt","9400",1,[[1366,768,-1]]],["nvidia geforce 940a","940",0,[[1920,1080,58]]],["nvidia geforce 940m","940",0,[[1920,1080,54]]],["nvidia geforce 940mx","940",0,[[1920,1080,60]]],["nvidia geforce 945m","945",0,[[1920,1080,59]]],["nvidia geforce 9600 gt","9600",0,[[1920,1200,2]]],["nvidia geforce 9600m gt","9600",1,[[1440,900,-1]]],["nvidia geforce 9800 gt","9800",0,[[1920,1200,52]]],["nvidia geforce 9800 gtx / 9800 gtx+","9800",0,[[1280,1024,59]]],["nvidia geforce gpu","gpu",0,[[3000,2000,36]]],["nvidia geforce gt 1010","1010",0,[[1920,1080,135]]],["nvidia geforce gt 1030","1030",0,[[1920,1080,60]]],["nvidia geforce gt 1030 opengl engine","1030",0,[[6720,3780,15]]],["nvidia geforce gt 120","120",1,[[1920,1080,-1]]],["nvidia geforce gt 240","240",0,[[1366,768,32]]],["nvidia geforce gt 320m","320",0,[[1366,768,26]]],["nvidia geforce gt 415m","415",0,[[1366,768,19]]],["nvidia geforce gt 420","420",0,[[1024,768,33],[1920,1080,20]]],["nvidia geforce gt 420m","420",0,[[1366,768,28]]],["nvidia geforce gt 425m","425",0,[[1366,768,55],[1600,900,28]]],["nvidia geforce gt 430","430",0,[[1600,1200,16],[1920,1080,28]]],["nvidia geforce gt 435m","435",0,[[1366,768,53],[1920,1080,22]]],["nvidia geforce gt 440","440",0,[[1280,1024,51],[1680,1050,38],[1920,1080,45]]],["nvidia geforce gt 445m","445",0,[[1600,900,53]]],["nvidia geforce gt 520","520",0,[[1440,900,19],[1920,1080,17]]],["nvidia geforce gt 520m","520",0,[[1366,768,29]]],["nvidia geforce gt 520mx","520",0,[[1366,768,35]]],["nvidia geforce gt 525m","525",0,[[1366,768,28],[1600,900,22]]],["nvidia geforce gt 530","530",0,[[1920,1080,26]]],["nvidia geforce gt 540m","540",0,[[1366,768,38]]],["nvidia geforce gt 545","545",0,[[1920,1080,54]]],["nvidia geforce gt 550m","550",0,[[1600,900,44],[1920,1080,29]]],["nvidia geforce gt 555m","555",0,[[1920,1080,42]]],["nvidia geforce gt 555m/635m","555",0,[[1920,1080,36]]],["nvidia geforce gt 610","610",0,[[1280,1024,22],[1920,1080,15]]],["nvidia geforce gt 620","620",0,[[1920,1080,19]]],["nvidia geforce gt 620 oem","620",0,[[1920,1080,20],[1920,1200,20]]],["nvidia geforce gt 620m","620",0,[[1366,768,55],[1920,1080,30]]],["nvidia geforce gt 620m/630m/635m/640m le","620",0,[[1368,768,38]]],["nvidia geforce gt 625","625",0,[[1920,1080,18]]],["nvidia geforce gt 625m","625",0,[[1366,768,38]]],["nvidia geforce gt 630","630",0,[[1680,1050,36],[1920,1080,36],[1920,1200,30]]],["nvidia geforce gt 630 oem","630",0,[[1600,900,33]]],["nvidia geforce gt 630 opengl engine","630",0,[[1920,1080,33]]],["nvidia geforce gt 630 rev. 2","630",0,[[1920,1080,26]]],["nvidia geforce gt 630m","630",0,[[1366,768,57]]],["nvidia geforce gt 635","635",0,[[1920,1080,27]]],["nvidia geforce gt 635m","635",0,[[1366,768,47]]],["nvidia geforce gt 640","640",0,[[1920,1080,47]]],["nvidia geforce gt 640 oem","640",0,[[1920,1080,46],[2560,1440,35]]],["nvidia geforce gt 640 opengl engine","640",0,[[1280,1024,43]]],["nvidia geforce gt 640 rev. 2","640",0,[[1280,1024,60],[1920,1080,55]]],["nvidia geforce gt 640m","640",0,[[1366,768,82],[1600,900,59],[1920,1080,34]]],["nvidia geforce gt 640m le","640",0,[[1920,1080,49]]],["nvidia geforce gt 640m mac","640",0,[[1366,768,56],[1920,1080,20]]],["nvidia geforce gt 640m opengl engine","640",0,[[1920,1080,45]]],["nvidia geforce gt 645m","645",0,[[1366,768,60]]],["nvidia geforce gt 650m","650",0,[[1360,768,59],[1920,1080,58],[2560,1440,59]]],["nvidia geforce gt 650m mac","650",0,[[1440,900,56],[1920,1080,15],[2560,1440,19],[2880,1800,31]]],["nvidia geforce gt 650m opengl engine","650",0,[[1920,1080,56],[3840,2160,27]]],["nvidia geforce gt 705","705",0,[[1920,1080,11]]],["nvidia geforce gt 710","710",0,[[1920,1080,28]]],["nvidia geforce gt 710b","710",0,[[1920,1080,26]]],["nvidia geforce gt 710m","710",0,[[1366,768,46]]],["nvidia geforce gt 720","720",0,[[1920,1080,19],[2560,1440,16],[5120,2880,5]]],["nvidia geforce gt 720 opengl engine","720",0,[[2560,1600,20]]],["nvidia geforce gt 720m","720",0,[[1366,768,42]]],["nvidia geforce gt 730","730",0,[[1920,1080,54]]],["nvidia geforce gt 730a","730",0,[[1920,1080,23]]],["nvidia geforce gt 730m","730",0,[[1920,1080,43]]],["nvidia geforce gt 735m","735",0,[[1920,1080,39]]],["nvidia geforce gt 740","740",0,[[1920,1080,55],[3440,1440,23]]],["nvidia geforce gt 740 opengl engine","740",0,[[1920,1200,51]]],["nvidia geforce gt 740m","740",0,[[1366,768,60]]],["nvidia geforce gt 745m","745",0,[[1920,1080,55]]],["nvidia geforce gt 750m","750",0,[[1920,1080,57]]],["nvidia geforce gt 750m mac","750",0,[[1920,1080,58],[2880,1800,28]]],["nvidia geforce gt 755m","755",0,[[1920,1080,57]]],["nvidia geforce gt 755m mac","755",0,[[2560,1440,41]]],["nvidia geforce gt 755m opengl engine","755",0,[[2560,1440,51]]],["nvidia geforce gt 820m","820",0,[[1600,900,47]]],["nvidia geforce gts 250","250",0,[[1680,1050,53]]],["nvidia geforce gts 450","450",0,[[1360,768,60],[1680,1050,57],[1920,1080,55]]],["nvidia geforce gts 450 rev. 2","450",0,[[1920,1080,56]]],["nvidia geforce gtx 1050","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 3gb","1050",0,[[1280,1024,60]]],["nvidia geforce gtx 1050 mobile","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 opengl engine","1050",0,[[1920,1080,116]]],["nvidia geforce gtx 1050 ti","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 ti mobile","1050",0,[[1920,1080,298]]],["nvidia geforce gtx 1050 ti opengl engine","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 ti with max-q design","1050",0,[[1920,1080,268],[2560,1440,102],[3840,2160,60]]],["nvidia geforce gtx 1050 with max-q design","1050",0,[[1920,1080,60],[3840,2160,24]]],["nvidia geforce gtx 1060","1060",0,[[1920,1080,60],[3840,2160,59]]],["nvidia geforce gtx 1060 3gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 3gb opengl engine","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 5gb","1060",0,[[1920,1080,55]]],["nvidia geforce gtx 1060 6gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 6gb opengl engine","1060",0,[[1920,1080,75]]],["nvidia geforce gtx 1060 mobile","1060",0,[[1920,1080,422]]],["nvidia geforce gtx 1060 mobile 6gb","1060",0,[[1920,1080,120]]],["nvidia geforce gtx 1060 with max-q design","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060se 3gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1070","1070",0,[[1920,1080,134]]],["nvidia geforce gtx 1070 a17","1070",0,[[1920,1080,60]]],["nvidia geforce gtx 1070 mobile","1070",0,[[1920,1080,467]]],["nvidia geforce gtx 1070 opengl engine","1070",0,[[1920,1080,143]]],["nvidia geforce gtx 1070 ti","1070",0,[[1920,1080,60],[6016,3384,59]]],["nvidia geforce gtx 1070 ti opengl engine","1070",0,[[1920,1080,75]]],["nvidia geforce gtx 1070 with max-q design","1070",0,[[1920,1080,448]]],["nvidia geforce gtx 1070 with maxq design","1070",0,[[1920,1080,60],[3840,2160,59]]],["nvidia geforce gtx 1080","1080",0,[[1920,1080,119],[2560,1440,326],[3840,2160,286]]],["nvidia geforce gtx 1080 mobile","1080",0,[[1920,1080,120]]],["nvidia geforce gtx 1080 opengl engine","1080",0,[[1920,1080,79]]],["nvidia geforce gtx 1080 ti","1080",0,[[1920,1080,120]]],["nvidia geforce gtx 1080 ti opengl engine","1080",0,[[1920,1080,127]]],["nvidia geforce gtx 1080 with max-q design","1080",0,[[1920,1080,144]]],["nvidia geforce gtx 1180","1180",0,[[3440,1440,60]]],["nvidia geforce gtx 1650","1650",0,[[1920,1080,380]]],["nvidia geforce gtx 1650 mobile / max-q","1650",0,[[1920,1080,292]]],["nvidia geforce gtx 1650 super","1650",0,[[1920,1080,433]]],["nvidia geforce gtx 1650 ti","1650",0,[[1920,1080,144],[3840,2400,59]]],["nvidia geforce gtx 1650 ti mobile","1650",0,[[1920,1080,144]]],["nvidia geforce gtx 1650 ti with max-q design","1650",0,[[1920,1080,60],[3839,2160,60]]],["nvidia geforce gtx 1650 with max-q design","1650",0,[[1920,1080,142],[3000,2000,60]]],["nvidia geforce gtx 1660","1660",0,[[1920,1080,144]]],["nvidia geforce gtx 1660 super","1660",0,[[1920,1080,60]]],["nvidia geforce gtx 1660 ti","1660",0,[[1920,1080,546],[3840,2160,60]]],["nvidia geforce gtx 1660 ti mobile","1660",0,[[1920,1080,451]]],["nvidia geforce gtx 1660 ti with max-q design","1660",0,[[1920,1080,144]]],["nvidia geforce gtx 280","280",0,[[1680,1050,56]]],["nvidia geforce gtx 295","295",0,[[1920,1080,56]]],["nvidia geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia geforce gtx 460 oem","460",0,[[1360,768,60],[1920,1080,60]]],["nvidia geforce gtx 460 opengl engine","460",0,[[1920,1080,59]]],["nvidia geforce gtx 460 se","460",0,[[1920,1080,56],[1920,1200,57]]],["nvidia geforce gtx 460 v2","460",0,[[1920,1080,60],[1920,1200,60],[2560,1600,55]]],["nvidia geforce gtx 460m","460",0,[[1920,1080,46]]],["nvidia geforce gtx 465","465",0,[[1920,1080,134],[1920,1200,59]]],["nvidia geforce gtx 470","470",0,[[1680,1050,60],[1920,1080,59]]],["nvidia geforce gtx 470m","470",0,[[1920,1200,55]]],["nvidia geforce gtx 480","480",0,[[1440,900,191],[1920,1080,115],[1920,1200,60]]],["nvidia geforce gtx 480 opengl engine","480",0,[[1600,1200,60]]],["nvidia geforce gtx 550 ti","550",0,[[1280,1024,58],[1920,1080,58]]],["nvidia geforce gtx 550 ti opengl engine","550",0,[[1920,1080,55]]],["nvidia geforce gtx 555","555",0,[[1920,1080,54]]],["nvidia geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia geforce gtx 560 se","560",0,[[1680,1050,52],[1920,1080,111]]],["nvidia geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia geforce gtx 560 ti 448 cores","560",0,[[1920,1080,60],[2560,1440,60]]],["nvidia geforce gtx 560 ti oem","560",0,[[1920,1080,176]]],["nvidia geforce gtx 560 ti opengl engine","560",0,[[1920,1080,48]]],["nvidia geforce gtx 560m","560",0,[[1920,1080,55]]],["nvidia geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia geforce gtx 570 opengl engine","570",0,[[1920,1080,60]]],["nvidia geforce gtx 570 rev. 2","570",0,[[1920,1080,60],[1920,1200,60]]],["nvidia geforce gtx 570m","570",0,[[1920,1080,125],[2560,1440,8]]],["nvidia geforce gtx 580","580",0,[[1920,1080,60]]],["nvidia geforce gtx 580 opengl engine","580",0,[[1680,1050,59]]],["nvidia geforce gtx 580m","580",0,[[1920,1080,60]]],["nvidia geforce gtx 590","590",0,[[1920,1080,59]]],["nvidia geforce gtx 645","645",0,[[1920,1080,57],[1920,1200,58]]],["nvidia geforce gtx 645 opengl engine","645",0,[[1920,1200,58]]],["nvidia geforce gtx 650","650",0,[[1920,1080,72]]],["nvidia geforce gtx 650 oem","650",0,[[1366,768,59]]],["nvidia geforce gtx 650 opengl engine","650",0,[[1920,1080,59]]],["nvidia geforce gtx 650 ti","650",0,[[1920,1080,60]]],["nvidia geforce gtx 650 ti boost","650",0,[[1280,1024,60],[1600,1200,187],[1920,1080,60]]],["nvidia geforce gtx 650 ti opengl engine","650",0,[[1920,1080,60]]],["nvidia geforce gtx 660","660",0,[[1920,1080,111]]],["nvidia geforce gtx 660 oem","660",0,[[1920,1080,59]]],["nvidia geforce gtx 660 ti","660",0,[[1920,1080,60]]],["nvidia geforce gtx 660 ti opengl engine","660",0,[[1280,1024,60]]],["nvidia geforce gtx 660m","660",0,[[1680,1050,36],[1920,1080,59]]],["nvidia geforce gtx 660m mac","660",0,[[2560,1440,2]]],["nvidia geforce gtx 660m opengl engine","660",0,[[2560,1440,36]]],["nvidia geforce gtx 670","670",0,[[1920,1080,100]]],["nvidia geforce gtx 670 opengl engine","670",0,[[1920,1080,60]]],["nvidia geforce gtx 670m","670",0,[[1920,1080,66]]],["nvidia geforce gtx 670mx","670",0,[[1920,1080,60]]],["nvidia geforce gtx 675m","675",0,[[1920,1080,60]]],["nvidia geforce gtx 675mx","675",0,[[1680,1050,60],[1920,1080,60],[2560,1440,55]]],["nvidia geforce gtx 675mx mac","675",0,[[2560,1440,36]]],["nvidia geforce gtx 675mx opengl engine","675",0,[[2560,1440,60]]],["nvidia geforce gtx 680","680",0,[[1920,1080,60]]],["nvidia geforce gtx 680 opengl engine","680",0,[[1920,1080,60]]],["nvidia geforce gtx 680m","680",0,[[1920,1080,39],[1920,1200,60]]],["nvidia geforce gtx 680m opengl engine","680",0,[[1920,1080,36]]],["nvidia geforce gtx 680mx","680",0,[[2560,1440,59]]],["nvidia geforce gtx 680mx opengl engine","680",0,[[2560,1440,59]]],["nvidia geforce gtx 690","690",0,[[1920,1080,60],[3840,2160,30]]],["nvidia geforce gtx 745","745",0,[[1920,1080,60],[2560,1600,29]]],["nvidia geforce gtx 750","750",0,[[1920,1080,60]]],["nvidia geforce gtx 750 opengl engine","750",0,[[1920,1200,58]]],["nvidia geforce gtx 750 ti","750",0,[[1920,1080,97]]],["nvidia geforce gtx 760","760",0,[[1920,1080,60],[1920,1200,116]]],["nvidia geforce gtx 760 oem","760",0,[[1920,1080,60]]],["nvidia geforce gtx 760 opengl engine","760",0,[[1920,1080,52]]],["nvidia geforce gtx 760 ti","760",0,[[1920,1080,60],[1920,1200,60]]],["nvidia geforce gtx 760 ti oem","760",0,[[1920,1200,60]]],["nvidia geforce gtx 760 ti opengl engine","760",0,[[1920,1080,60]]],["nvidia geforce gtx 760a","760",0,[[2560,1080,15]]],["nvidia geforce gtx 760m","760",0,[[1920,1080,60]]],["nvidia geforce gtx 765m","765",0,[[1920,1080,53],[2560,1440,57]]],["nvidia geforce gtx 765m by nick[d]vb","765",0,[[2560,1440,58]]],["nvidia geforce gtx 765m opengl engine","765",0,[[2560,1440,57]]],["nvidia geforce gtx 770","770",0,[[1920,1080,143],[2560,1440,203]]],["nvidia geforce gtx 770 opengl engine","770",0,[[1920,1080,60]]],["nvidia geforce gtx 770m","770",0,[[1920,1080,60],[2560,1440,59]]],["nvidia geforce gtx 770m by nick[d]vb","770",0,[[2560,1440,34]]],["nvidia geforce gtx 770m opengl engine","770",0,[[2560,1440,59]]],["nvidia geforce gtx 775m by idopt mac","775",0,[[2560,1440,56]]],["nvidia geforce gtx 775m mac","775",0,[[2560,1440,59]]],["nvidia geforce gtx 775m opengl engine","775",0,[[2560,1440,60]]],["nvidia geforce gtx 780","780",0,[[1920,1080,159]]],["nvidia geforce gtx 780 by st3phl3","780",0,[[3840,2160,30]]],["nvidia geforce gtx 780 mac","780",0,[[1680,1050,60],[1920,1080,60]]],["nvidia geforce gtx 780 rev. 2","780",0,[[1920,1080,144],[2560,1440,119],[3840,2160,58],[5120,2880,58]]],["nvidia geforce gtx 780 ti","780",0,[[1280,1024,120],[1920,1080,119]]],["nvidia geforce gtx 780 ti opengl engine","780",0,[[2560,1440,60]]],["nvidia geforce gtx 780m","780",0,[[1920,1080,60],[2560,1440,59]]],["nvidia geforce gtx 780m by nick[d]vb","780",0,[[1920,1080,59],[2560,1440,60]]],["nvidia geforce gtx 780m mac","780",0,[[2560,1440,60]]],["nvidia geforce gtx 780m opengl engine","780",0,[[2560,1440,60]]],["nvidia geforce gtx 850a","850",0,[[2560,1440,48]]],["nvidia geforce gtx 850m","850",0,[[1920,1080,60]]],["nvidia geforce gtx 860m","860",0,[[1920,1080,59]]],["nvidia geforce gtx 860m opengl engine","860",0,[[2560,1440,58]]],["nvidia geforce gtx 870m","870",0,[[1920,1080,60],[2560,1440,102]]],["nvidia geforce gtx 880m","880",0,[[1920,1080,60],[2560,1440,74]]],["nvidia geforce gtx 880m opengl engine","880",0,[[2560,1440,60]]],["nvidia geforce gtx 950","950",0,[[1920,1080,98]]],["nvidia geforce gtx 950 opengl engine","950",0,[[1920,1200,60]]],["nvidia geforce gtx 950a","950",0,[[1920,1080,60],[3840,2160,38]]],["nvidia geforce gtx 950m","950",0,[[1920,1080,114]]],["nvidia geforce gtx 960","960",0,[[1920,1080,60]]],["nvidia geforce gtx 960a","960",0,[[1920,1440,128]]],["nvidia geforce gtx 960m","960",0,[[1920,1080,119],[3840,2160,37]]],["nvidia geforce gtx 965m","965",0,[[1920,1080,195],[3000,2000,59],[3840,2160,41]]],["nvidia geforce gtx 965m opengl engine","965",0,[[2880,1620,55]]],["nvidia geforce gtx 970","970",0,[[1920,1080,143]]],["nvidia geforce gtx 970 opengl engine","970",0,[[2560,1600,60]]],["nvidia geforce gtx 970m","970",0,[[1920,1080,60]]],["nvidia geforce gtx 980","980",0,[[1920,1080,60],[3440,1440,294]]],["nvidia geforce gtx 980 ti","980",0,[[1920,1080,119],[2560,1440,456]]],["nvidia geforce gtx 980 ti opengl engine","980",0,[[1920,1080,60]]],["nvidia geforce gtx 980m","980",0,[[1920,1080,60],[3840,2160,104]]],["nvidia geforce gtx titan","gtx",0,[[1920,1080,119],[1920,1200,119],[2560,1440,60]]],["nvidia geforce gtx titan black","gtx",0,[[1680,1050,60],[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["nvidia geforce gtx titan black opengl engine","gtx",0,[[3840,2160,60]]],["nvidia geforce gtx titan opengl engine","gtx",0,[[2560,1440,60]]],["nvidia geforce gtx titan x","gtxx",0,[[1920,1080,144],[2560,1440,120],[2560,1600,60]]],["nvidia geforce gtx titan xp","gtxxp",0,[[2560,1440,60],[3440,1440,60]]],["nvidia geforce gtx titan z","gtxz",0,[[1440,900,59],[1920,1080,39],[3840,2160,60]]],["nvidia geforce gtx780m by nikey22","780",0,[[2560,1440,60]]],["nvidia geforce gtx870m by nikey22","870",0,[[2560,1440,60]]],["nvidia geforce gtx880m","880",0,[[1920,1080,60]]],["nvidia geforce gtx880m by nikey22","880",0,[[2560,1440,59]]],["nvidia geforce gtx880m opengl engine","880",0,[[2560,1440,59]]],["nvidia geforce mx110","110",0,[[1366,768,61],[1920,1080,57]]],["nvidia geforce mx130","130",0,[[1920,1080,60]]],["nvidia geforce mx150","150",0,[[1920,1080,113]]],["nvidia geforce mx230","230",0,[[1920,1080,60]]],["nvidia geforce mx250","250",0,[[1920,1080,60]]],["nvidia geforce mx330","330",0,[[1920,1080,60],[3840,2160,51]]],["nvidia geforce mx350","350",0,[[1920,1080,60]]],["nvidia geforce mx450","450",0,[[1920,1080,60]]],["nvidia geforce pre-release graphics device","pre",0,[[2560,1440,60]]],["nvidia geforce pre-release tesla c2075 opengl engine","2075",0,[[1600,900,59]]],["nvidia geforce pre-release titan x opengl engine","prex",0,[[1920,1080,60]]],["nvidia geforce pre-release titan xp collectors edition opengl e","prexpe",0,[[1920,1080,59]]],["nvidia geforce pre-release titan xp opengl engine","prexp",0,[[2560,1440,60]]],["nvidia geforce rtx 2060","2060",0,[[1920,1080,512]]],["nvidia geforce rtx 2060 max-q","2060",0,[[2560,1440,301]]],["nvidia geforce rtx 2060 mobile","2060",0,[[1920,1080,518]]],["nvidia geforce rtx 2060 rev. a","2060",0,[[3840,2160,257]]],["nvidia geforce rtx 2060 super","2060",0,[[1920,1080,645],[2560,1440,143]]],["nvidia geforce rtx 2060 with max-q design","2060",0,[[1920,1080,292],[1920,1200,60]]],["nvidia geforce rtx 2070","2070",0,[[1920,1080,60],[3840,2160,60]]],["nvidia geforce rtx 2070 mobile","2070",0,[[1920,1080,477]]],["nvidia geforce rtx 2070 mobile / max-q","2070",0,[[1920,1080,526]]],["nvidia geforce rtx 2070 mobile / max-q refresh","2070",0,[[1920,1080,143]]],["nvidia geforce rtx 2070 rev. a","2070",0,[[2560,1440,144]]],["nvidia geforce rtx 2070 super","2070",0,[[1920,1080,510]]],["nvidia geforce rtx 2070 super with max-q design","2070",0,[[1920,1080,300]]],["nvidia geforce rtx 2070 with max-q design","2070",0,[[1920,1080,240]]],["nvidia geforce rtx 2080","2080",0,[[1920,1080,632],[2560,1440,165]]],["nvidia geforce rtx 2080 mobile","2080",0,[[1920,1080,144]]],["nvidia geforce rtx 2080 rev. a","2080",0,[[2560,1440,143]]],["nvidia geforce rtx 2080 super","2080",0,[[1920,1080,601]]],["nvidia geforce rtx 2080 super mobile / max-q","2080",0,[[3840,2160,59]]],["nvidia geforce rtx 2080 super with max-q design","2080",0,[[1920,1080,300]]],["nvidia geforce rtx 2080 ti","2080",0,[[1920,1080,83]]],["nvidia geforce rtx 2080 ti rev. a","2080",0,[[1920,1080,403]]],["nvidia geforce rtx 2080 with max-q design","2080",0,[[1920,1080,476]]],["nvidia geforce rtx 3050","3050",0,[[1920,1080,60]]],["nvidia geforce rtx 3050 laptop gpu","3050",0,[[1920,1080,144]]],["nvidia geforce rtx 3050 ti laptop gpu","3050",0,[[1920,1080,144]]],["nvidia geforce rtx 3060","3060",0,[[1920,1080,674]]],["nvidia geforce rtx 3060 laptop gpu","3060",0,[[1920,1080,300]]],["nvidia geforce rtx 3060 lite hash rate","3060",0,[[1920,1080,60]]],["nvidia geforce rtx 3060 mobile / max-q","3060",0,[[1920,1080,435]]],["nvidia geforce rtx 3060 ti","3060",0,[[1920,1080,779]]],["nvidia geforce rtx 3070","3070",0,[[1920,1080,723],[2560,1440,294]]],["nvidia geforce rtx 3070 laptop gpu","3070",0,[[1920,1080,357]]],["nvidia geforce rtx 3070 mobile / max-q","3070",0,[[2560,1440,386]]],["nvidia geforce rtx 3070 ti","3070",0,[[1920,1080,60]]],["nvidia geforce rtx 3080","3080",0,[[1920,1080,726],[2560,1440,60],[3840,2160,60]]],["nvidia geforce rtx 3080 laptop gpu","3080",0,[[1920,1080,294],[2560,1440,244]]],["nvidia geforce rtx 3080 mobile / max-q 8gb/16gb","3080",0,[[1920,1080,293]]],["nvidia geforce rtx 3080 ti","3080",0,[[1920,1080,239],[2560,1440,60]]],["nvidia geforce rtx 3090","3090",0,[[2560,1440,60],[3840,2160,474]]],["nvidia geforce rtx t10-16","10",0,[[2560,1600,3]]],["nvidia geforce rtx t10-8","10",0,[[2560,1600,3]]],["nvidia gigabyte geforce gt 440","440",0,[[1280,1024,34]]],["nvidia gigabyte geforce gt 610","610",0,[[1920,1080,17]]],["nvidia gigabyte geforce gt 630","630",0,[[1920,1080,34]]],["nvidia gigabyte geforce gt 730","730",0,[[1280,1024,38]]],["nvidia gigabyte geforce gts 450","450",0,[[1280,1024,37]]],["nvidia gigabyte geforce gtx 1050 ti","1050",0,[[1920,1080,30]]],["nvidia gigabyte geforce gtx 460","460",0,[[1680,1050,60]]],["nvidia gigabyte geforce gtx 550 ti","550",0,[[1920,1080,57]]],["nvidia gigabyte geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 570 hd","570",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 580","580",0,[[1920,1200,60]]],["nvidia gigabyte geforce gtx 650","650",0,[[1680,1050,55]]],["nvidia gigabyte geforce gtx 650 ti","650",0,[[2560,1440,40]]],["nvidia gigabyte geforce gtx 660","660",0,[[1920,1080,31]]],["nvidia gigabyte geforce gtx 660 ti","660",0,[[5120,2880,29]]],["nvidia gigabyte geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 750","750",0,[[1920,1080,59]]],["nvidia gigabyte geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 760","760",0,[[3440,1440,17]]],["nvidia gigabyte geforce gtx 770","770",0,[[2560,1440,59]]],["nvidia gigabyte geforce gtx 780 ti","780",0,[[1920,1080,240]]],["nvidia gigabyte geforce gtx 960","960",0,[[1920,1080,142],[1920,1200,120]]],["nvidia gigabyte geforce gtx 970","970",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 980","980",0,[[2560,1440,60]]],["nvidia gigabyte geforce gtx 980 ti","980",0,[[1920,1080,60]]],["nvidia hp geforce gt 730","730",0,[[1920,1080,55]]],["nvidia inno3d geforce gtx660","3",0,[[2560,1440,107]]],["nvidia msi geforce gt 610","610",0,[[1920,1080,16]]],["nvidia msi geforce gt 630","630",0,[[1440,900,12]]],["nvidia msi geforce gt 635","635",0,[[1920,1080,30]]],["nvidia msi geforce gt 710","710",0,[[1920,1080,27]]],["nvidia msi geforce gt 730","730",0,[[1920,1080,53]]],["nvidia msi geforce gtx 1050 ti","1050",0,[[1920,1080,59]]],["nvidia msi geforce gtx 1060","1060",0,[[1920,1080,120]]],["nvidia msi geforce gtx 1070","1070",0,[[1920,1200,45]]],["nvidia msi geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia msi geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia msi geforce gtx 570 hd","570",0,[[1920,1200,60]]],["nvidia msi geforce gtx 580","580",0,[[2560,1440,60]]],["nvidia msi geforce gtx 650","650",0,[[2560,1080,52]]],["nvidia msi geforce gtx 650 ti","650",0,[[1920,1080,60]]],["nvidia msi geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia msi geforce gtx 660 ti","660",0,[[1680,1050,49]]],["nvidia msi geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia msi geforce gtx 745","745",0,[[1920,1080,55]]],["nvidia msi geforce gtx 760","760",0,[[1280,1024,30],[1920,1080,58]]],["nvidia msi geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia msi geforce gtx 950","950",0,[[1920,1080,59]]],["nvidia msi geforce gtx 960","960",0,[[1680,1050,120],[2560,1440,59]]],["nvidia msi geforce gtx 970","970",0,[[1680,1050,60]]],["nvidia msi geforce gtx 980","980",0,[[1920,1080,120],[3840,2160,60]]],["nvidia msi geforce gtx 980 ti","980",0,[[5120,2880,56]]],["nvidia null geforce 920a","920",0,[[1920,1080,25]]],["nvidia palit geforce gtx 650","650",0,[[1920,1080,49]]],["nvidia palit geforce gtx 650 ti","650",0,[[1920,1080,59]]],["nvidia palit geforce gtx 660","660",0,[[1920,1080,26]]],["nvidia pegatron geforce gt 420","420",0,[[1400,1050,25]]],["nvidia pny geforce gt 610","610",0,[[1280,1024,19]]],["nvidia pny geforce gtx 1060","1060",0,[[1920,1080,60]]],["nvidia pny geforce gtx 460","460",0,[[1360,768,59]]],["nvidia pny geforce gtx 550 ti","550",0,[[1920,1080,55]]],["nvidia pny geforce gtx 570 hd","570",0,[[1280,1024,72]]],["nvidia pny geforce gtx 580","580",0,[[1920,1200,59]]],["nvidia pny geforce gtx 680","680",0,[[2560,1080,120]]],["nvidia pny geforce gtx 750","750",0,[[1280,1024,60]]],["nvidia pny geforce gtx 970","970",0,[[2560,1440,60]]],["nvidia pny geforce gtx 980","980",0,[[1920,1080,120]]],["nvidia point of view geforce gtx 470","470",0,[[1920,1080,59]]],["nvidia point of view geforce gtx 660 ti","660",0,[[1680,1050,59]]],["nvidia sony geforce 410m","410",0,[[1366,768,24]]],["nvidia toshiba geforce gt 525m","525",0,[[1366,768,33]]],["nvidia zotac geforce gt 430","430",0,[[1600,900,32]]],["nvidia zotac geforce gt 610","610",0,[[1920,1080,15]]],["nvidia zotac geforce gt 630","630",0,[[1360,768,46]]],["nvidia zotac geforce gt 740","740",0,[[1280,1024,118]]],["nvidia zotac geforce gtx 460","460",0,[[1920,1080,59]]],["nvidia zotac geforce gtx 550 ti","550",0,[[1920,1080,42]]],["nvidia zotac geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 580","580",0,[[1920,1080,48]]],["nvidia zotac geforce gtx 650","650",0,[[1920,1080,44]]],["nvidia zotac geforce gtx 650 ti","650",0,[[1920,1080,58]]],["nvidia zotac geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 680","680",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 750","750",0,[[1680,1050,114],[1920,1080,60]]],["nvidia zotac geforce gtx 760","760",0,[[1920,1080,101]]],["nvidia zotac geforce gtx 770","770",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 960","960",0,[[2048,1152,60]]]]\')},178:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["intel","",0,[[4096,2304,12]]],["intel 0x496e74656c2048442047726170686963000732034343","0",0,[[1920,1080,22]]],["intel broxton-p hd","p",0,[[1920,1080,73]]],["intel cherryview hd","hd",0,[[1920,1080,16]]],["intel coffee lake uhd","uhd",0,[[1920,1080,49]]],["intel cometlake uhd graphics 630","630",0,[[2560,1440,40]]],["intel corporation 2nd gen core processor family integrated graphics controller","2",0,[[1366,768,25]]],["intel corporation 2nd generation core processor family integrated graphics controller","2",0,[[1600,900,28]]],["intel corporation 3rd gen core processor graphics controller","3",0,[[1366,768,20]]],["intel corporation 8th gen core processor gaussian mixture model","8",0,[[1366,768,17]]],["intel corporation atom processor z36xxx/z37xxx series graphics & display","36",0,[[1280,799,18],[1366,768,18]]],["intel corporation atom/celeron/pentium processor n4200 series integrated graphics controller","4200",0,[[1280,1024,28]]],["intel corporation atom/celeron/pentium processor x5-e8000 integrated graphics controller","5",0,[[1366,768,34]]],["intel corporation atom/celeron/pentium processor x5-e8000 series pci configuration registers","5",0,[[1920,1080,14]]],["intel corporation broadwell-u integrated","u",0,[[1920,1080,38]]],["intel corporation celeron n3350 n4200/atom e3900 series integrated graphics controller","3350",0,[[1680,1050,33]]],["intel corporation coffeelake-h gt2 [uhd graphics 630]","2",0,[[1920,1080,76]]],["intel corporation cometlake-h gt2 [uhd graphics]","2",0,[[3072,1728,29]]],["intel corporation cometlake-s gt2 [uhd graphics 630]","2",0,[[1920,1080,52]]],["intel corporation cometlake-u gt2 [uhd graphics]","2",0,[[1920,1080,39]]],["intel corporation device","",0,[[1920,1080,31]]],["intel corporation geminilake [uhd graphics 600]","600",0,[[1920,1080,15]]],["intel corporation haswell-ult integrated graphics controller","ult",0,[[1366,768,35]]],["intel corporation hd","hd",0,[[1920,1080,24]]],["intel corporation hd graphics 500","500",0,[[1366,768,19]]],["intel corporation hd graphics 510","510",0,[[1368,768,48]]],["intel corporation hd graphics 515","515",0,[[1920,1080,29]]],["intel corporation hd graphics 520","520",0,[[1366,768,59]]],["intel corporation hd graphics 530","530",0,[[1920,1080,58]]],["intel corporation hd graphics 5300","5300",0,[[1920,1080,35]]],["intel corporation hd graphics 5500","5500",0,[[1920,1080,36]]],["intel corporation hd graphics 610","610",0,[[1920,1080,28]]],["intel corporation hd graphics 620","620",0,[[1920,1080,56],[3200,1800,17]]],["intel corporation hd graphics 630","630",0,[[1920,1080,58]]],["intel corporation iris graphics 540","540",0,[[1920,1080,54]]],["intel corporation iris graphics 6100","6100",0,[[2560,1600,20]]],["intel corporation iris plus graphics 650","650",0,[[1440,900,60]]],["intel corporation iris plus graphics 655","655",0,[[1920,1080,119]]],["intel corporation iris plus graphics g1","1",0,[[1920,1080,57]]],["intel corporation iris plus graphics g7","7",0,[[1920,1080,112]]],["intel corporation iris pro graphics 580","580",0,[[1920,1080,60]]],["intel corporation iris pro graphics 6200","6200",0,[[2560,1080,41]]],["intel corporation iris xe","xe",0,[[1920,1200,60]]],["intel corporation sky lake integrated","sky",0,[[2560,1440,52]]],["intel corporation skylake gt2 [hd graphics 520]","2",0,[[1920,1080,52],[2560,1440,31]]],["intel corporation skylake integrated","",0,[[1920,1080,51]]],["intel corporation tigerlake gt2 [iris xe graphics]","2",0,[[1920,1080,60]]],["intel corporation tigerlake-lp gt2 [iris xe graphics]","2",0,[[1920,1080,60]]],["intel corporation uhd","uhd",0,[[1920,1080,65]]],["intel corporation uhd graphics 605","605",0,[[1920,1080,21]]],["intel corporation uhd graphics 615","615",0,[[1920,1080,30]]],["intel corporation uhd graphics 620","620",0,[[1920,1080,55]]],["intel corporation uhd graphics 630","630",0,[[1920,1080,57]]],["intel corporation whiskeylake-u gt2 [uhd graphics 620]","2",0,[[1920,1080,57]]],["intel corporation xeon e3-1200 v2 gen core processor graphics controller","3",0,[[1920,1080,15]]],["intel corporation xeon e3-1200 v3 gen core processor integrated graphics controller","3",0,[[1360,768,42],[1440,900,34],[1280,1024,23],[1920,1080,22]]],["intel corporation, series chipset iris plus graphics 655","655",0,[[1920,1080,42]]],["intel geforce gtx 960","960",0,[[1920,1080,26]]],["intel gen12 desktop graphics controller","12",0,[[3840,2160,20]]],["intel graphics gfx-driver-user-feature_dg1_poweron-27723 dch releaseinternal","1",0,[[3840,2160,11]]],["intel hd","hd",0,[[1280,800,18],[1366,768,26],[1600,900,12],[1920,1080,13],[1920,1200,16],[1920,1280,18],[3000,2002,6],[4096,2160,4]]],["intel hd 4000","4000",0,[[1366,768,37]]],["intel hd 530","530",0,[[1920,1200,54]]],["intel hd graphics 3000","3000",0,[[1920,1080,21]]],["intel hd graphics 4000","4000",0,[[1280,800,41],[1366,768,33],[1440,900,31],[1680,1050,50],[1920,1080,27],[2560,1600,13],[2880,1800,12]]],["intel hd graphics 4000,,,,,,,","4000",0,[[1920,1080,19]]],["intel hd graphics 4400","4400",0,[[1366,768,28],[1280,1024,48],[1920,1080,18],[2160,1440,20]]],["intel hd graphics 4600","4600",0,[[1366,768,14],[1280,960,65],[1280,1024,60],[1600,900,33],[1680,1050,31],[1600,1200,47],[1920,1080,19],[1920,1200,22],[2880,1620,14]]],["intel hd graphics 500","500",0,[[1920,1080,15]]],["intel hd graphics 5000","5000",0,[[1366,768,45],[1440,900,42],[1920,1032,25],[1920,1080,27],[2160,1439,19],[2160,1440,23],[2560,1440,15]]],["intel hd graphics 505","505",0,[[1366,768,28],[1920,1080,16]]],["intel hd graphics 510","510",0,[[1366,768,29],[1440,900,46],[1680,1050,12],[1920,1080,27]]],["intel hd graphics 515","515",0,[[1920,1080,45],[2720,768,22],[1920,1280,41],[2160,1440,28],[2560,1600,16],[2736,1824,19],[3200,1800,12],[3840,2160,10]]],["intel hd graphics 520","520",0,[[1366,768,90],[1920,1080,30],[2736,1824,26],[3000,2000,21]]],["intel hd graphics 530","530",0,[[1366,768,21],[1280,1024,65],[1920,1080,47],[1920,1200,39],[3840,2160,6]]],["intel hd graphics 5300","5300",0,[[1920,1080,21],[2304,1440,19],[2560,1600,13]]],["intel hd graphics 5500","5500",0,[[1366,768,37],[1920,1080,21]]],["intel hd graphics 5600","5600",0,[[1920,1080,26],[1920,1200,40],[2880,1620,21]]],["intel hd graphics 6000","6000",0,[[1366,768,43],[1440,900,40],[1920,1080,21]]],["intel hd graphics 610","610",0,[[1366,768,33],[1600,900,42],[1920,1080,27],[3840,2160,8]]],["intel hd graphics 615","615",0,[[1600,900,13],[1920,1080,18],[1800,1200,29],[1920,1200,34],[2560,1440,25],[2560,1600,21],[2736,1824,21]]],["intel hd graphics 620","620",0,[[1920,1080,37],[2736,1824,27],[3200,1800,25],[3840,2160,13]]],["intel hd graphics 630","630",0,[[1366,768,69],[1920,1080,40],[2560,1440,27],[2560,1600,23],[3360,2100,56],[3840,2160,12]]],["intel hd graphics 630 gt2","630",0,[[1920,1080,39],[1720,1440,120]]],["intel hd graphics cfl crb","hdcfl",0,[[2560,1440,38]]],["intel hd graphics family","hd",0,[[1366,768,44]]],["intel hd graphics icl rvp","hdicl",0,[[1920,1080,58]]],["intel hd graphics icl rvp bigsur","hdicl",0,[[1920,1080,57]]],["intel hd graphics kbl crb","hdkbl",0,[[1920,1080,57],[3840,2160,13]]],["intel hd graphics p4600","4600",0,[[1280,1024,57],[1920,1080,18],[2560,1600,60]]],["intel hd graphics p530","530",0,[[2560,1440,36],[3840,2160,12]]],["intel hd graphics p630","630",0,[[1440,900,35],[1920,1200,50]]],["intel hd graphics, gen10","10",0,[[3840,2160,4]]],["intel hd5500 broadwell pg7","5500",0,[[1366,768,31]]],["intel hd5500 graphics pg7","5500",0,[[1366,768,56]]],["intel iris","",0,[[1366,768,57],[1600,900,34],[1920,1080,34],[2560,1600,17],[2880,1800,14]]],["intel iris graphics 5100","5100",0,[[1920,1080,35],[2560,1600,18]]],["intel iris graphics 540","540",0,[[1920,1080,20],[2736,1824,28],[2880,1800,23],[3200,1800,17],[3840,2160,17]]],["intel iris graphics 550","550",0,[[1920,1080,81],[2160,1440,45],[2560,1600,28],[2880,1800,26],[3840,2160,24]]],["intel iris graphics 6100","6100",0,[[1920,1080,26],[2560,1600,19],[3840,2160,10]]],["intel iris graphics 6200","6200",0,[[4096,2304,13]]],["intel iris graphics 640","640",0,[[2256,1504,24],[3840,2160,9]]],["intel iris graphics 650","650",0,[[2560,1440,24]]],["intel iris graphics p580","580",0,[[3840,2160,12]]],["intel iris plus","",0,[[1920,1080,60],[2256,1504,95],[2496,1664,93],[2736,1824,60],[2880,1800,60],[3000,2000,56]]],["intel iris plus graphics 640","640",0,[[1920,1080,87],[2256,1504,46],[2560,1600,44],[2735,1823,28],[2736,1824,28],[2880,1800,26],[3072,1728,25],[3200,1800,37],[3840,2160,16]]],["intel iris plus graphics 645","645",0,[[2560,1599,32],[2560,1600,56],[2880,1800,47]]],["intel iris plus graphics 650","650",0,[[1920,1080,60],[2560,1600,49],[2880,1800,27],[3840,2160,16]]],["intel iris plus graphics 655","655",0,[[1920,1080,58],[2560,1440,85],[2880,1800,32],[3840,2160,24]]],["intel iris pro","pro",0,[[1920,1080,56]]],["intel iris pro graphics 5200","5200",0,[[1920,1080,53],[2879,1800,24],[2880,1800,21]]],["intel iris pro graphics 580","580",0,[[1920,1080,58],[2560,1080,91],[2560,1440,58],[3840,1600,27]]],["intel iris pro graphics 6200","6200",0,[[1366,696,38],[1920,1080,58],[1920,1200,60],[3840,2160,19],[4096,2304,14]]],["intel iris pro graphics p580","580",0,[[1024,768,42],[1920,1080,103],[3840,2160,27]]],["intel iris pro graphics p6300","6300",0,[[1366,768,102],[1440,900,128],[1920,1080,30]]],["intel iris xe","xe",0,[[1920,1080,88]]],["intel iris xe graphics releaseinternal","xe",0,[[3840,2160,38]]],["intel iris xe max","xe",0,[[1920,1080,60],[3840,2160,56]]],["intel kabylake hd graphics ult gt2","2",0,[[3840,2160,11]]],["intel kabylake hd graphics ulx gt2","2",0,[[1920,1080,28],[3840,2160,6]]],["intel kbl unknown","kbl",0,[[1920,1080,54]]],["intel mesa dri intel bay trail","dribay",0,[[1366,768,14]]],["intel mesa dri intel haswell mobile","dri",0,[[1920,1080,27]]],["intel mesa dri intel hd","drihd",0,[[1920,1080,10]]],["intel mesa dri intel hd graphics 400","400",0,[[1366,768,30]]],["intel mesa dri intel hd graphics 505","505",0,[[1920,1080,27]]],["intel mesa dri intel hd graphics 520","520",0,[[1920,1080,45],[2560,1440,24]]],["intel mesa dri intel hd graphics 530","530",0,[[3840,2160,12]]],["intel mesa dri intel hd graphics 5500","5500",0,[[1366,768,40]]],["intel mesa dri intel hd graphics 620","620",0,[[1920,1080,53]]],["intel mesa dri intel hd graphics 630","630",0,[[1477,831,58]]],["intel mesa dri intel hd graphics p4000","4000",0,[[1920,1080,36]]],["intel mesa dri intel iris graphics 540","540",0,[[1280,720,40]]],["intel mesa dri intel ivybridge desktop","dri",0,[[2560,1080,16]]],["intel mesa dri intel ivybridge mobile","dri",0,[[1920,1080,25]]],["intel mesa dri intel kabylake gt2","2",0,[[1920,1080,36]]],["intel mesa dri intel sandybridge desktop","dri",0,[[1280,1024,12]]],["intel mesa dri intel sandybridge mobile","dri",0,[[1366,768,33]]],["intel mesa dri intel uhd graphics 620","620",0,[[2736,1824,22]]],["intel mesa dri intel uhd graphics 630","630",0,[[1920,1080,42]]],["intel mesa intel hd graphics 520","520",0,[[1920,1080,47]]],["intel mesa intel hd graphics 530","530",0,[[1920,1080,55]]],["intel phdgd ivy 4","4",0,[[1366,768,45]]],["intel radeon pro vega 16","16",0,[[3360,1890,20]]],["intel radeong 0.4 on amd bonaire","0",0,[[1920,1200,92]]],["intel radeong 0.4 on amd cape verde","0",0,[[1920,1200,73]]],["intel radeong 0.4 on amd polaris10","0",0,[[3840,2160,108]]],["intel radeong 0.4 on amd tonga","0",0,[[1920,1080,124]]],["intel skl unknown","skl",0,[[1920,1080,43]]],["intel skylake gt2 [hd graphics 520]","2",0,[[1920,1080,39]]],["intel uhd","uhd",0,[[1920,1080,58],[2560,1600,22],[3440,1440,14],[2736,1824,32],[3840,2160,31]]],["intel uhd 630","630",0,[[2560,1440,38]]],["intel uhd graphics 600","600",0,[[1366,768,27],[1920,1080,13],[1920,1200,13],[2560,1440,11],[3840,2160,5]]],["intel uhd graphics 600 universal","600",0,[[1919,1031,15]]],["intel uhd graphics 605","605",0,[[1366,768,29],[1920,1080,37]]],["intel uhd graphics 610","610",0,[[1366,768,58],[1920,1080,32],[1920,1200,37],[2560,1440,17],[3840,2160,11]]],["intel uhd graphics 615","615",0,[[1920,1080,34],[1920,1280,29],[3840,2160,9]]],["intel uhd graphics 617","617",0,[[1920,1080,43],[2560,1599,24],[2560,1600,26],[2880,1800,24]]],["intel uhd graphics 620","620",0,[[1920,1080,50],[2736,1824,33],[3200,1800,16]]],["intel uhd graphics 630","630",0,[[1440,900,112],[1920,1080,44],[1920,1200,65],[2560,1080,68],[2560,1440,26],[3440,1440,25],[3584,2240,137],[3840,2160,12],[6016,3384,8]]],["intel uhd graphics 730","730",0,[[1920,1080,53]]],["intel uhd graphics 750","750",0,[[1920,1080,56],[3840,2160,36]]],["intel uhd graphics 770","770",0,[[3440,1440,78],[5120,1440,31]]],["intel uhd graphics gfx-driver-user-comp_core-23599","23599",0,[[3840,2160,18]]],["intel uhd graphics p630","630",0,[[1920,1080,54],[3840,2160,21]]],["intel uhd graphics releaseinternal","uhd",0,[[3199,1800,22],[3000,2000,47]]],["intel uhd graphics, gen11 lp","11",0,[[3840,2160,10]]],["intel uhd graphics, gen12 lp releaseinternal","12",0,[[3839,2159,4]]],["intel uhd graphics, lkf","uhdlkf",0,[[1927,1439,14]]],["intel unknown","",0,[[1920,1080,37]]],["intel xe","xe",0,[[1920,1080,268],[2560,1440,137]]],["intel xeon e3-1200 v3 gen core processor integrated graphics controller","3",0,[[1600,900,49]]]]\')},217:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["nvidia %nvidia_dev.13d7.0580.1028%","13",0,[[1920,1018,60]]],["nvidia a100-pcie-40gb","100",0,[[1920,1080,449]]],["nvidia a40","40",0,[[1920,1080,504]]],["nvidia a40-8q","40",0,[[2560,1440,58]]],["nvidia ashley","",0,[[1920,1080,60]]],["nvidia asus geforce gt 430","430",0,[[1366,768,35]]],["nvidia asus geforce gt 440","440",0,[[1920,1080,28]]],["nvidia asus geforce gt 520","520",0,[[1680,1050,12]]],["nvidia asus geforce gt 610","610",0,[[1920,1200,15]]],["nvidia asus geforce gt 630","630",0,[[1680,1050,41]]],["nvidia asus geforce gt 640","640",0,[[2560,1440,34]]],["nvidia asus geforce gt 710","710",0,[[1920,1080,31]]],["nvidia asus geforce gt 730","730",0,[[2560,1080,28],[3840,2160,12]]],["nvidia asus geforce gts 450","450",0,[[1920,1080,54]]],["nvidia asus geforce gtx 1060","1060",0,[[3840,2160,38]]],["nvidia asus geforce gtx 1080","1080",0,[[2560,1440,120]]],["nvidia asus geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia asus geforce gtx 480","480",0,[[1920,1080,59]]],["nvidia asus geforce gtx 550 ti","550",0,[[1920,1080,57]]],["nvidia asus geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia asus geforce gtx 560 se","560",0,[[1920,1080,59]]],["nvidia asus geforce gtx 560 ti","560",0,[[1680,1050,58]]],["nvidia asus geforce gtx 570","570",0,[[1280,1024,74]]],["nvidia asus geforce gtx 570 hd","570",0,[[1920,1080,60]]],["nvidia asus geforce gtx 580","580",0,[[1920,1200,59]]],["nvidia asus geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia asus geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia asus geforce gtx 750 ti","750",0,[[1360,768,59],[1920,1080,118]]],["nvidia asus geforce gtx 760","760",0,[[1920,1080,60],[1920,1200,60]]],["nvidia asus geforce gtx 770","770",0,[[1920,1080,60]]],["nvidia asus geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia asus geforce gtx 950","950",0,[[1920,1080,60]]],["nvidia asus geforce gtx 960","960",0,[[1920,1080,60],[2560,1600,117]]],["nvidia asus geforce gtx 970","970",0,[[2560,1600,60]]],["nvidia asus geforce gtx 980 ti","980",0,[[2560,1440,131]]],["nvidia chip model","",0,[[1920,1080,60]]],["nvidia colorful geforce gtx 960","960",0,[[2560,1440,60]]],["nvidia dell nvs 5200m","5200",0,[[1920,1080,27]]],["nvidia dell quadro 2000m","2000",0,[[1920,1080,29]]],["nvidia device","",0,[[1920,1080,746]]],["nvidia elitegroup geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia evga geforce gt 545","545",0,[[1920,1080,37]]],["nvidia evga geforce gt 640","640",0,[[1366,768,60]]],["nvidia evga geforce gt 710","710",0,[[1680,1050,36],[1920,1080,29]]],["nvidia evga geforce gt 730","730",0,[[1600,900,59]]],["nvidia evga geforce gt 740","740",0,[[1280,1024,45]]],["nvidia evga geforce gtx 1050 ti","1050",0,[[2560,1440,60],[4096,2304,58]]],["nvidia evga geforce gtx 1070","1070",0,[[5120,2880,60]]],["nvidia evga geforce gtx 1080 ti","1080",0,[[1920,1200,60]]],["nvidia evga geforce gtx 560 ti","560",0,[[1680,1050,59]]],["nvidia evga geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia evga geforce gtx 580","580",0,[[2560,1440,60]]],["nvidia evga geforce gtx 650","650",0,[[1920,1200,87],[2560,1600,43]]],["nvidia evga geforce gtx 650 ti","650",0,[[1680,1050,116],[2560,1440,55]]],["nvidia evga geforce gtx 650 ti boost","650",0,[[1920,1080,56]]],["nvidia evga geforce gtx 660 ti","660",0,[[1920,1200,60]]],["nvidia evga geforce gtx 680","680",0,[[1600,1200,60]]],["nvidia evga geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia evga geforce gtx 760","760",0,[[1920,1080,119],[1920,1200,60]]],["nvidia evga geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia evga geforce gtx 960","960",0,[[1920,1080,60],[2560,1440,115]]],["nvidia evga geforce gtx 970","970",0,[[1920,1080,120]]],["nvidia evga geforce gtx 980","980",0,[[3440,1440,60]]],["nvidia evga geforce gtx 980 ti","980",0,[[1920,1080,60]]],["nvidia ga104gl [rtx a4000]","104",0,[[3840,2160,60]]],["nvidia gainward geforce gt 630","630",0,[[1920,1080,28]]],["nvidia gainward geforce gts 450","450",0,[[1920,1080,55]]],["nvidia gainward geforce gtx 460","460",0,[[1920,1080,58]]],["nvidia gainward geforce gtx 550 ti","550",0,[[1280,1024,67]]],["nvidia gainward geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia gainward geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia gainward geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia geforce 210","210",0,[[1920,1080,8]]],["nvidia geforce 410m","410",0,[[1366,768,25],[1600,900,19]]],["nvidia geforce 510","510",0,[[1280,960,20]]],["nvidia geforce 605","605",0,[[1768,992,17],[1920,1080,15]]],["nvidia geforce 610m","610",0,[[1366,768,26]]],["nvidia geforce 610m/710m/810m/820m / gt 620m/625m/630m/720m","610",0,[[1366,768,51]]],["nvidia geforce 615","615",0,[[1920,1080,21]]],["nvidia geforce 705m","705",0,[[1920,1080,18]]],["nvidia geforce 710a","710",0,[[1920,1080,32]]],["nvidia geforce 710m","710",0,[[1366,768,55]]],["nvidia geforce 730a","730",0,[[1920,1080,37]]],["nvidia geforce 800m","800",0,[[1920,1080,18]]],["nvidia geforce 810m","810",0,[[1366,768,44],[1920,1080,31]]],["nvidia geforce 820a","820",0,[[1920,1080,28]]],["nvidia geforce 820m","820",0,[[1366,768,57],[1920,1080,23]]],["nvidia geforce 830a","830",0,[[1920,1080,53]]],["nvidia geforce 830m","830",0,[[1366,768,60]]],["nvidia geforce 8400 gs","8400",0,[[1680,1050,4]]],["nvidia geforce 8400 gs rev. 3","8400",0,[[1920,1080,4]]],["nvidia geforce 840a","840",0,[[1920,1080,56]]],["nvidia geforce 840m","840",0,[[1920,1080,56]]],["nvidia geforce 845m","845",0,[[1920,1080,59]]],["nvidia geforce 8600 gt","8600",1,[[1920,1200,-1]]],["nvidia geforce 8600 gts","8600",1,[[1920,1080,-1]]],["nvidia geforce 910m","910",0,[[1366,768,58],[1600,900,45]]],["nvidia geforce 920m","920",0,[[1366,768,60]]],["nvidia geforce 920mx","920",0,[[1366,768,60],[1920,1080,60]]],["nvidia geforce 9300 / nforce 730i","9300",0,[[1920,1080,6]]],["nvidia geforce 930a","930",0,[[1920,1080,55]]],["nvidia geforce 930m","930",0,[[1366,768,60]]],["nvidia geforce 930mx","930",0,[[1366,768,89],[1920,1080,59]]],["nvidia geforce 9400 gt","9400",1,[[1366,768,-1]]],["nvidia geforce 940a","940",0,[[1920,1080,58]]],["nvidia geforce 940m","940",0,[[1920,1080,54]]],["nvidia geforce 940mx","940",0,[[1920,1080,60]]],["nvidia geforce 945m","945",0,[[1920,1080,59]]],["nvidia geforce 9600 gt","9600",0,[[1920,1200,2]]],["nvidia geforce 9600m gt","9600",1,[[1440,900,-1]]],["nvidia geforce 9800 gt","9800",0,[[1920,1200,52]]],["nvidia geforce 9800 gtx / 9800 gtx+","9800",0,[[1280,1024,59]]],["nvidia geforce gpu","gpu",0,[[3000,2000,36]]],["nvidia geforce gt 1010","1010",0,[[1920,1080,135]]],["nvidia geforce gt 1030","1030",0,[[1920,1080,60]]],["nvidia geforce gt 1030 opengl engine","1030",0,[[6720,3780,15]]],["nvidia geforce gt 120","120",1,[[1920,1080,-1]]],["nvidia geforce gt 240","240",0,[[1366,768,32]]],["nvidia geforce gt 320m","320",0,[[1366,768,26]]],["nvidia geforce gt 415m","415",0,[[1366,768,19]]],["nvidia geforce gt 420","420",0,[[1024,768,33],[1920,1080,20]]],["nvidia geforce gt 420m","420",0,[[1366,768,28]]],["nvidia geforce gt 425m","425",0,[[1366,768,55],[1600,900,28]]],["nvidia geforce gt 430","430",0,[[1600,1200,16],[1920,1080,28]]],["nvidia geforce gt 435m","435",0,[[1366,768,53],[1920,1080,22]]],["nvidia geforce gt 440","440",0,[[1280,1024,51],[1680,1050,38],[1920,1080,45]]],["nvidia geforce gt 445m","445",0,[[1600,900,53]]],["nvidia geforce gt 520","520",0,[[1440,900,19],[1920,1080,17]]],["nvidia geforce gt 520m","520",0,[[1366,768,29]]],["nvidia geforce gt 520mx","520",0,[[1366,768,35]]],["nvidia geforce gt 525m","525",0,[[1366,768,28],[1600,900,22]]],["nvidia geforce gt 530","530",0,[[1920,1080,26]]],["nvidia geforce gt 540m","540",0,[[1366,768,38]]],["nvidia geforce gt 545","545",0,[[1920,1080,54]]],["nvidia geforce gt 550m","550",0,[[1600,900,44],[1920,1080,29]]],["nvidia geforce gt 555m","555",0,[[1920,1080,42]]],["nvidia geforce gt 555m/635m","555",0,[[1920,1080,36]]],["nvidia geforce gt 610","610",0,[[1280,1024,22],[1920,1080,15]]],["nvidia geforce gt 620","620",0,[[1920,1080,19]]],["nvidia geforce gt 620 oem","620",0,[[1920,1080,20],[1920,1200,20]]],["nvidia geforce gt 620m","620",0,[[1366,768,55],[1920,1080,30]]],["nvidia geforce gt 620m/630m/635m/640m le","620",0,[[1368,768,38]]],["nvidia geforce gt 625","625",0,[[1920,1080,18]]],["nvidia geforce gt 625m","625",0,[[1366,768,38]]],["nvidia geforce gt 630","630",0,[[1680,1050,36],[1920,1080,36],[1920,1200,30]]],["nvidia geforce gt 630 oem","630",0,[[1600,900,33]]],["nvidia geforce gt 630 opengl engine","630",0,[[1920,1080,33]]],["nvidia geforce gt 630 rev. 2","630",0,[[1920,1080,26]]],["nvidia geforce gt 630m","630",0,[[1366,768,57]]],["nvidia geforce gt 635","635",0,[[1920,1080,27]]],["nvidia geforce gt 635m","635",0,[[1366,768,47]]],["nvidia geforce gt 640","640",0,[[1920,1080,47]]],["nvidia geforce gt 640 oem","640",0,[[1920,1080,46],[2560,1440,35]]],["nvidia geforce gt 640 opengl engine","640",0,[[1280,1024,43]]],["nvidia geforce gt 640 rev. 2","640",0,[[1280,1024,60],[1920,1080,55]]],["nvidia geforce gt 640m","640",0,[[1366,768,82],[1600,900,59],[1920,1080,34]]],["nvidia geforce gt 640m le","640",0,[[1920,1080,49]]],["nvidia geforce gt 640m mac","640",0,[[1366,768,56],[1920,1080,20]]],["nvidia geforce gt 640m opengl engine","640",0,[[1920,1080,45]]],["nvidia geforce gt 645m","645",0,[[1366,768,60]]],["nvidia geforce gt 650m","650",0,[[1360,768,59],[1920,1080,58],[2560,1440,59]]],["nvidia geforce gt 650m mac","650",0,[[1440,900,56],[1920,1080,15],[2560,1440,19],[2880,1800,31]]],["nvidia geforce gt 650m opengl engine","650",0,[[1920,1080,56],[3840,2160,27]]],["nvidia geforce gt 705","705",0,[[1920,1080,11]]],["nvidia geforce gt 710","710",0,[[1920,1080,28]]],["nvidia geforce gt 710b","710",0,[[1920,1080,26]]],["nvidia geforce gt 710m","710",0,[[1366,768,46]]],["nvidia geforce gt 720","720",0,[[1920,1080,19],[2560,1440,16],[5120,2880,5]]],["nvidia geforce gt 720 opengl engine","720",0,[[2560,1600,20]]],["nvidia geforce gt 720m","720",0,[[1366,768,42]]],["nvidia geforce gt 730","730",0,[[1920,1080,54]]],["nvidia geforce gt 730a","730",0,[[1920,1080,23]]],["nvidia geforce gt 730m","730",0,[[1920,1080,43]]],["nvidia geforce gt 735m","735",0,[[1920,1080,39]]],["nvidia geforce gt 740","740",0,[[1920,1080,55],[3440,1440,23]]],["nvidia geforce gt 740 opengl engine","740",0,[[1920,1200,51]]],["nvidia geforce gt 740m","740",0,[[1366,768,60]]],["nvidia geforce gt 745m","745",0,[[1920,1080,55]]],["nvidia geforce gt 750m","750",0,[[1920,1080,57]]],["nvidia geforce gt 750m mac","750",0,[[1920,1080,58],[2880,1800,28]]],["nvidia geforce gt 755m","755",0,[[1920,1080,57]]],["nvidia geforce gt 755m mac","755",0,[[2560,1440,41]]],["nvidia geforce gt 755m opengl engine","755",0,[[2560,1440,51]]],["nvidia geforce gt 820m","820",0,[[1600,900,47]]],["nvidia geforce gts 250","250",0,[[1680,1050,53]]],["nvidia geforce gts 450","450",0,[[1360,768,60],[1680,1050,57],[1920,1080,55]]],["nvidia geforce gts 450 rev. 2","450",0,[[1920,1080,56]]],["nvidia geforce gtx 1050","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 3gb","1050",0,[[1280,1024,60]]],["nvidia geforce gtx 1050 mobile","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 opengl engine","1050",0,[[1920,1080,116]]],["nvidia geforce gtx 1050 ti","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 ti mobile","1050",0,[[1920,1080,298]]],["nvidia geforce gtx 1050 ti opengl engine","1050",0,[[1920,1080,60]]],["nvidia geforce gtx 1050 ti with max-q design","1050",0,[[1920,1080,268],[2560,1440,102],[3840,2160,60]]],["nvidia geforce gtx 1050 with max-q design","1050",0,[[1920,1080,60],[3840,2160,24]]],["nvidia geforce gtx 1060","1060",0,[[1920,1080,60],[3840,2160,59]]],["nvidia geforce gtx 1060 3gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 3gb opengl engine","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 5gb","1060",0,[[1920,1080,55]]],["nvidia geforce gtx 1060 6gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060 6gb opengl engine","1060",0,[[1920,1080,75]]],["nvidia geforce gtx 1060 mobile","1060",0,[[1920,1080,422]]],["nvidia geforce gtx 1060 mobile 6gb","1060",0,[[1920,1080,120]]],["nvidia geforce gtx 1060 with max-q design","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1060se 3gb","1060",0,[[1920,1080,60]]],["nvidia geforce gtx 1070","1070",0,[[1920,1080,134]]],["nvidia geforce gtx 1070 a17","1070",0,[[1920,1080,60]]],["nvidia geforce gtx 1070 mobile","1070",0,[[1920,1080,467]]],["nvidia geforce gtx 1070 opengl engine","1070",0,[[1920,1080,143]]],["nvidia geforce gtx 1070 ti","1070",0,[[1920,1080,60],[6016,3384,59]]],["nvidia geforce gtx 1070 ti opengl engine","1070",0,[[1920,1080,75]]],["nvidia geforce gtx 1070 with max-q design","1070",0,[[1920,1080,448]]],["nvidia geforce gtx 1070 with maxq design","1070",0,[[1920,1080,60],[3840,2160,59]]],["nvidia geforce gtx 1080","1080",0,[[1920,1080,119],[2560,1440,326],[3840,2160,286]]],["nvidia geforce gtx 1080 mobile","1080",0,[[1920,1080,120]]],["nvidia geforce gtx 1080 opengl engine","1080",0,[[1920,1080,79]]],["nvidia geforce gtx 1080 ti","1080",0,[[1920,1080,120]]],["nvidia geforce gtx 1080 ti opengl engine","1080",0,[[1920,1080,127]]],["nvidia geforce gtx 1080 with max-q design","1080",0,[[1920,1080,144]]],["nvidia geforce gtx 1180","1180",0,[[3440,1440,60]]],["nvidia geforce gtx 1650","1650",0,[[1920,1080,380]]],["nvidia geforce gtx 1650 mobile / max-q","1650",0,[[1920,1080,292]]],["nvidia geforce gtx 1650 super","1650",0,[[1920,1080,433]]],["nvidia geforce gtx 1650 ti","1650",0,[[1920,1080,144],[3840,2400,59]]],["nvidia geforce gtx 1650 ti mobile","1650",0,[[1920,1080,144]]],["nvidia geforce gtx 1650 ti with max-q design","1650",0,[[1920,1080,60],[3839,2160,60]]],["nvidia geforce gtx 1650 with max-q design","1650",0,[[1920,1080,142],[3000,2000,60]]],["nvidia geforce gtx 1660","1660",0,[[1920,1080,144]]],["nvidia geforce gtx 1660 super","1660",0,[[1920,1080,60]]],["nvidia geforce gtx 1660 ti","1660",0,[[1920,1080,546],[3840,2160,60]]],["nvidia geforce gtx 1660 ti mobile","1660",0,[[1920,1080,451]]],["nvidia geforce gtx 1660 ti with max-q design","1660",0,[[1920,1080,144]]],["nvidia geforce gtx 280","280",0,[[1680,1050,56]]],["nvidia geforce gtx 295","295",0,[[1920,1080,56]]],["nvidia geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia geforce gtx 460 oem","460",0,[[1360,768,60],[1920,1080,60]]],["nvidia geforce gtx 460 opengl engine","460",0,[[1920,1080,59]]],["nvidia geforce gtx 460 se","460",0,[[1920,1080,56],[1920,1200,57]]],["nvidia geforce gtx 460 v2","460",0,[[1920,1080,60],[1920,1200,60],[2560,1600,55]]],["nvidia geforce gtx 460m","460",0,[[1920,1080,46]]],["nvidia geforce gtx 465","465",0,[[1920,1080,134],[1920,1200,59]]],["nvidia geforce gtx 470","470",0,[[1680,1050,60],[1920,1080,59]]],["nvidia geforce gtx 470m","470",0,[[1920,1200,55]]],["nvidia geforce gtx 480","480",0,[[1440,900,191],[1920,1080,115],[1920,1200,60]]],["nvidia geforce gtx 480 opengl engine","480",0,[[1600,1200,60]]],["nvidia geforce gtx 550 ti","550",0,[[1280,1024,58],[1920,1080,58]]],["nvidia geforce gtx 550 ti opengl engine","550",0,[[1920,1080,55]]],["nvidia geforce gtx 555","555",0,[[1920,1080,54]]],["nvidia geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia geforce gtx 560 se","560",0,[[1680,1050,52],[1920,1080,111]]],["nvidia geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia geforce gtx 560 ti 448 cores","560",0,[[1920,1080,60],[2560,1440,60]]],["nvidia geforce gtx 560 ti oem","560",0,[[1920,1080,176]]],["nvidia geforce gtx 560 ti opengl engine","560",0,[[1920,1080,48]]],["nvidia geforce gtx 560m","560",0,[[1920,1080,55]]],["nvidia geforce gtx 570","570",0,[[1920,1080,60]]],["nvidia geforce gtx 570 opengl engine","570",0,[[1920,1080,60]]],["nvidia geforce gtx 570 rev. 2","570",0,[[1920,1080,60],[1920,1200,60]]],["nvidia geforce gtx 570m","570",0,[[1920,1080,125],[2560,1440,8]]],["nvidia geforce gtx 580","580",0,[[1920,1080,60]]],["nvidia geforce gtx 580 opengl engine","580",0,[[1680,1050,59]]],["nvidia geforce gtx 580m","580",0,[[1920,1080,60]]],["nvidia geforce gtx 590","590",0,[[1920,1080,59]]],["nvidia geforce gtx 645","645",0,[[1920,1080,57],[1920,1200,58]]],["nvidia geforce gtx 645 opengl engine","645",0,[[1920,1200,58]]],["nvidia geforce gtx 650","650",0,[[1920,1080,72]]],["nvidia geforce gtx 650 oem","650",0,[[1366,768,59]]],["nvidia geforce gtx 650 opengl engine","650",0,[[1920,1080,59]]],["nvidia geforce gtx 650 ti","650",0,[[1920,1080,60]]],["nvidia geforce gtx 650 ti boost","650",0,[[1280,1024,60],[1600,1200,187],[1920,1080,60]]],["nvidia geforce gtx 650 ti opengl engine","650",0,[[1920,1080,60]]],["nvidia geforce gtx 660","660",0,[[1920,1080,111]]],["nvidia geforce gtx 660 oem","660",0,[[1920,1080,59]]],["nvidia geforce gtx 660 ti","660",0,[[1920,1080,60]]],["nvidia geforce gtx 660 ti opengl engine","660",0,[[1280,1024,60]]],["nvidia geforce gtx 660m","660",0,[[1680,1050,36],[1920,1080,59]]],["nvidia geforce gtx 660m mac","660",0,[[2560,1440,2]]],["nvidia geforce gtx 660m opengl engine","660",0,[[2560,1440,36]]],["nvidia geforce gtx 670","670",0,[[1920,1080,100]]],["nvidia geforce gtx 670 opengl engine","670",0,[[1920,1080,60]]],["nvidia geforce gtx 670m","670",0,[[1920,1080,66]]],["nvidia geforce gtx 670mx","670",0,[[1920,1080,60]]],["nvidia geforce gtx 675m","675",0,[[1920,1080,60]]],["nvidia geforce gtx 675mx","675",0,[[1680,1050,60],[1920,1080,60],[2560,1440,55]]],["nvidia geforce gtx 675mx mac","675",0,[[2560,1440,36]]],["nvidia geforce gtx 675mx opengl engine","675",0,[[2560,1440,60]]],["nvidia geforce gtx 680","680",0,[[1920,1080,60]]],["nvidia geforce gtx 680 opengl engine","680",0,[[1920,1080,60]]],["nvidia geforce gtx 680m","680",0,[[1920,1080,39],[1920,1200,60]]],["nvidia geforce gtx 680m opengl engine","680",0,[[1920,1080,36]]],["nvidia geforce gtx 680mx","680",0,[[2560,1440,59]]],["nvidia geforce gtx 680mx opengl engine","680",0,[[2560,1440,59]]],["nvidia geforce gtx 690","690",0,[[1920,1080,60],[3840,2160,30]]],["nvidia geforce gtx 745","745",0,[[1920,1080,60],[2560,1600,29]]],["nvidia geforce gtx 750","750",0,[[1920,1080,60]]],["nvidia geforce gtx 750 opengl engine","750",0,[[1920,1200,58]]],["nvidia geforce gtx 750 ti","750",0,[[1920,1080,97]]],["nvidia geforce gtx 760","760",0,[[1920,1080,60],[1920,1200,116]]],["nvidia geforce gtx 760 oem","760",0,[[1920,1080,60]]],["nvidia geforce gtx 760 opengl engine","760",0,[[1920,1080,52]]],["nvidia geforce gtx 760 ti","760",0,[[1920,1080,60],[1920,1200,60]]],["nvidia geforce gtx 760 ti oem","760",0,[[1920,1200,60]]],["nvidia geforce gtx 760 ti opengl engine","760",0,[[1920,1080,60]]],["nvidia geforce gtx 760a","760",0,[[2560,1080,15]]],["nvidia geforce gtx 760m","760",0,[[1920,1080,60]]],["nvidia geforce gtx 765m","765",0,[[1920,1080,53],[2560,1440,57]]],["nvidia geforce gtx 765m by nick[d]vb","765",0,[[2560,1440,58]]],["nvidia geforce gtx 765m opengl engine","765",0,[[2560,1440,57]]],["nvidia geforce gtx 770","770",0,[[1920,1080,143],[2560,1440,203]]],["nvidia geforce gtx 770 opengl engine","770",0,[[1920,1080,60]]],["nvidia geforce gtx 770m","770",0,[[1920,1080,60],[2560,1440,59]]],["nvidia geforce gtx 770m by nick[d]vb","770",0,[[2560,1440,34]]],["nvidia geforce gtx 770m opengl engine","770",0,[[2560,1440,59]]],["nvidia geforce gtx 775m by idopt mac","775",0,[[2560,1440,56]]],["nvidia geforce gtx 775m mac","775",0,[[2560,1440,59]]],["nvidia geforce gtx 775m opengl engine","775",0,[[2560,1440,60]]],["nvidia geforce gtx 780","780",0,[[1920,1080,159]]],["nvidia geforce gtx 780 by st3phl3","780",0,[[3840,2160,30]]],["nvidia geforce gtx 780 mac","780",0,[[1680,1050,60],[1920,1080,60]]],["nvidia geforce gtx 780 rev. 2","780",0,[[1920,1080,144],[2560,1440,119],[3840,2160,58],[5120,2880,58]]],["nvidia geforce gtx 780 ti","780",0,[[1280,1024,120],[1920,1080,119]]],["nvidia geforce gtx 780 ti opengl engine","780",0,[[2560,1440,60]]],["nvidia geforce gtx 780m","780",0,[[1920,1080,60],[2560,1440,59]]],["nvidia geforce gtx 780m by nick[d]vb","780",0,[[1920,1080,59],[2560,1440,60]]],["nvidia geforce gtx 780m mac","780",0,[[2560,1440,60]]],["nvidia geforce gtx 780m opengl engine","780",0,[[2560,1440,60]]],["nvidia geforce gtx 850a","850",0,[[2560,1440,48]]],["nvidia geforce gtx 850m","850",0,[[1920,1080,60]]],["nvidia geforce gtx 860m","860",0,[[1920,1080,59]]],["nvidia geforce gtx 860m opengl engine","860",0,[[2560,1440,58]]],["nvidia geforce gtx 870m","870",0,[[1920,1080,60],[2560,1440,102]]],["nvidia geforce gtx 880m","880",0,[[1920,1080,60],[2560,1440,74]]],["nvidia geforce gtx 880m opengl engine","880",0,[[2560,1440,60]]],["nvidia geforce gtx 950","950",0,[[1920,1080,98]]],["nvidia geforce gtx 950 opengl engine","950",0,[[1920,1200,60]]],["nvidia geforce gtx 950a","950",0,[[1920,1080,60],[3840,2160,38]]],["nvidia geforce gtx 950m","950",0,[[1920,1080,114]]],["nvidia geforce gtx 960","960",0,[[1920,1080,60]]],["nvidia geforce gtx 960a","960",0,[[1920,1440,128]]],["nvidia geforce gtx 960m","960",0,[[1920,1080,119],[3840,2160,37]]],["nvidia geforce gtx 965m","965",0,[[1920,1080,195],[3000,2000,59],[3840,2160,41]]],["nvidia geforce gtx 965m opengl engine","965",0,[[2880,1620,55]]],["nvidia geforce gtx 970","970",0,[[1920,1080,143]]],["nvidia geforce gtx 970 opengl engine","970",0,[[2560,1600,60]]],["nvidia geforce gtx 970m","970",0,[[1920,1080,60]]],["nvidia geforce gtx 980","980",0,[[1920,1080,60],[3440,1440,294]]],["nvidia geforce gtx 980 ti","980",0,[[1920,1080,119],[2560,1440,456]]],["nvidia geforce gtx 980 ti opengl engine","980",0,[[1920,1080,60]]],["nvidia geforce gtx 980m","980",0,[[1920,1080,60],[3840,2160,104]]],["nvidia geforce gtx titan","gtx",0,[[1920,1080,119],[1920,1200,119],[2560,1440,60]]],["nvidia geforce gtx titan black","gtx",0,[[1680,1050,60],[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["nvidia geforce gtx titan black opengl engine","gtx",0,[[3840,2160,60]]],["nvidia geforce gtx titan opengl engine","gtx",0,[[2560,1440,60]]],["nvidia geforce gtx titan x","gtxx",0,[[1920,1080,144],[2560,1440,120],[2560,1600,60]]],["nvidia geforce gtx titan xp","gtxxp",0,[[2560,1440,60],[3440,1440,60]]],["nvidia geforce gtx titan z","gtxz",0,[[1440,900,59],[1920,1080,39],[3840,2160,60]]],["nvidia geforce gtx780m by nikey22","780",0,[[2560,1440,60]]],["nvidia geforce gtx870m by nikey22","870",0,[[2560,1440,60]]],["nvidia geforce gtx880m","880",0,[[1920,1080,60]]],["nvidia geforce gtx880m by nikey22","880",0,[[2560,1440,59]]],["nvidia geforce gtx880m opengl engine","880",0,[[2560,1440,59]]],["nvidia geforce mx110","110",0,[[1366,768,61],[1920,1080,57]]],["nvidia geforce mx130","130",0,[[1920,1080,60]]],["nvidia geforce mx150","150",0,[[1920,1080,113]]],["nvidia geforce mx230","230",0,[[1920,1080,60]]],["nvidia geforce mx250","250",0,[[1920,1080,60]]],["nvidia geforce mx330","330",0,[[1920,1080,60],[3840,2160,51]]],["nvidia geforce mx350","350",0,[[1920,1080,60]]],["nvidia geforce mx450","450",0,[[1920,1080,60]]],["nvidia geforce pre-release graphics device","pre",0,[[2560,1440,60]]],["nvidia geforce pre-release tesla c2075 opengl engine","2075",0,[[1600,900,59]]],["nvidia geforce pre-release titan x opengl engine","prex",0,[[1920,1080,60]]],["nvidia geforce pre-release titan xp collectors edition opengl e","prexpe",0,[[1920,1080,59]]],["nvidia geforce pre-release titan xp opengl engine","prexp",0,[[2560,1440,60]]],["nvidia geforce rtx 2060","2060",0,[[1920,1080,512]]],["nvidia geforce rtx 2060 max-q","2060",0,[[2560,1440,301]]],["nvidia geforce rtx 2060 mobile","2060",0,[[1920,1080,518]]],["nvidia geforce rtx 2060 rev. a","2060",0,[[3840,2160,257]]],["nvidia geforce rtx 2060 super","2060",0,[[1920,1080,645],[2560,1440,143]]],["nvidia geforce rtx 2060 with max-q design","2060",0,[[1920,1080,292],[1920,1200,60]]],["nvidia geforce rtx 2070","2070",0,[[1920,1080,60],[3840,2160,60]]],["nvidia geforce rtx 2070 mobile","2070",0,[[1920,1080,477]]],["nvidia geforce rtx 2070 mobile / max-q","2070",0,[[1920,1080,526]]],["nvidia geforce rtx 2070 mobile / max-q refresh","2070",0,[[1920,1080,143]]],["nvidia geforce rtx 2070 rev. a","2070",0,[[2560,1440,144]]],["nvidia geforce rtx 2070 super","2070",0,[[1920,1080,510]]],["nvidia geforce rtx 2070 super with max-q design","2070",0,[[1920,1080,300]]],["nvidia geforce rtx 2070 with max-q design","2070",0,[[1920,1080,240]]],["nvidia geforce rtx 2080","2080",0,[[1920,1080,632],[2560,1440,165]]],["nvidia geforce rtx 2080 mobile","2080",0,[[1920,1080,144]]],["nvidia geforce rtx 2080 rev. a","2080",0,[[2560,1440,143]]],["nvidia geforce rtx 2080 super","2080",0,[[1920,1080,601]]],["nvidia geforce rtx 2080 super mobile / max-q","2080",0,[[3840,2160,59]]],["nvidia geforce rtx 2080 super with max-q design","2080",0,[[1920,1080,300]]],["nvidia geforce rtx 2080 ti","2080",0,[[1920,1080,83]]],["nvidia geforce rtx 2080 ti rev. a","2080",0,[[1920,1080,403]]],["nvidia geforce rtx 2080 with max-q design","2080",0,[[1920,1080,476]]],["nvidia geforce rtx 3050","3050",0,[[1920,1080,60]]],["nvidia geforce rtx 3050 laptop gpu","3050",0,[[1920,1080,144]]],["nvidia geforce rtx 3050 ti laptop gpu","3050",0,[[1920,1080,144]]],["nvidia geforce rtx 3060","3060",0,[[1920,1080,674]]],["nvidia geforce rtx 3060 laptop gpu","3060",0,[[1920,1080,300]]],["nvidia geforce rtx 3060 lite hash rate","3060",0,[[1920,1080,60]]],["nvidia geforce rtx 3060 mobile / max-q","3060",0,[[1920,1080,435]]],["nvidia geforce rtx 3060 ti","3060",0,[[1920,1080,779]]],["nvidia geforce rtx 3070","3070",0,[[1920,1080,723],[2560,1440,294]]],["nvidia geforce rtx 3070 laptop gpu","3070",0,[[1920,1080,357]]],["nvidia geforce rtx 3070 mobile / max-q","3070",0,[[2560,1440,386]]],["nvidia geforce rtx 3070 ti","3070",0,[[1920,1080,60]]],["nvidia geforce rtx 3080","3080",0,[[1920,1080,726],[2560,1440,60],[3840,2160,60]]],["nvidia geforce rtx 3080 laptop gpu","3080",0,[[1920,1080,294],[2560,1440,244]]],["nvidia geforce rtx 3080 mobile / max-q 8gb/16gb","3080",0,[[1920,1080,293]]],["nvidia geforce rtx 3080 ti","3080",0,[[1920,1080,239],[2560,1440,60]]],["nvidia geforce rtx 3090","3090",0,[[2560,1440,60],[3840,2160,474]]],["nvidia geforce rtx t10-16","10",0,[[2560,1600,3]]],["nvidia geforce rtx t10-8","10",0,[[2560,1600,3]]],["nvidia gf100 board - 10220000","100",0,[[1920,1200,60]]],["nvidia gf117","117",0,[[1920,1080,32]]],["nvidia gigabyte geforce gt 440","440",0,[[1280,1024,34]]],["nvidia gigabyte geforce gt 610","610",0,[[1920,1080,17]]],["nvidia gigabyte geforce gt 630","630",0,[[1920,1080,34]]],["nvidia gigabyte geforce gt 730","730",0,[[1280,1024,38]]],["nvidia gigabyte geforce gts 450","450",0,[[1280,1024,37]]],["nvidia gigabyte geforce gtx 1050 ti","1050",0,[[1920,1080,30]]],["nvidia gigabyte geforce gtx 460","460",0,[[1680,1050,60]]],["nvidia gigabyte geforce gtx 550 ti","550",0,[[1920,1080,57]]],["nvidia gigabyte geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 570 hd","570",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 580","580",0,[[1920,1200,60]]],["nvidia gigabyte geforce gtx 650","650",0,[[1680,1050,55]]],["nvidia gigabyte geforce gtx 650 ti","650",0,[[2560,1440,40]]],["nvidia gigabyte geforce gtx 660","660",0,[[1920,1080,31]]],["nvidia gigabyte geforce gtx 660 ti","660",0,[[5120,2880,29]]],["nvidia gigabyte geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 750","750",0,[[1920,1080,59]]],["nvidia gigabyte geforce gtx 750 ti","750",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 760","760",0,[[3440,1440,17]]],["nvidia gigabyte geforce gtx 770","770",0,[[2560,1440,59]]],["nvidia gigabyte geforce gtx 780 ti","780",0,[[1920,1080,240]]],["nvidia gigabyte geforce gtx 960","960",0,[[1920,1080,142],[1920,1200,120]]],["nvidia gigabyte geforce gtx 970","970",0,[[1920,1080,60]]],["nvidia gigabyte geforce gtx 980","980",0,[[2560,1440,60]]],["nvidia gigabyte geforce gtx 980 ti","980",0,[[1920,1080,60]]],["nvidia gk104 board - 2051b502","104",0,[[2560,1440,60]]],["nvidia gk104 board - 20530501","104",0,[[2560,1440,60]]],["nvidia gk104gl [grid k2]","104",0,[[2560,1343,21]]],["nvidia gk104gl [grid k520]","104",0,[[1024,768,120]]],["nvidia gp102 [titan x]","102",0,[[3440,1440,462]]],["nvidia gp102 [titan xp]","102",0,[[1920,1080,126]]],["nvidia gp104","104",0,[[1920,1080,60]]],["nvidia gp104gl","104",0,[[2560,1343,36]]],["nvidia gp108","108",0,[[1920,1080,60]]],["nvidia graphics device","",0,[[1920,1080,60],[1920,1200,60],[3840,2160,60]]],["nvidia grid gtx p40-6","40",0,[[1440,900,153]]],["nvidia grid k1","1",0,[[1245,768,6],[1920,1080,35]]],["nvidia grid k140q vgpu","140",0,[[1920,1080,30]]],["nvidia grid k160q","160",0,[[1920,1080,34]]],["nvidia grid k180q","180",0,[[1920,1080,28]]],["nvidia grid k2","2",0,[[1245,768,6],[1920,1080,59]]],["nvidia grid k220q","220",0,[[1920,1200,34]]],["nvidia grid k240q","240",0,[[1920,1080,64]]],["nvidia grid k260q","260",0,[[2560,1440,31]]],["nvidia grid k280q","280",0,[[1920,1080,64]]],["nvidia grid k520","520",0,[[1280,720,60]]],["nvidia grid m10-1b","10",0,[[1024,768,49]]],["nvidia grid m10-2q","10",0,[[2560,1440,15]]],["nvidia grid m6-0b","6",0,[[1680,1050,33]]],["nvidia grid m60-1b","60",0,[[1680,1050,46],[1920,1080,46]]],["nvidia grid m60-1q","60",0,[[1536,864,60]]],["nvidia grid m60-2q","60",0,[[1920,1080,57]]],["nvidia grid m60-4q","60",0,[[1920,1080,59]]],["nvidia grid m60-8q","60",0,[[1920,1080,60]]],["nvidia grid p100-4q","100",0,[[2560,1440,16]]],["nvidia grid p4-4q","4",0,[[1892,932,247]]],["nvidia grid p40-4q","40",0,[[2741,1495,60]]],["nvidia grid p40-8q","40",0,[[1920,1080,60]]],["nvidia grid rtx6000-2q","6000",0,[[1024,768,60]]],["nvidia grid rtx6000p-6","6000",0,[[1280,1024,161]]],["nvidia grid t4-16q","4",0,[[1920,1080,61]]],["nvidia grid t4-1b","4",0,[[1920,1080,46]]],["nvidia grid t4-1q","4",0,[[1280,1024,48]]],["nvidia grid t4-2b4","4",0,[[1536,864,47]]],["nvidia grid t4-2q","4",0,[[1920,1080,65]]],["nvidia grid t4-8q","4",0,[[2560,1080,60]]],["nvidia grid v100-1q","100",0,[[1646,1154,59]]],["nvidia grid v100-2b","100",0,[[1440,900,45]]],["nvidia grid v100dx-16q","100",0,[[1280,1024,60]]],["nvidia grid v100dx-1q","100",0,[[1280,1024,60]]],["nvidia gtx 1060 hl","1060",0,[[3840,2160,60]]],["nvidia gtx 865m by imacgfx","865",0,[[2560,1440,60]]],["nvidia gtx 980m sli","980",0,[[1366,768,29]]],["nvidia gv-n660oc-2gd","660",0,[[1920,1200,60]]],["nvidia gv100","100",0,[[3840,2160,60]]],["nvidia gv100 [titan v]","100",0,[[2560,1440,60]]],["nvidia gv102","102",0,[[2560,1600,525]]],["nvidia hp geforce gt 730","730",0,[[1920,1080,55]]],["nvidia hp quadro 2000","2000",0,[[2560,1080,38]]],["nvidia hp quadro 4000","4000",0,[[2560,1080,52]]],["nvidia hp quadro 600","600",0,[[1360,768,41]]],["nvidia hp quadro k4000","4000",0,[[1920,1200,26]]],["nvidia hp quadro k620","620",0,[[1600,1200,94]]],["nvidia inno3d geforce gtx660","3",0,[[2560,1440,107]]],["nvidia microsoft virtual render driver","",0,[[1920,1080,59]]],["nvidia msi geforce gt 610","610",0,[[1920,1080,16]]],["nvidia msi geforce gt 630","630",0,[[1440,900,12]]],["nvidia msi geforce gt 635","635",0,[[1920,1080,30]]],["nvidia msi geforce gt 710","710",0,[[1920,1080,27]]],["nvidia msi geforce gt 730","730",0,[[1920,1080,53]]],["nvidia msi geforce gtx 1050 ti","1050",0,[[1920,1080,59]]],["nvidia msi geforce gtx 1060","1060",0,[[1920,1080,120]]],["nvidia msi geforce gtx 1070","1070",0,[[1920,1200,45]]],["nvidia msi geforce gtx 460","460",0,[[1920,1080,60]]],["nvidia msi geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia msi geforce gtx 570 hd","570",0,[[1920,1200,60]]],["nvidia msi geforce gtx 580","580",0,[[2560,1440,60]]],["nvidia msi geforce gtx 650","650",0,[[2560,1080,52]]],["nvidia msi geforce gtx 650 ti","650",0,[[1920,1080,60]]],["nvidia msi geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia msi geforce gtx 660 ti","660",0,[[1680,1050,49]]],["nvidia msi geforce gtx 670","670",0,[[1920,1080,60]]],["nvidia msi geforce gtx 745","745",0,[[1920,1080,55]]],["nvidia msi geforce gtx 760","760",0,[[1280,1024,30],[1920,1080,58]]],["nvidia msi geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia msi geforce gtx 950","950",0,[[1920,1080,59]]],["nvidia msi geforce gtx 960","960",0,[[1680,1050,120],[2560,1440,59]]],["nvidia msi geforce gtx 970","970",0,[[1680,1050,60]]],["nvidia msi geforce gtx 980","980",0,[[1920,1080,120],[3840,2160,60]]],["nvidia msi geforce gtx 980 ti","980",0,[[5120,2880,56]]],["nvidia n15e-gt","15",0,[[3840,2160,30]]],["nvidia null geforce 920a","920",0,[[1920,1080,25]]],["nvidia null graphics device","",0,[[1920,1080,24]]],["nvidia nvs 310","310",0,[[1280,1024,24],[1920,1080,15]]],["nvidia nvs 3100m","3100",0,[[1920,1080,10]]],["nvidia nvs 315","315",0,[[1280,1024,25],[1920,1080,15]]],["nvidia nvs 4200m","4200",0,[[1920,1080,11]]],["nvidia nvs 510","510",0,[[1920,1200,27],[2560,1080,24],[3440,1440,16]]],["nvidia nvs 5200m","5200",0,[[1366,768,55],[1600,900,33],[1920,1080,57]]],["nvidia nvs 5400m","5400",0,[[1600,900,46],[1920,1200,27]]],["nvidia p102-100","102",0,[[1600,1200,35]]],["nvidia p106-090","106",0,[[1920,1371,16]]],["nvidia p106-100","106",0,[[1920,1080,60],[3840,2160,30]]],["nvidia p106-100 custom","106",0,[[1680,1050,60]]],["nvidia palit geforce gtx 650","650",0,[[1920,1080,49]]],["nvidia palit geforce gtx 650 ti","650",0,[[1920,1080,59]]],["nvidia palit geforce gtx 660","660",0,[[1920,1080,26]]],["nvidia palit gtx 680 jetstream","680",0,[[1920,1080,60]]],["nvidia pegatron geforce gt 420","420",0,[[1400,1050,25]]],["nvidia pny geforce gt 610","610",0,[[1280,1024,19]]],["nvidia pny geforce gtx 1060","1060",0,[[1920,1080,60]]],["nvidia pny geforce gtx 460","460",0,[[1360,768,59]]],["nvidia pny geforce gtx 550 ti","550",0,[[1920,1080,55]]],["nvidia pny geforce gtx 570 hd","570",0,[[1280,1024,72]]],["nvidia pny geforce gtx 580","580",0,[[1920,1200,59]]],["nvidia pny geforce gtx 680","680",0,[[2560,1080,120]]],["nvidia pny geforce gtx 750","750",0,[[1280,1024,60]]],["nvidia pny geforce gtx 970","970",0,[[2560,1440,60]]],["nvidia pny geforce gtx 980","980",0,[[1920,1080,120]]],["nvidia point of view geforce gtx 470","470",0,[[1920,1080,59]]],["nvidia point of view geforce gtx 660 ti","660",0,[[1680,1050,59]]],["nvidia quadro 1000m","1000",0,[[1920,1080,28]]],["nvidia quadro 1000m,","1000",0,[[1920,1080,27]]],["nvidia quadro 2000","2000",0,[[1920,1080,51],[2560,1440,28]]],["nvidia quadro 2000d","2000",0,[[1280,1024,56]]],["nvidia quadro 2000m","2000",0,[[1920,1080,31]]],["nvidia quadro 3000m","3000",0,[[1920,1080,53],[2560,1440,6]]],["nvidia quadro 3000m opengl engine","3000",0,[[1920,1080,49]]],["nvidia quadro 4000","4000",0,[[1920,1080,56],[1920,1200,58]]],["nvidia quadro 4000m","4000",0,[[1920,1080,51]]],["nvidia quadro 410","410",0,[[1920,1080,23]]],["nvidia quadro 5000","5000",0,[[1920,1080,60],[2560,1080,55],[2560,1440,51]]],["nvidia quadro 5000 opengl engine","5000",0,[[1920,1200,59]]],["nvidia quadro 5000m","5000",0,[[1600,900,110]]],["nvidia quadro 600","600",0,[[1680,1050,28],[1920,1080,28],[1920,1200,26]]],["nvidia quadro 6000","6000",0,[[1920,1080,60],[1920,1200,60]]],["nvidia quadro 7000","7000",0,[[1920,1200,60]]],["nvidia quadro fx 1800m","1800",0,[[1600,900,15]]],["nvidia quadro fx 2800m","2800",0,[[1920,1200,36]]],["nvidia quadro fx grid k1","1",0,[[1920,1080,31]]],["nvidia quadro gp100","100",0,[[1920,1200,366]]],["nvidia quadro gv100","100",0,[[3840,2160,60],[4096,2160,60]]],["nvidia quadro k1000m","1000",0,[[1920,1080,28]]],["nvidia quadro k1000m by nick[d]vb","1000",0,[[1920,1080,36]]],["nvidia quadro k1100m","1100",0,[[1920,1080,56]]],["nvidia quadro k1100m by nick[d]vb","1100",0,[[1920,1080,66]]],["nvidia quadro k1100m opengl engine","1100",0,[[1920,1080,54]]],["nvidia quadro k1200","1200",0,[[1920,1080,60],[2560,1440,57],[3840,2160,28]]],["nvidia quadro k1200 opengl engine","1200",0,[[3840,2160,34]]],["nvidia quadro k2000","2000",0,[[1920,1080,55]]],["nvidia quadro k2000 opengl engine","2000",0,[[2560,1440,44]]],["nvidia quadro k2000d","2000",0,[[1280,1024,57],[1680,1050,57],[1920,1080,59]]],["nvidia quadro k2000m","2000",0,[[1920,1080,36]]],["nvidia quadro k2000m by nick[d]vb","2000",0,[[2560,1440,38]]],["nvidia quadro k2000m opengl engine","2000",0,[[1920,1080,43]]],["nvidia quadro k2100m","2100",0,[[1920,1080,58]]],["nvidia quadro k2100m by nick[d]vb","2100",0,[[2560,1440,54]]],["nvidia quadro k2100m opengl engine","2100",0,[[1920,1080,59]]],["nvidia quadro k2200","2200",0,[[1920,1080,60],[1920,1200,126],[5120,2880,25]]],["nvidia quadro k2200m","2200",0,[[1920,1080,60]]],["nvidia quadro k3000m","3000",0,[[1920,1080,59]]],["nvidia quadro k3000m by st3phl3","3000",0,[[2560,1440,50]]],["nvidia quadro k3100m","3100",0,[[1920,1080,60]]],["nvidia quadro k3100m by nikey22","3100",0,[[2560,1440,59]]],["nvidia quadro k3100m opengl engine","3100",0,[[2560,1440,58]]],["nvidia quadro k4000","4000",0,[[1920,1080,60],[1920,1200,59]]],["nvidia quadro k4000 opengl engine","4000",0,[[1920,1080,59]]],["nvidia quadro k4000m","4000",0,[[1920,1080,80]]],["nvidia quadro k4100m","4100",0,[[1920,1080,32]]],["nvidia quadro k4100m by nikey22","4100",0,[[2560,1440,60]]],["nvidia quadro k420","420",0,[[1366,768,57],[2560,1440,19],[3840,2160,10]]],["nvidia quadro k4200","4200",0,[[1920,1080,60],[2560,1440,59],[3840,2160,57]]],["nvidia quadro k5000","5000",0,[[1920,1080,60],[2560,1440,60]]],["nvidia quadro k5000 opengl engine","5000",0,[[2560,1600,59]]],["nvidia quadro k5000m","5000",0,[[1920,1080,60],[2560,1440,60]]],["nvidia quadro k5000m opengl engine","5000",0,[[2560,1440,60]]],["nvidia quadro k5100m","5100",0,[[1920,1080,60],[2560,1080,171]]],["nvidia quadro k5100m by nikey22","5100",0,[[2560,1440,60]]],["nvidia quadro k510m","510",0,[[1920,1080,33]]],["nvidia quadro k5200","5200",0,[[1920,1080,60],[1920,1200,60]]],["nvidia quadro k5200 opengl engine","5200",0,[[1920,1200,41]]],["nvidia quadro k600","600",0,[[1920,1080,28]]],["nvidia quadro k600 opengl engine","600",0,[[1920,1200,31]]],["nvidia quadro k6000","6000",0,[[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["nvidia quadro k6000 opengl engine","6000",0,[[1920,1080,59]]],["nvidia quadro k610m","610",0,[[1920,1080,36]]],["nvidia quadro k610m by nick[d]vb","610",0,[[1920,1080,34]]],["nvidia quadro k620","620",0,[[1920,1080,87],[1920,1200,69],[2560,1440,44]]],["nvidia quadro k620 opengl engine","620",0,[[1920,1080,59]]],["nvidia quadro k620m","620",0,[[1920,1080,49],[2880,1620,15]]],["nvidia quadro m1000m","1000",0,[[1920,1080,60]]],["nvidia quadro m1200","1200",0,[[1920,1080,60],[3840,2160,43]]],["nvidia quadro m2000","2000",0,[[1920,1080,73],[2560,1440,59]]],["nvidia quadro m2000m","2000",0,[[1920,1080,60]]],["nvidia quadro m2000m special","2000",0,[[1920,1080,60]]],["nvidia quadro m2200","2200",0,[[1920,1080,60]]],["nvidia quadro m2200 mobile","2200",0,[[3840,2160,13]]],["nvidia quadro m3000m","3000",0,[[1920,1080,60]]],["nvidia quadro m4000","4000",0,[[1920,1080,120],[1920,1200,60],[2560,1440,60]]],["nvidia quadro m4000 opengl engine","4000",0,[[1920,1080,60]]],["nvidia quadro m4000m","4000",0,[[1920,1080,60],[3840,2160,69]]],["nvidia quadro m5000","5000",0,[[1920,1080,60],[1920,1200,60],[2560,1440,59]]],["nvidia quadro m5000m","5000",0,[[1920,1080,212],[3840,2160,60]]],["nvidia quadro m500m","500",0,[[1920,1080,58],[2880,1620,29]]],["nvidia quadro m520","520",0,[[1920,1080,59],[3840,2160,27]]],["nvidia quadro m5500","5500",0,[[3440,1440,60]]],["nvidia quadro m6000","6000",0,[[1920,1080,408],[2560,1440,60]]],["nvidia quadro m6000 24gb","6000",0,[[1680,1050,60],[1920,1200,60]]],["nvidia quadro m600m","600",0,[[1920,1080,59]]],["nvidia quadro m620","620",0,[[1920,1080,60]]],["nvidia quadro nvs 4200m","4200",0,[[1600,900,26],[1920,1080,19]]],["nvidia quadro p1000","1000",0,[[1920,1080,60],[1920,1200,60]]],["nvidia quadro p1000 mobile","1000",0,[[1920,1080,60]]],["nvidia quadro p2000","2000",0,[[1680,1050,60],[1920,1080,242],[2560,1440,60]]],["nvidia quadro p2000 mobile","2000",0,[[1920,1080,60]]],["nvidia quadro p2000 opengl engine","2000",0,[[1920,1080,59]]],["nvidia quadro p2000 with max-q design","2000",0,[[1920,1080,60],[3840,2160,67]]],["nvidia quadro p2200","2200",0,[[1920,1080,60],[3840,2160,340]]],["nvidia quadro p3000","3000",0,[[1920,1080,60]]],["nvidia quadro p3200","3200",0,[[1920,1080,60],[3840,2160,60]]],["nvidia quadro p3200 mobile","3200",0,[[3840,2160,60]]],["nvidia quadro p3200 with max-q design","3200",0,[[2560,1440,60]]],["nvidia quadro p400","400",0,[[1680,1050,46],[1920,1080,57],[1920,1200,54]]],["nvidia quadro p4000","4000",0,[[1920,1080,60],[3840,2160,167]]],["nvidia quadro p4200","4200",0,[[1920,1080,60],[3840,2160,60]]],["nvidia quadro p4200 with max-q design","4200",0,[[3839,2159,53]]],["nvidia quadro p500","500",0,[[1920,1080,60]]],["nvidia quadro p5000","5000",0,[[1920,1080,60]]],["nvidia quadro p5000 opengl engine","5000",0,[[3840,2160,58]]],["nvidia quadro p520","520",0,[[1920,1080,60]]],["nvidia quadro p5200","5200",0,[[3840,2160,100]]],["nvidia quadro p600","600",0,[[1920,1080,60]]],["nvidia quadro p6000","6000",0,[[1920,1080,60],[2560,1440,60],[2560,1600,411]]],["nvidia quadro p620","620",0,[[1920,1080,65]]],["nvidia quadro rtx 3000","3000",0,[[1920,1080,60]]],["nvidia quadro rtx 3000 mobile / max-q","3000",0,[[3840,2160,60]]],["nvidia quadro rtx 3000 with max-q design","3000",0,[[3240,2160,60]]],["nvidia quadro rtx 4000","4000",0,[[1920,1080,60]]],["nvidia quadro rtx 4000 mobile / max-q","4000",0,[[1920,1080,60]]],["nvidia quadro rtx 4000 with max-q design","4000",0,[[1920,1080,60],[3840,2160,60]]],["nvidia quadro rtx 5000","5000",0,[[1920,1080,443],[2560,1440,60]]],["nvidia quadro rtx 5000 mobile / max-q","5000",0,[[3840,2160,60]]],["nvidia quadro rtx 5000 with max-q design","5000",0,[[1920,1080,60],[3840,2160,60]]],["nvidia quadro rtx 6000","6000",0,[[1920,1080,438],[2560,1440,60]]],["nvidia quadro rtx 8000","8000",0,[[1920,1080,60],[1920,1200,60]]],["nvidia quadro t1000","1000",0,[[1920,1080,60],[2560,1440,41]]],["nvidia quadro t1000 mobile","1000",0,[[1920,1080,277]]],["nvidia quadro t1000 with max-q design","1000",0,[[1920,1080,60]]],["nvidia quadro t2000","2000",0,[[1920,1080,60]]],["nvidia quadro t2000 mobile / max-q","2000",0,[[1920,1080,302]]],["nvidia quadro t2000 with max-q design","2000",0,[[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["nvidia rtx a1000 laptop gpu","1000",0,[[1920,1080,60]]],["nvidia rtx a2000","2000",0,[[3840,2160,60]]],["nvidia rtx a2000 laptop gpu","2000",0,[[2400,1600,120],[3840,2160,60]]],["nvidia rtx a3000 laptop gpu","3000",0,[[1920,1080,60],[3840,2160,60]]],["nvidia rtx a4000","4000",0,[[1920,1080,60],[3840,2160,60]]],["nvidia rtx a4000 laptop gpu","4000",0,[[1920,1080,60]]],["nvidia rtx a5000","5000",0,[[3840,2160,60]]],["nvidia rtx a5000 laptop gpu","5000",0,[[3840,2160,60]]],["nvidia rtx a6000","6000",0,[[1920,1200,60]]],["nvidia sony geforce 410m","410",0,[[1366,768,24]]],["nvidia t1000","1000",0,[[1920,1080,43],[3840,2160,60]]],["nvidia t1200 laptop gpu","1200",0,[[1920,1080,60]]],["nvidia t400","400",0,[[3840,2160,35]]],["nvidia t500","500",0,[[1920,1080,60],[3839,2159,52]]],["nvidia t600","600",0,[[1920,1080,60]]],["nvidia tesla c2050 / c2070","2050",0,[[1920,1080,105]]],["nvidia tesla c2070","2070",0,[[1920,1200,60]]],["nvidia tesla c2075","2075",0,[[1920,1080,60]]],["nvidia tesla k10","10",0,[[1920,1080,60]]],["nvidia tesla k10.g1.8gb","10",0,[[1440,900,59]]],["nvidia tesla k20m","20",0,[[1240,821,118]]],["nvidia tesla k20xm","20",0,[[3840,2400,17]]],["nvidia tesla k80","80",0,[[1664,896,66],[3840,2160,30]]],["nvidia tesla m10","10",0,[[1440,900,60],[1280,1024,60]]],["nvidia tesla m40","40",0,[[1600,1024,190]]],["nvidia tesla m6","6",0,[[1920,1080,59]]],["nvidia tesla m60","60",0,[[1366,768,60],[1920,962,61],[3840,2160,27]]],["nvidia tesla p100 pcie 16gb","100",0,[[1920,1080,60]]],["nvidia tesla p100-pcie-16gb","100",0,[[1920,1080,103]]],["nvidia tesla p4","4",0,[[1680,1050,60]]],["nvidia tesla p40","40",0,[[1546,877,62],[1920,1200,60]]],["nvidia tesla t4","4",0,[[1440,900,33],[1920,1080,60]]],["nvidia tesla v100-pcie-16gb","100",0,[[1920,997,57]]],["nvidia tesla v100-pcie-32gb","100",0,[[1920,1080,57]]],["nvidia tesla v100-sxm2-16gb","100",0,[[1920,1080,60]]],["nvidia tesla v100-sxm2-32gb","100",0,[[1920,1080,1],[2560,1440,60]]],["nvidia titan rtx","rtx",0,[[2560,1440,60],[3840,2160,680]]],["nvidia titan v","v",0,[[2560,1440,622],[3840,2160,60]]],["nvidia titan x","x",0,[[2560,1080,60],[3840,1600,75],[3840,2160,339]]],["nvidia titan xp","xp",0,[[1920,1200,60],[2560,1440,60],[3440,1440,105]]],["nvidia titan xp collectors","xp",0,[[1920,1080,60],[2560,1440,893],[5120,2880,60]]],["nvidia toshiba geforce gt 525m","525",0,[[1366,768,33]]],["nvidia tu102 [titan rtx]","102",0,[[3840,2160,60]]],["nvidia tu107","107",0,[[1920,1080,312]]],["nvidia tu117m","117",0,[[1920,1080,337]]],["nvidia unknown","",0,[[1920,1080,60]]],["nvidia zotac geforce gt 430","430",0,[[1600,900,32]]],["nvidia zotac geforce gt 610","610",0,[[1920,1080,15]]],["nvidia zotac geforce gt 630","630",0,[[1360,768,46]]],["nvidia zotac geforce gt 740","740",0,[[1280,1024,118]]],["nvidia zotac geforce gtx 460","460",0,[[1920,1080,59]]],["nvidia zotac geforce gtx 550 ti","550",0,[[1920,1080,42]]],["nvidia zotac geforce gtx 560","560",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 560 ti","560",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 580","580",0,[[1920,1080,48]]],["nvidia zotac geforce gtx 650","650",0,[[1920,1080,44]]],["nvidia zotac geforce gtx 650 ti","650",0,[[1920,1080,58]]],["nvidia zotac geforce gtx 660","660",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 680","680",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 750","750",0,[[1680,1050,114],[1920,1080,60]]],["nvidia zotac geforce gtx 760","760",0,[[1920,1080,101]]],["nvidia zotac geforce gtx 770","770",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 780","780",0,[[1920,1080,60]]],["nvidia zotac geforce gtx 960","960",0,[[2048,1152,60]]]]\')},145:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["amd [amd/ati] fiji [radeon r9 fury / nano series]","9",0,[[1920,1200,162]]],["amd asus amd radeon r9-990x","9",0,[[1920,1080,60]]],["amd asus radeon r7 250","7",0,[[800,638,60]]],["amd asus radeon r7 260x","7",0,[[2560,1080,65]]],["amd asus radeon r9 270x","9",0,[[1024,768,85],[1920,1080,60]]],["amd asus radeon r9 280","9",0,[[1920,1080,60]]],["amd asus radeon rx 460","460",0,[[1360,768,104]]],["amd asus radeon rx 470","470",0,[[1920,1080,60]]],["amd asus radeon rx 480","480",0,[[1920,1080,124]]],["amd asus radeon rx 550","550",0,[[1440,900,60],[1920,1080,49]]],["amd asus radeon rx 5500 xt","5500",0,[[1920,1080,325]]],["amd asus radeon rx 560","560",0,[[1360,768,60],[1920,1080,85]]],["amd asus radeon rx 570","570",0,[[1600,900,202],[1920,1080,60]]],["amd asus radeon rx 5700","5700",0,[[1920,1080,327]]],["amd asus radeon rx 5700 xt","5700",0,[[1920,1080,224],[2560,1440,60]]],["amd asus radeon rx 580","580",0,[[1920,1080,177],[2560,1080,60]]],["amd asus radeon rx vega","rx",0,[[2560,1440,117]]],["amd ati mobility radeon hd 5870","5870",0,[[1920,1200,19]]],["amd baffin amd radeon rx 560","560",0,[[1920,1080,60]]],["amd ellesmere radeon rx 570","570",0,[[1920,1080,60]]],["amd embedded radeon e9171","9171",0,[[3840,2160,26]]],["amd embedded radeon e9173","9173",0,[[3840,2160,16]]],["amd gigabyte radeon rx 580","580",0,[[1920,1080,60]]],["amd madison [mobility radeon hd 5650 / 6530m/6550m]","5650",0,[[1366,768,43]]],["amd mobility radeon hd 4250","4250",0,[[963,722,26]]],["amd mobility radeon hd 5000","5000",0,[[1366,768,47]]],["amd mobility radeon hd 5400","5400",0,[[1366,768,24]]],["amd mobility radeon hd 5430","5430",0,[[1600,900,15],[1920,1080,60]]],["amd mobility radeon hd 5470","5470",0,[[1366,768,24]]],["amd mobility radeon hd 5570","5570",0,[[1920,1080,27]]],["amd mobility radeon hd 5730 / 6570m","5730",0,[[1366,768,58]]],["amd mobility radeon hd 5850","5850",0,[[1600,900,55]]],["amd mobility radeon hd 5870","5870",0,[[1600,900,64],[1920,1200,53]]],["amd park [mobility radeon hd 5430","5430",0,[[1280,720,11]]],["amd pitcairn pro radeon hd 7850","7850",0,[[1920,1080,60]]],["amd powercolor radeon r9 280","9",0,[[1920,1080,60]]],["amd radeon","",0,[[1920,1080,299],[3440,1440,60]]],["amd radeon 500","500",0,[[1920,1080,73]]],["amd radeon 520","520",0,[[1920,1080,35],[2560,1440,29]]],["amd radeon 530","530",0,[[1366,768,60],[1920,1080,30]]],["amd radeon 535","535",0,[[1920,1080,35]]],["amd radeon 535dx","535",0,[[1366,768,31],[1920,1080,37]]],["amd radeon 540","540",0,[[1920,1080,38]]],["amd radeon 540 / rx 540x/550/550x","540",0,[[2560,1440,88]]],["amd radeon 540x","540",0,[[1920,1080,59]]],["amd radeon 550","550",0,[[1920,1080,115]]],["amd radeon 550x","550",0,[[1920,1080,28]]],["amd radeon 610","610",0,[[1920,1080,29]]],["amd radeon 620","620",0,[[1920,1080,18]]],["amd radeon 625","625",0,[[1366,768,55],[1920,1080,47]]],["amd radeon 630","630",0,[[1920,1080,29]]],["amd radeon 6600m and 6700m","6600",0,[[1366,768,36],[1440,900,60]]],["amd radeon 6800","6800",0,[[3440,1440,100]]],["amd radeon 7500m/7600m","7500",0,[[1366,768,37]]],["amd radeon 7950 x2","7950",0,[[2560,1440,174]]],["amd radeon d700","700",0,[[2560,1440,120]]],["amd radeon e6460","6460",0,[[1600,1200,13]]],["amd radeon e6760","6760",0,[[1200,900,54],[1920,1080,42]]],["amd radeon e8860","8860",0,[[1920,1200,27],[2560,1374,88]]],["amd radeon e8870","8870",0,[[1920,1080,81]]],["amd radeon e8870mxm","8870",0,[[1920,1080,60]]],["amd radeon e9260","9260",0,[[1680,1050,60],[3840,2160,38]]],["amd radeon e9550","9550",0,[[1680,1050,60],[3840,2160,58]]],["amd radeon embedded e9560","9560",0,[[1920,1200,60]]],["amd radeon fury","",0,[[1920,1080,60]]],["amd radeon fury x","x",0,[[1920,1080,60],[2560,1440,144]]],["amd radeon hd - firepro d300","300",0,[[1920,1080,60]]],["amd radeon hd - firepro d300 opengl engine","300",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd - firepro d500 opengl engine","500",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd - firepro d700 opengl engine","700",0,[[3840,2160,52]]],["amd radeon hd 2600 xt","2600",1,[[2560,1600,-1]]],["amd radeon hd 5000","5000",0,[[1920,1080,8]]],["amd radeon hd 5400","5400",0,[[1920,1080,12]]],["amd radeon hd 5450","5450",0,[[1920,1080,13]]],["amd radeon hd 5470","5470",0,[[1280,1024,16]]],["amd radeon hd 5500","5500",0,[[1920,1080,27]]],["amd radeon hd 5570","5570",0,[[1920,1080,60],[2048,1152,31]]],["amd radeon hd 5600","5600",0,[[1920,1080,56]]],["amd radeon hd 5650","5650",0,[[1366,768,53]]],["amd radeon hd 5670","5670",1,[[1920,1080,-1],[2560,1440,-1]]],["amd radeon hd 5670 opengl engine","5670",1,[[2560,1440,-1]]],["amd radeon hd 5700","5700",0,[[1920,1080,59]]],["amd radeon hd 5730","5730",0,[[1366,768,46],[1680,1050,40]]],["amd radeon hd 5750","5750",1,[[1920,1080,-1],[1920,1200,-1],[2560,1440,-1]]],["amd radeon hd 5750 opengl engine","5750",1,[[2560,1440,-1]]],["amd radeon hd 5770","5770",0,[[1776,1000,43],[1920,1080,59]]],["amd radeon hd 5800","5800",0,[[1366,768,60],[1920,1200,102]]],["amd radeon hd 5850","5850",0,[[1920,1080,60]]],["amd radeon hd 5870","5870",0,[[1280,960,75],[1920,1080,60],[2048,1280,60]]],["amd radeon hd 5870m","5870",0,[[2560,1080,31]]],["amd radeon hd 5970","5970",0,[[1360,768,60],[1920,1080,60]]],["amd radeon hd 6230","6230",0,[[1366,768,13]]],["amd radeon hd 6250","6250",0,[[1280,800,8],[1366,768,8]]],["amd radeon hd 6290","6290",1,[[1366,768,-1]]],["amd radeon hd 6300m","6300",1,[[1366,768,-1]]],["amd radeon hd 6310","6310",1,[[1366,768,-1]]],["amd radeon hd 6320","6320",1,[[1366,768,-1]]],["amd radeon hd 6350","6350",0,[[1280,1024,18],[1920,1080,14]]],["amd radeon hd 6370d","6370",0,[[1920,1080,14]]],["amd radeon hd 6370m","6370",0,[[1366,768,25]]],["amd radeon hd 6380g","6380",0,[[1366,768,19]]],["amd radeon hd 6400","6400",0,[[1920,1080,13]]],["amd radeon hd 6400m","6400",0,[[1366,768,28]]],["amd radeon hd 6400m/7400m","6400",0,[[1366,768,28]]],["amd radeon hd 6410d","6410",0,[[1920,1080,11]]],["amd radeon hd 6450","6450",0,[[1920,1080,14]]],["amd radeon hd 6450 / r5 230","6450",0,[[1440,900,12]]],["amd radeon hd 6450 230","6450",0,[[1920,1080,15]]],["amd radeon hd 6470m","6470",0,[[1366,768,27],[1600,900,21]]],["amd radeon hd 6470m/7400m","6470",0,[[1366,768,44]]],["amd radeon hd 6480g","6480",0,[[1280,768,19],[1366,768,27],[1600,900,18]]],["amd radeon hd 6490m","6490",1,[[1366,768,-1],[1440,900,-1],[1680,1050,-1]]],["amd radeon hd 6500","6500",0,[[1920,1080,25]]],["amd radeon hd 6500m/5600","6500",0,[[1920,1080,27]]],["amd radeon hd 6510","6510",0,[[1600,900,32]]],["amd radeon hd 6520g","6520",0,[[1366,768,21],[1600,900,20]]],["amd radeon hd 6530d","6530",0,[[1366,768,31],[1440,900,36],[1920,1080,24]]],["amd radeon hd 6540","6540",0,[[1600,1200,13]]],["amd radeon hd 6550d","6550",0,[[1920,1080,28]]],["amd radeon hd 6570","6570",0,[[1920,1080,52],[2560,1440,17]]],["amd radeon hd 6620g","6620",0,[[1360,768,43],[1366,768,28]]],["amd radeon hd 6630m","6630",1,[[1366,768,-1],[1600,900,-1],[1920,1080,-1]]],["amd radeon hd 6630m/6650m/6750m/7670m/7690m","6630",1,[[1366,768,-1],[1920,1080,-1]]],["amd radeon hd 6650m","6650",0,[[1366,768,51],[1600,900,31]]],["amd radeon hd 6670","6670",0,[[1920,1080,55]]],["amd radeon hd 6700","6700",0,[[1920,1080,56]]],["amd radeon hd 6700 green","6700",0,[[1360,768,89]]],["amd radeon hd 6700m/7700m/7900m","6700",0,[[1366,768,59]]],["amd radeon hd 6730m/6770m","6730",0,[[1366,768,58],[1920,1080,46]]],["amd radeon hd 6730m/6770m/7690m xt","6730",0,[[1920,1080,48]]],["amd radeon hd 6750","6750",0,[[1440,900,72],[1920,1080,60]]],["amd radeon hd 6750m","6750",1,[[1440,900,-1],[1920,1080,-1],[1920,1200,-1]]],["amd radeon hd 6770","6770",0,[[1920,1080,60]]],["amd radeon hd 6770m","6770",1,[[1440,900,-1],[2560,1440,-1]]],["amd radeon hd 6770m opengl engine","6770",1,[[2560,1440,-1]]],["amd radeon hd 6790","6790",0,[[1920,1080,59]]],["amd radeon hd 6800","6800",0,[[1280,1024,89],[1920,1080,60]]],["amd radeon hd 6800m","6800",0,[[1600,900,18],[1920,1080,40]]],["amd radeon hd 6850","6850",0,[[1920,1080,59],[2560,1600,54]]],["amd radeon hd 6870","6870",0,[[1920,1080,60],[2560,1440,59]]],["amd radeon hd 6900","6900",0,[[1920,1080,60]]],["amd radeon hd 6900m","6900",0,[[1920,1080,60]]],["amd radeon hd 6950","6950",0,[[1680,1050,60],[1920,1080,41]]],["amd radeon hd 6970","6970",0,[[1920,1080,60]]],["amd radeon hd 6970m","6970",1,[[2560,1440,-1]]],["amd radeon hd 6970m opengl engine","6970",1,[[2560,1440,-1]]],["amd radeon hd 6990","6990",0,[[1920,1080,60]]],["amd radeon hd 7000","7000",0,[[1920,1080,24]]],["amd radeon hd 7290","7290",0,[[1366,768,9]]],["amd radeon hd 7310","7310",0,[[1366,768,14]]],["amd radeon hd 7340","7340",0,[[1366,768,17],[1920,1080,10]]],["amd radeon hd 7340g","7340",0,[[1366,768,15]]],["amd radeon hd 7340m","7340",0,[[1366,768,15]]],["amd radeon hd 7350","7350",0,[[1920,1080,13]]],["amd radeon hd 7400","7400",0,[[1920,1080,18]]],["amd radeon hd 7400g","7400",0,[[963,768,31]]],["amd radeon hd 7400m","7400",0,[[1366,768,44]]],["amd radeon hd 7420g","7420",0,[[1366,768,28],[1600,900,26]]],["amd radeon hd 7450","7450",0,[[1920,1080,15]]],["amd radeon hd 7450a","7450",0,[[1920,1080,15]]],["amd radeon hd 7450m","7450",0,[[1366,768,30]]],["amd radeon hd 7470","7470",0,[[1680,1050,22],[1920,1080,144]]],["amd radeon hd 7470m","7470",0,[[1366,768,31],[1600,900,23]]],["amd radeon hd 7480d","7480",0,[[1280,1024,25],[1920,1080,24],[1920,1200,18]]],["amd radeon hd 7500","7500",0,[[1366,696,49],[1366,768,49]]],["amd radeon hd 7500g","7500",0,[[1366,768,26]]],["amd radeon hd 7500m/7600m","7500",0,[[1366,768,46]]],["amd radeon hd 7520g","7520",0,[[1366,768,33]]],["amd radeon hd 7520g + hd 7400m dual","7520",0,[[1366,768,34]]],["amd radeon hd 7520g + hd 7600m dual","7520",0,[[1366,768,31],[1600,900,41]]],["amd radeon hd 7540d","7540",0,[[1024,768,55],[1280,1024,44],[1920,1080,22]]],["amd radeon hd 7540d + hd 6670 dual","7540",0,[[1280,1024,36]]],["amd radeon hd 7550m/7650m","7550",0,[[1366,768,57]]],["amd radeon hd 7560d","7560",0,[[1920,1080,34]]],["amd radeon hd 7560d + hd 6570 dual","7560",0,[[1680,1050,44]]],["amd radeon hd 7560d + hd 6670 dual","7560",0,[[800,638,60]]],["amd radeon hd 7570","7570",0,[[1024,768,72],[1920,1080,52]]],["amd radeon hd 7570m","7570",0,[[1366,768,35]]],["amd radeon hd 7570m/hd 7670m","7570",0,[[1366,768,50],[1600,900,29]]],["amd radeon hd 7600","7600",0,[[1920,1080,60]]],["amd radeon hd 7600a","7600",0,[[1920,1080,28]]],["amd radeon hd 7600g","7600",0,[[1366,768,29]]],["amd radeon hd 7600g + 7500m/7600m dual","7600",0,[[1366,768,19]]],["amd radeon hd 7600g + hd 8670m dual","7600",0,[[1366,768,29]]],["amd radeon hd 7600g + hd dual","7600",0,[[1366,768,20]]],["amd radeon hd 7600m","7600",0,[[1366,768,56]]],["amd radeon hd 7600m/7700m","7600",0,[[1366,768,31]]],["amd radeon hd 7610m","7610",0,[[1366,768,43]]],["amd radeon hd 7620g","7620",0,[[1366,768,22],[1920,1080,19]]],["amd radeon hd 7640g","7640",0,[[1366,768,38]]],["amd radeon hd 7640g + 7470m dual","7640",0,[[1366,768,32]]],["amd radeon hd 7640g + 7600m dual","7640",0,[[1366,768,23]]],["amd radeon hd 7640g + 7670m dual","7640",0,[[1600,900,15]]],["amd radeon hd 7640g + 8500m dual","7640",0,[[1366,768,35]]],["amd radeon hd 7640g + hd 7400m dual","7640",0,[[1366,768,37]]],["amd radeon hd 7640g + hd 7500 dual","7640",0,[[1366,768,35]]],["amd radeon hd 7640g + hd 7670m dual","7640",0,[[1366,768,34]]],["amd radeon hd 7640g + hd 8500m dual","7640",0,[[1366,768,40]]],["amd radeon hd 7640g + hd 8570m dual","7640",0,[[1366,768,31]]],["amd radeon hd 7650a","7650",0,[[1680,1050,43],[1920,1080,15]]],["amd radeon hd 7650m","7650",0,[[1366,768,41],[1600,900,45]]],["amd radeon hd 7660d","7660",0,[[1680,1050,40],[1920,1008,60],[1920,1080,38]]],["amd radeon hd 7660d + hd 6570 dual","7660",0,[[1200,900,32]]],["amd radeon hd 7660d + hd 6670 dual","7660",0,[[1360,768,57],[1920,1080,53]]],["amd radeon hd 7660g","7660",0,[[1366,768,44],[1600,900,41],[1920,1080,34],[1920,1200,27]]],["amd radeon hd 7660g + 7600m dual","7660",0,[[1366,768,53],[1600,900,45]]],["amd radeon hd 7660g + 7670m dual","7660",0,[[1366,768,52]]],["amd radeon hd 7660g + 8670m dual","7660",0,[[1600,900,46]]],["amd radeon hd 7660g + hd 7600m dual","7660",0,[[1366,768,50]]],["amd radeon hd 7660g + hd 7670m dual","7660",0,[[1366,768,35]]],["amd radeon hd 7660g + hd 8600m dual","7660",0,[[1600,900,29]]],["amd radeon hd 7670","7670",0,[[1920,1080,39]]],["amd radeon hd 7670m","7670",0,[[1366,768,49],[1920,1080,36]]],["amd radeon hd 7700","7700",0,[[1400,1050,45],[1920,1080,60]]],["amd radeon hd 7700m","7700",0,[[1920,1080,54]]],["amd radeon hd 7730m","7730",0,[[1920,1080,57]]],["amd radeon hd 7750","7750",0,[[1280,1024,60],[1600,900,60],[1400,1050,98],[1920,1080,60],[3840,2160,23]]],["amd radeon hd 7750 / r7 250e","7750",0,[[2560,1080,69]]],["amd radeon hd 7750m","7750",0,[[1680,1050,57]]],["amd radeon hd 7770","7770",0,[[1920,1080,60]]],["amd radeon hd 7770 / r7 250x","7770",0,[[1680,1050,78]]],["amd radeon hd 7770 ghz","7770",0,[[1920,1080,78]]],["amd radeon hd 7790","7790",0,[[1920,1080,16]]],["amd radeon hd 7790 / r7 360 / r9 260/360","7790",0,[[1280,1024,131]]],["amd radeon hd 7800","7800",0,[[1920,1080,60]]],["amd radeon hd 7800m","7800",0,[[1920,1080,57]]],["amd radeon hd 7850","7850",0,[[1920,1080,60]]],["amd radeon hd 7850 / r7 265 / r9 270 1024sp","7850",0,[[1280,1024,87]]],["amd radeon hd 7870","7870",0,[[1920,1080,120],[2560,1440,60],[2560,1600,114],[3840,2160,30]]],["amd radeon hd 7870 ghz","7870",0,[[1920,1080,75]]],["amd radeon hd 7870 xt","7870",0,[[1920,1080,57],[3840,2160,53]]],["amd radeon hd 7870m","7870",0,[[1920,1080,22],[2732,1536,40]]],["amd radeon hd 7900","7900",0,[[2560,1600,59]]],["amd radeon hd 7950","7950",0,[[1920,1080,50]]],["amd radeon hd 7950 / r9 280","7950",0,[[1920,1080,59]]],["amd radeon hd 7950 oem / r9 280","7950",0,[[1920,1080,60]]],["amd radeon hd 7970","7970",0,[[1920,1080,60]]],["amd radeon hd 7970 / r9 280x","7970",0,[[1920,1080,193]]],["amd radeon hd 7970m","7970",0,[[1366,768,60],[1920,1080,60]]],["amd radeon hd 7970x/8970 280x","7970",0,[[1920,1080,60]]],["amd radeon hd 7990","7990",0,[[1920,1080,60],[5120,2880,63]]],["amd radeon hd 7xxx","7",0,[[1920,1080,60]]],["amd radeon hd 8180","8180",0,[[1366,768,10]]],["amd radeon hd 8200 / r3","8200",0,[[1366,768,21],[1600,900,13],[1680,1050,13]]],["amd radeon hd 8210","8210",0,[[1366,768,18]]],["amd radeon hd 8240","8240",0,[[1600,900,17]]],["amd radeon hd 8240 / r3","8240",0,[[1366,768,14]]],["amd radeon hd 8250","8250",0,[[1366,768,14],[1920,1200,10]]],["amd radeon hd 8280","8280",0,[[1600,900,60]]],["amd radeon hd 8280 / r3","8280",0,[[1366,768,22]]],["amd radeon hd 8280e","8280",0,[[2880,1620,6]]],["amd radeon hd 8330","8330",0,[[1366,768,24]]],["amd radeon hd 8350","8350",0,[[1920,1080,57]]],["amd radeon hd 8350g","8350",0,[[1366,768,18]]],["amd radeon hd 8370d","8370",0,[[1366,768,60],[1280,1024,26],[1920,1080,22]]],["amd radeon hd 8400","8400",0,[[1366,768,30],[1920,1080,16]]],["amd radeon hd 8400 / r3","8400",0,[[1360,768,19],[1366,768,22],[1920,1080,12]]],["amd radeon hd 8400e","8400",0,[[1680,1050,17],[1920,1080,16],[1920,1200,14]]],["amd radeon hd 8410g","8410",0,[[1366,768,32]]],["amd radeon hd 8450g","8450",0,[[1366,768,23]]],["amd radeon hd 8450g + hd 8750m dual","8450",0,[[1366,768,21]]],["amd radeon hd 8470","8470",0,[[1920,1080,17]]],["amd radeon hd 8470 + 7660d dual","8470",0,[[1920,1080,60]]],["amd radeon hd 8470d","8470",0,[[1280,1024,44],[1920,1080,21]]],["amd radeon hd 8470d + hd 6450 dual","8470",0,[[1600,900,37]]],["amd radeon hd 8490","8490",0,[[1920,1080,18],[1920,1200,20]]],["amd radeon hd 8500m","8500",0,[[1366,768,41],[1920,1080,19]]],["amd radeon hd 8500m/8700m","8500",0,[[1920,1080,30]]],["amd radeon hd 8510g","8510",0,[[1366,768,29],[1920,1080,17]]],["amd radeon hd 8550","8550",0,[[1920,1080,25]]],["amd radeon hd 8550g","8550",0,[[1366,768,34],[1600,900,41],[1920,1080,34]]],["amd radeon hd 8550g + 8500m dual","8550",0,[[1366,768,42]]],["amd radeon hd 8550g + 8600 dual","8550",0,[[1920,1080,27]]],["amd radeon hd 8550g + hd 8570m dual","8550",0,[[1366,768,32]]],["amd radeon hd 8550g + hd 8600 dual","8550",0,[[1366,768,60]]],["amd radeon hd 8550g + hd 8750m dual","8550",0,[[1366,768,37]]],["amd radeon hd 8550g + r5 m230 dual","8550",0,[[1366,768,29]]],["amd radeon hd 8570","8570",0,[[1280,1024,60],[1680,1050,54],[1920,1080,50]]],["amd radeon hd 8570 / r5 430 / r7 240 / radeon 520","8570",0,[[1920,1080,25]]],["amd radeon hd 8570d","8570",0,[[1920,1080,16]]],["amd radeon hd 8570d + r7 240 dual","8570",0,[[1920,1080,45]]],["amd radeon hd 8570m","8570",0,[[1366,768,40]]],["amd radeon hd 8600","8600",0,[[1366,768,41]]],["amd radeon hd 8600m","8600",0,[[1366,768,42],[1920,1080,14]]],["amd radeon hd 8610g","8610",0,[[1366,768,31],[1920,1080,16]]],["amd radeon hd 8610g + 8600m dual","8610",0,[[1366,768,22]]],["amd radeon hd 8610g + hd 8600m dual","8610",0,[[1366,768,41]]],["amd radeon hd 8610g + hd 8670m dual","8610",0,[[1366,768,33]]],["amd radeon hd 8650g","8650",0,[[1360,768,44],[1366,768,44]]],["amd radeon hd 8650g + 8500m dual","8650",0,[[1366,768,35]]],["amd radeon hd 8650g + 8600 dual","8650",0,[[1920,1080,38]]],["amd radeon hd 8650g + 8600m dual","8650",0,[[1366,768,21]]],["amd radeon hd 8650g + 8670m dual","8650",0,[[1366,768,66]]],["amd radeon hd 8650g + 8750m dual","8650",0,[[1920,1080,28]]],["amd radeon hd 8650g + hd 7600m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + hd 8500m dual","8650",0,[[1366,768,23]]],["amd radeon hd 8650g + hd 8570m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + hd 8600m dual","8650",0,[[1366,768,46],[1600,900,29]]],["amd radeon hd 8650g + hd 8750m dual","8650",0,[[1366,768,36]]],["amd radeon hd 8650g + r5 m200 dual","8650",0,[[1366,768,35]]],["amd radeon hd 8670 / r7 250","8670",0,[[1024,768,1]]],["amd radeon hd 8670a/8670m/8690m","8670",0,[[1366,768,47]]],["amd radeon hd 8670a/8670m/8750m","8670",0,[[1366,768,60]]],["amd radeon hd 8670d","8670",0,[[1024,768,45],[1280,1024,69],[1920,1080,38]]],["amd radeon hd 8670d + 7700 dual","8670",0,[[1680,1050,58]]],["amd radeon hd 8670d + hd 6670 dual","8670",0,[[1680,1050,33]]],["amd radeon hd 8670d + r5 200 dual","8670",0,[[2560,1080,14]]],["amd radeon hd 8670d + r7 200 dual","8670",0,[[1920,1080,37]]],["amd radeon hd 8670m","8670",0,[[1366,768,41]]],["amd radeon hd 8690a","8690",0,[[1920,1080,31]]],["amd radeon hd 8690m","8690",0,[[1600,900,35]]],["amd radeon hd 8700m","8700",0,[[1366,768,60]]],["amd radeon hd 8730m","8730",0,[[1366,768,59]]],["amd radeon hd 8750m","8750",0,[[1366,768,60]]],["amd radeon hd 8770","8770",0,[[1920,1080,111]]],["amd radeon hd 8790m","8790",0,[[1600,900,78],[1920,1080,60]]],["amd radeon hd 8800m","8800",0,[[1920,1080,60],[2880,1800,45]]],["amd radeon hd 8830m","8830",0,[[1920,1080,82]]],["amd radeon hd 8850m","8850",0,[[1366,768,45]]],["amd radeon hd 8870m","8870",0,[[1280,1024,60],[1600,900,60]]],["amd radeon hd 8950","8950",0,[[1920,1080,60],[1920,1200,59]]],["amd radeon hd 8970","8970",0,[[2560,1600,60]]],["amd radeon hd 8970m","8970",0,[[1920,1080,146],[1920,1200,60]]],["amd radeon hd 8xxx","8",0,[[1920,1080,120],[2560,1440,58]]],["amd radeon hd5450","5450",0,[[1280,720,24]]],["amd radeon hd6870","6870",0,[[1920,1080,60]]],["amd radeon hd7970m","7970",0,[[2560,1440,116]]],["amd radeon hd8530m","8530",0,[[1366,768,40]]],["amd radeon hd8730","8730",0,[[1680,1050,42]]],["amd radeon hd8970m","8970",0,[[1920,1080,74]]],["amd radeon hybrid","",0,[[1366,768,27]]],["amd radeon infoshock rx 460","460",0,[[1360,768,102]]],["amd radeon instinct mi25","25",0,[[1920,1200,26]]],["amd radeon instinct mi25 mxgpu","25",0,[[1920,1080,20],[1920,1200,32]]],["amd radeon m535dx","535",0,[[1366,768,58]]],["amd radeon navi14","14",0,[[3840,2160,60]]],["amd radeon polaris","",0,[[3840,2160,60],[5120,2880,44]]],["amd radeon polaris 10","10",0,[[1920,1200,60]]],["amd radeon pro","pro",0,[[1920,1080,114]]],["amd radeon pro 270x","270",0,[[2560,1440,74]]],["amd radeon pro 450","450",0,[[1920,1080,30],[2880,1800,43],[3360,2100,36],[5120,2880,30]]],["amd radeon pro 450 opengl engine","450",0,[[1920,1200,60]]],["amd radeon pro 455","455",0,[[2879,1800,54],[2880,1800,48],[3360,2100,37]]],["amd radeon pro 455 opengl engine","455",0,[[3360,2100,36]]],["amd radeon pro 460","460",0,[[2880,1800,50],[3360,2100,42]]],["amd radeon pro 460 opengl engine","460",0,[[5760,3240,15]]],["amd radeon pro 470","470",0,[[6016,3384,49]]],["amd radeon pro 480","480",0,[[1920,1080,60]]],["amd radeon pro 5300","5300",0,[[5120,2880,60]]],["amd radeon pro 5300m","5300",0,[[1920,1080,214],[3584,2240,130]]],["amd radeon pro 5500 xt","5500",0,[[5120,2880,51]]],["amd radeon pro 5500m","5500",0,[[3072,1920,60],[3584,2240,139]]],["amd radeon pro 555","555",0,[[2879,1800,54],[2880,1800,36],[3360,2100,40]]],["amd radeon pro 555x","555",0,[[2880,1800,42],[3360,2100,39]]],["amd radeon pro 560","560",0,[[2879,1800,56],[2880,1800,56],[3360,2100,42]]],["amd radeon pro 5600m","5600",0,[[3072,1920,60],[3584,2240,60]]],["amd radeon pro 560x","560",0,[[2879,1800,59],[2880,1800,71],[3360,2100,43]]],["amd radeon pro 570","570",0,[[5120,2880,48]]],["amd radeon pro 570 opengl engine","570",0,[[5120,2880,46]]],["amd radeon pro 5700","5700",0,[[5120,2880,60]]],["amd radeon pro 5700 xt","5700",0,[[5120,2880,60]]],["amd radeon pro 570x","570",0,[[5120,2880,50]]],["amd radeon pro 575","575",0,[[4096,2304,60],[5120,2880,50]]],["amd radeon pro 575 opengl engine","575",0,[[5120,2880,48]]],["amd radeon pro 575x","575",0,[[5120,2880,56]]],["amd radeon pro 580","580",0,[[5120,2880,54]]],["amd radeon pro 580 opengl engine","580",0,[[5120,2880,50]]],["amd radeon pro 580x","580",0,[[5120,2880,52]]],["amd radeon pro duo","pro",0,[[1920,1080,234],[1800,1350,59],[3840,2160,82],[4096,2160,60]]],["amd radeon pro rx 560","560",0,[[2560,1080,60]]],["amd radeon pro ssg","pro",0,[[3440,1440,125]]],["amd radeon pro v340","340",0,[[1920,1080,112]]],["amd radeon pro v520 mxgpu","520",0,[[1920,1080,271]]],["amd radeon pro v7350x2","7350",0,[[1920,1080,60]]],["amd radeon pro vega 16","16",0,[[2879,1800,60],[3360,2100,60]]],["amd radeon pro vega 20","20",0,[[2880,1800,120],[3360,2100,121],[3840,2160,30]]],["amd radeon pro vega 48","48",0,[[5120,2880,86]]],["amd radeon pro vega 56","56",0,[[1920,1080,60],[5120,2880,60]]],["amd radeon pro vega 56 opengl engine","56",0,[[5120,2880,60]]],["amd radeon pro vega 64","64",0,[[5120,2880,60]]],["amd radeon pro vega 64 opengl engine","64",0,[[5120,2880,60]]],["amd radeon pro vega 64x","64",0,[[2560,1440,206],[4096,2304,60],[5120,2880,60]]],["amd radeon pro vega ii","proii",0,[[3840,1600,60],[5120,2880,60]]],["amd radeon pro vega ii duo","proii",0,[[2560,1440,239],[5120,2880,60]]],["amd radeon pro w5500","5500",0,[[1920,1080,195],[3840,2160,59],[7680,3240,56]]],["amd radeon pro w5500m","5500",0,[[1920,1080,60]]],["amd radeon pro w5500x","5500",0,[[1920,1200,60]]],["amd radeon pro w5700","5700",0,[[1680,1050,253],[5120,1440,120],[3840,2160,60]]],["amd radeon pro w5700x","5700",0,[[3840,2160,60]]],["amd radeon pro w6600","6600",0,[[1920,1200,60],[3840,2160,166]]],["amd radeon pro w6600m","6600",0,[[1920,1080,60]]],["amd radeon pro w6800","6800",0,[[1920,1080,60],[3840,2160,237]]],["amd radeon pro w6800x","6800",0,[[6016,3384,60]]],["amd radeon pro w6800x duo","6800",0,[[3840,1600,60],[5120,2880,45]]],["amd radeon pro w6900x","6900",0,[[3840,2160,60]]],["amd radeon pro wx","pro",0,[[2560,1080,69]]],["amd radeon pro wx 2100","2100",0,[[1280,1024,145],[1920,1080,60]]],["amd radeon pro wx 3100","3100",0,[[1919,1080,58],[1920,1080,123],[2560,1440,82]]],["amd radeon pro wx 3200","3200",0,[[2560,1440,92]]],["amd radeon pro wx 4100","4100",0,[[1920,1080,60],[1920,1200,60],[3840,2160,30],[5120,2880,18]]],["amd radeon pro wx 4130","4130",0,[[1920,1080,60],[3840,2160,30]]],["amd radeon pro wx 4150","4150",0,[[1920,1080,56],[3840,2160,37],[4096,2160,34]]],["amd radeon pro wx 5100","5100",0,[[1920,1080,60],[2560,1440,91],[3840,2160,55]]],["amd radeon pro wx 5100 opengl engine","5100",0,[[2560,1440,60]]],["amd radeon pro wx 7100","7100",0,[[1920,1080,122],[2560,1080,58],[3840,2160,60],[5120,2880,60]]],["amd radeon pro wx 7100 mobile","7100",0,[[2560,1440,60]]],["amd radeon pro wx 7100 opengl engine","7100",0,[[3840,2160,60]]],["amd radeon pro wx 8200","8200",0,[[3440,1440,124]]],["amd radeon pro wx 9100","9100",0,[[1920,1080,60],[4096,2160,101]]],["amd radeon pro wx 9100 opengl engine","9100",0,[[1920,1080,60]]],["amd radeon pro wx vega m gl","prom",0,[[3840,2160,14]]],["amd radeon pro wx3200","3200",0,[[1920,1080,55]]],["amd radeon pro wx9100","9100",0,[[2560,1440,60]]],["amd radeon r2","2",0,[[1366,768,13],[1600,900,14]]],["amd radeon r2e","2",0,[[1366,768,16],[1920,1080,45],[3840,2160,4]]],["amd radeon r3","3",0,[[1366,768,17],[1920,1080,15]]],["amd radeon r4","4",0,[[1366,768,19],[1920,1080,13]]],["amd radeon r4e","4",0,[[3840,2160,6]]],["amd radeon r5","5",0,[[1024,768,38],[1360,768,25],[1366,768,21],[1280,1024,33],[1920,1080,14],[3200,1800,7]]],["amd radeon r5 220","5",0,[[1366,768,19],[1920,1080,12]]],["amd radeon r5 230","5",0,[[1920,1080,21]]],["amd radeon r5 235","5",0,[[1920,1080,17]]],["amd radeon r5 240","5",0,[[1280,1024,34],[1920,1080,24]]],["amd radeon r5 340","5",0,[[1920,1080,27]]],["amd radeon r5 340x","5",0,[[1920,1080,31]]],["amd radeon r5 430","5",0,[[1280,1024,31],[1680,1050,54],[1920,1080,54]]],["amd radeon r5 435","5",0,[[1920,1080,30]]],["amd radeon r5 m200","5",0,[[1600,900,45],[1920,1080,20]]],["amd radeon r5 m200 / hd 8500m","5",0,[[1366,768,31],[1920,1080,24]]],["amd radeon r5 m230","5",0,[[1366,768,37]]],["amd radeon r5 m240","5",0,[[1366,768,42],[1920,1080,23]]],["amd radeon r5 m255","5",0,[[1366,768,59],[1600,900,33]]],["amd radeon r5 m315","5",0,[[1366,768,45]]],["amd radeon r5 m320","5",0,[[1920,1080,19]]],["amd radeon r5 m330","5",0,[[1366,768,27],[1920,1080,26]]],["amd radeon r5 m335","5",0,[[1366,768,55],[1920,1080,19]]],["amd radeon r5 m420","5",0,[[1366,768,49]]],["amd radeon r5 m430","5",0,[[1366,768,36],[1920,1080,20]]],["amd radeon r5 m435","5",0,[[1920,1080,41],[2560,1440,67]]],["amd radeon r5 m445","5",0,[[1920,1080,32]]],["amd radeon r5e","5",0,[[1600,768,14],[1920,1080,16]]],["amd radeon r6","6",0,[[1366,768,30],[1280,1024,23],[1920,1080,12]]],["amd radeon r6 m255dx","6",0,[[1366,768,25]]],["amd radeon r6 m340dx","6",0,[[1366,768,31],[1920,1080,15]]],["amd radeon r6e","6",0,[[3840,2160,5]]],["amd radeon r7","7",0,[[1366,768,35],[1280,1024,31],[1680,1050,39],[1920,1080,12],[1920,1200,16],[2560,1080,15],[2560,1440,21],[3840,2160,8]]],["amd radeon r7 200","7",0,[[1280,1024,45],[1920,1080,120]]],["amd radeon r7 200 series","7",0,[[1920,1080,43]]],["amd radeon r7 240","7",0,[[1920,1080,29]]],["amd radeon r7 240 + hd 8570d dual","7",0,[[1920,1080,43]]],["amd radeon r7 250","7",0,[[1920,1080,49]]],["amd radeon r7 250e","7",0,[[1920,1080,60]]],["amd radeon r7 250x","7",0,[[1920,1080,60]]],["amd radeon r7 260x","7",0,[[1920,1080,56]]],["amd radeon r7 260x/360","7",0,[[1920,1200,102]]],["amd radeon r7 350","7",0,[[1024,768,60],[1280,1024,79],[1920,1080,59]]],["amd radeon r7 350x","7",0,[[1920,1080,50]]],["amd radeon r7 360","7",0,[[1920,1048,60],[1920,1080,102]]],["amd radeon r7 360 / r9 360","7",0,[[1920,1080,60]]],["amd radeon r7 370","7",0,[[1600,900,60],[1920,1080,75]]],["amd radeon r7 370 / r9 270","7",0,[[1920,1080,74]]],["amd radeon r7 370 / r9 270x/370","7",0,[[1600,900,115],[1920,1080,60]]],["amd radeon r7 370 / r9 270x/370x","7",0,[[1920,1080,115]]],["amd radeon r7 370 series","7",0,[[1920,1080,212],[3840,2160,60]]],["amd radeon r7 430","7",0,[[1920,1080,55],[3840,2160,10]]],["amd radeon r7 450","7",0,[[1920,1080,60]]],["amd radeon r7 a360","7",0,[[1920,1080,28]]],["amd radeon r7 graphics + hd 7700 dual","7",0,[[1600,1200,72]]],["amd radeon r7 graphics + r5 340 dual","7",0,[[1920,1080,47]]],["amd radeon r7 graphics + r7 200 dual","7",0,[[1920,1080,45],[1920,1200,47]]],["amd radeon r7 graphics + r7 350 dual","7",0,[[1919,1080,60]]],["amd radeon r7 m260","7",0,[[1600,900,44],[1920,1080,13]]],["amd radeon r7 m260dx","7",0,[[1366,768,46],[1920,1080,18]]],["amd radeon r7 m260x","7",0,[[1920,1080,29]]],["amd radeon r7 m265","7",0,[[1366,768,48],[1920,1080,27]]],["amd radeon r7 m270","7",0,[[1920,1080,31],[3840,2160,10]]],["amd radeon r7 m340","7",0,[[1366,768,60],[1920,1080,32]]],["amd radeon r7 m350","7",0,[[3840,2160,12]]],["amd radeon r7 m360","7",0,[[1366,768,40],[1920,1080,22]]],["amd radeon r7 m370","7",0,[[1920,1080,24]]],["amd radeon r7 m440","7",0,[[1920,1080,39]]],["amd radeon r7 m445","7",0,[[1920,1080,36]]],["amd radeon r7 m460","7",0,[[1919,1080,24],[1920,1080,29]]],["amd radeon r7 m520","7",0,[[1919,1080,17]]],["amd radeon r7 series / hd 9000","7",0,[[1920,1080,71],[2560,1080,59]]],["amd radeon r7e","7",0,[[1024,768,41]]],["amd radeon r8 m350dx","8",0,[[1366,768,30]]],["amd radeon r8 m365dx","8",0,[[1920,1080,28]]],["amd radeon r8 m435dx","8",0,[[1920,1080,22]]],["amd radeon r8 m445dx","8",0,[[1366,768,38],[1920,1080,27]]],["amd radeon r8 m535dx","8",0,[[1366,768,55]]],["amd radeon r9","9",0,[[1920,1080,60]]],["amd radeon r9 200","9",0,[[1920,1080,60]]],["amd radeon r9 200 / hd 7900","9",0,[[1920,1080,250]]],["amd radeon r9 255","9",0,[[1600,900,52],[1920,1080,51]]],["amd radeon r9 260","9",0,[[1920,1080,16]]],["amd radeon r9 270","9",0,[[1280,1024,60],[1920,1080,60]]],["amd radeon r9 270 1024sp","9",0,[[1920,1080,135]]],["amd radeon r9 270x","9",0,[[1920,1080,30]]],["amd radeon r9 280","9",0,[[1920,1080,75],[1920,1200,428],[2560,1440,60]]],["amd radeon r9 280,","9",0,[[5120,2880,39]]],["amd radeon r9 280x","9",0,[[1920,1080,137]]],["amd radeon r9 285","9",0,[[1920,1080,60],[1920,1200,129]]],["amd radeon r9 290","9",0,[[1920,1080,60]]],["amd radeon r9 290x","9",0,[[1920,1080,60],[2560,1440,60],[3840,2160,118]]],["amd radeon r9 300","9",0,[[1920,1080,59]]],["amd radeon r9 350","9",0,[[1920,1200,63]]],["amd radeon r9 360","9",0,[[1600,900,83],[1920,1080,60],[2560,1440,59]]],["amd radeon r9 370","9",0,[[1680,1050,205],[1920,1080,60],[3840,2160,49]]],["amd radeon r9 370x","9",0,[[1920,1080,60]]],["amd radeon r9 380","9",0,[[1920,1080,41],[2560,1440,75]]],["amd radeon r9 380x","9",0,[[2560,1600,60]]],["amd radeon r9 390","9",0,[[1920,1080,60],[2560,1440,60]]],["amd radeon r9 390x","9",0,[[2560,1440,60],[3840,2160,60]]],["amd radeon r9 a375","9",0,[[1920,1080,28]]],["amd radeon r9 fury","9",0,[[1920,1080,75],[3840,2160,133]]],["amd radeon r9 fury / nano","9",0,[[1920,1200,155]]],["amd radeon r9 m200x","9",0,[[1366,768,104],[1920,1080,60]]],["amd radeon r9 m265x","9",0,[[1920,1080,33]]],["amd radeon r9 m270x","9",0,[[1600,900,60],[1920,1080,68]]],["amd radeon r9 m275","9",0,[[1920,1080,29]]],["amd radeon r9 m275x","9",0,[[1920,1080,20]]],["amd radeon r9 m280x","9",0,[[1920,1080,60],[2560,1440,25]]],["amd radeon r9 m290","9",0,[[5120,2880,33]]],["amd radeon r9 m290x","9",0,[[1920,1080,60],[3840,2160,61],[5120,2880,33]]],["amd radeon r9 m295x","9",0,[[3840,2160,33],[5120,2880,36]]],["amd radeon r9 m295x mac","9",0,[[5120,2880,42]]],["amd radeon r9 m295x mac edition / r9 380x","9",0,[[1920,1080,128]]],["amd radeon r9 m360","9",0,[[1920,1080,60],[3840,2160,26]]],["amd radeon r9 m370x","9",0,[[2560,1440,30],[2880,1800,27]]],["amd radeon r9 m370x opengl engine","9",0,[[5120,2880,14]]],["amd radeon r9 m375","9",0,[[1920,1080,29]]],["amd radeon r9 m375x","9",0,[[1920,1080,60],[3840,2160,22]]],["amd radeon r9 m380","9",0,[[1920,1080,50],[3840,2160,8],[5120,2880,9]]],["amd radeon r9 m380 opengl engine","9",0,[[5120,2880,15]]],["amd radeon r9 m385","9",0,[[1920,1080,58]]],["amd radeon r9 m385x","9",0,[[1920,1080,60]]],["amd radeon r9 m390","9",0,[[5119,2879,29],[5120,2880,21],[5760,3240,32]]],["amd radeon r9 m390 opengl engine","9",0,[[5120,2880,27]]],["amd radeon r9 m390x","9",0,[[1920,1080,140]]],["amd radeon r9 m395","9",0,[[2560,1440,59],[5120,2880,19]]],["amd radeon r9 m395 opengl engine","9",0,[[5120,2880,38]]],["amd radeon r9 m395x","9",0,[[3840,2160,58],[5120,2880,36]]],["amd radeon r9 m395x opengl engine","9",0,[[5120,2880,35]]],["amd radeon r9 m470","9",0,[[3840,2160,29]]],["amd radeon r9 m470x","9",0,[[1920,1080,60]]],["amd radeon r9-290x","9",0,[[1920,1080,60]]],["amd radeon renoir graphics d1","1",0,[[1366,768,60]]],["amd radeon rro 580x","580",0,[[5120,2880,59]]],["amd radeon rx 460","460",0,[[1920,1080,55],[2560,1080,60],[3840,2160,31]]],["amd radeon rx 460 / pro 450/455/460/555/555x/560/560x","460",0,[[3440,1440,93]]],["amd radeon rx 460 / pro 450/455/460/560","460",0,[[1920,1080,72]]],["amd radeon rx 470","470",0,[[1280,1024,73],[1920,1080,58],[1920,1200,147],[3840,2160,51]]],["amd radeon rx 470 opengl engine","470",0,[[2560,1440,60]]],["amd radeon rx 475m","475",0,[[1920,1080,60]]],["amd radeon rx 480","480",0,[[1400,1050,267],[1920,1080,60],[2560,1080,71]]],["amd radeon rx 480 opengl engine","480",0,[[1920,1080,60]]],["amd radeon rx 5300m","5300",0,[[1920,1080,60],[3840,2160,60]]],["amd radeon rx 540","540",0,[[1919,1080,52],[1920,1080,36]]],["amd radeon rx 550","550",0,[[1280,1024,135],[1920,1080,60],[1920,1200,60],[6016,3384,15]]],["amd radeon rx 550 640sp / rx 560","550",0,[[1920,1080,60]]],["amd radeon rx 5500","5500",0,[[1920,1080,139]]],["amd radeon rx 5500 / pro 5500m","5500",0,[[1920,1080,60],[2560,1440,227]]],["amd radeon rx 5500 xt","5500",0,[[1920,1080,239]]],["amd radeon rx 5500m","5500",0,[[1920,1048,144],[1920,1080,144],[3840,2160,60]]],["amd radeon rx 550x","550",0,[[1920,1080,52]]],["amd radeon rx 560","560",0,[[1920,1080,60],[1920,1200,42],[2560,1440,60]]],["amd radeon rx 560 [baffin]","560",0,[[1920,1080,60]]],["amd radeon rx 5600 oem/5600 xt / 5700 xt","5600",0,[[1920,1080,360],[2560,1440,164]]],["amd radeon rx 5600 xt","5600",0,[[1920,1080,75]]],["amd radeon rx 5600m","5600",0,[[1920,1080,144]]],["amd radeon rx 560d","560",0,[[2560,1080,60]]],["amd radeon rx 560x","560",0,[[1920,1080,115],[3840,2160,35]]],["amd radeon rx 570","570",0,[[1920,1080,60],[3072,1728,60]]],["amd radeon rx 570 opengl engine","570",0,[[1920,1080,226]]],["amd radeon rx 5700","5700",0,[[1920,1080,144]]],["amd radeon rx 5700 / 5700 xt","5700",0,[[3840,2160,201]]],["amd radeon rx 5700 xt","5700",0,[[1920,1080,464],[3840,2160,60],[6016,3384,34]]],["amd radeon rx 5700 xt 50th anniversary","5700",0,[[2560,1440,144],[3840,1600,60],[3840,2160,222],[5120,2880,60]]],["amd radeon rx 5700xt","5700",0,[[1920,1080,369]]],["amd radeon rx 580","580",0,[[1920,1080,60],[1920,1200,97],[2560,1440,60],[3840,2160,60]]],["amd radeon rx 580 2048sp","580",0,[[1920,1080,60]]],["amd radeon rx 580 opengl engine","580",0,[[1920,1080,145]]],["amd radeon rx 580 special","580",0,[[2560,1440,60]]],["amd radeon rx 580x","580",0,[[1920,1200,60],[3840,2160,79]]],["amd radeon rx 590","590",0,[[1920,1080,75],[2560,1440,164],[3584,2240,60]]],["amd radeon rx 640","640",0,[[1920,1080,39]]],["amd radeon rx 6500 xt","6500",0,[[1920,1080,60]]],["amd radeon rx 6600","6600",0,[[1920,1080,433],[3840,2160,57]]],["amd radeon rx 6600 xt","6600",0,[[1920,1080,60]]],["amd radeon rx 6600 xt/6600m","6600",0,[[2560,1440,60]]],["amd radeon rx 6600m","6600",0,[[1920,1080,139]]],["amd radeon rx 6700 xt","6700",0,[[1920,1080,451]]],["amd radeon rx 6700 xt / 6800m","6700",0,[[2560,1440,144]]],["amd radeon rx 6700m","6700",0,[[1920,1080,240]]],["amd radeon rx 6800","6800",0,[[2560,1440,564],[3840,2160,60]]],["amd radeon rx 6800 xt","6800",0,[[2560,1440,446],[3440,1440,144],[3840,2160,60]]],["amd radeon rx 6800 xt / 6900 xt","6800",0,[[2560,1440,239]]],["amd radeon rx 6800 xt 16gb","6800",0,[[6400,2666,60]]],["amd radeon rx 6800m","6800",0,[[1920,1080,300]]],["amd radeon rx 6900 xt","6900",0,[[3840,2160,60]]],["amd radeon rx rx 560","560",0,[[1920,1080,60]]],["amd radeon rx vega","rx",0,[[1920,1080,39]]],["amd radeon rx vega 10","10",0,[[1920,1080,38]]],["amd radeon rx vega 11","11",0,[[1920,1080,35]]],["amd radeon rx vega 56","56",0,[[1920,1080,144],[3440,1440,60],[3840,2160,60]]],["amd radeon rx vega 56 8gb","56",0,[[2560,1600,60]]],["amd radeon rx vega 56 opengl engine","56",0,[[2560,1440,60]]],["amd radeon rx vega 64","64",0,[[2560,1440,518]]],["amd radeon rx vega 64 8gb","64",0,[[2560,1440,60]]],["amd radeon rx vega 64 opengl engine","64",0,[[3840,2160,119]]],["amd radeon rx vega 64.1","64",0,[[6016,3384,60]]],["amd radeon rx vega 8","8",0,[[1920,1080,53]]],["amd radeon rx vega m gh","rxm",0,[[1920,1080,60],[2560,1440,60],[3840,2160,51]]],["amd radeon rx vega m gl","rxm",0,[[2560,1440,567],[3840,2160,59]]],["amd radeon rx vega11","11",0,[[2496,1664,30]]],["amd radeon rx460","460",0,[[1920,1080,60]]],["amd radeon rx480","480",0,[[1920,1080,102],[2560,1080,71]]],["amd radeon rx540","540",0,[[2400,1800,37]]],["amd radeon rx550","550",0,[[1920,1080,60]]],["amd radeon rx560","560",0,[[1920,1080,93]]],["amd radeon rx5600","5600",0,[[3840,2160,129]]],["amd radeon rx570","570",0,[[5120,2880,59]]],["amd radeon rx5700","5700",0,[[1920,1080,60]]],["amd radeon rx580","580",0,[[1920,1080,60]]],["amd radeon rx590 gme","590",0,[[1920,1080,112]]],["amd radeon rx6600xt","6600",0,[[3840,2160,60]]],["amd radeon sky 500","500",0,[[4096,2160,34]]],["amd radeon vega","",0,[[5120,2880,32]]],["amd radeon vega 10","10",0,[[1920,1080,44]]],["amd radeon vega 10 mobile","10",0,[[1920,1080,30]]],["amd radeon vega 11","11",0,[[1280,1024,60],[1920,1080,60],[3840,2160,17]]],["amd radeon vega 2","2",0,[[1366,768,30]]],["amd radeon vega 3","3",0,[[1440,900,44],[1920,1080,29],[3840,2160,8]]],["amd radeon vega 3 mobile","3",0,[[1920,1080,30]]],["amd radeon vega 56","56",0,[[2560,1440,144]]],["amd radeon vega 6","6",0,[[1366,768,61],[1920,1080,23]]],["amd radeon vega 64","64",0,[[6016,3384,35]]],["amd radeon vega 64 lc","64",0,[[2560,1080,60]]],["amd radeon vega 8","8",0,[[1920,1080,35],[2560,1440,24],[4096,2160,15]]],["amd radeon vega 8 mobile","8",0,[[1920,1080,36]]],["amd radeon vega 9","9",0,[[2496,1663,32],[2496,1664,39]]],["amd radeon vega fe","fe",0,[[1920,1080,120],[2560,1440,60]]],["amd radeon vega frontier","",0,[[1920,1080,120],[3840,2160,60]]],["amd radeon vega frontier edition opengl engine","",0,[[3440,1440,60]]],["amd radeon vega series / radeon vega mobile","",0,[[1920,1080,67]]],["amd radeon vii","vii",0,[[1920,1080,468],[2560,1440,60],[3840,2160,60]]],["amd radeont 540x","540",0,[[1920,1080,74],[3840,2160,22]]],["amd radeont rx 5300","5300",0,[[1920,1080,60]]],["amd radeont rx 5500m","5500",0,[[1920,1080,303]]],["amd radeont rx 560x","560",0,[[1920,1080,60]]],["amd saphire radeon rx 580","580",0,[[1920,1080,57]]],["amd sapphire radeon hd6870","6870",0,[[1680,1050,60]]],["amd sapphire radeon rx 560","560",0,[[1280,1024,60]]],["amd sapphire radeon rx vega 64 8gb","64",0,[[2560,1440,144]]],["intel radeon pro vega 16","16",0,[[3360,1890,20]]],["intel radeong 0.4 on amd bonaire","0",0,[[1920,1200,92]]],["intel radeong 0.4 on amd cape verde","0",0,[[1920,1200,73]]],["intel radeong 0.4 on amd polaris10","0",0,[[3840,2160,108]]],["intel radeong 0.4 on amd tonga","0",0,[[1920,1080,124]]],["radeon 500","500",0,[[1920,1080,58]]],["radeon 550","550",0,[[1920,1080,60]]],["radeon 550x","550",0,[[1920,1080,68]]],["radeon hd 7700","7700",0,[[1920,1080,60],[1920,1200,90]]],["radeon hd 7800","7800",0,[[1920,1080,60]]],["radeon hd 7900","7900",0,[[1920,1080,60],[1920,1200,60],[2560,1440,60]]],["radeon hd 8500","8500",0,[[1920,1080,42]]],["radeon hd 8790m","8790",0,[[1600,900,60]]],["radeon hd8800","8800",0,[[1920,1080,60]]],["radeon pro wx 5100 graphics (polaris10 / drm 3.27.0 / 4.19.4-1.el7.elrepo.x86_64, llvm 6.0","5100",0,[[1920,1080,60]]],["radeon pro wx3100","3100",0,[[2560,1440,1],[3840,2160,43]]],["radeon r5 340","5",0,[[1536,864,41]]],["radeon r5 m330","5",0,[[1366,768,38]]],["radeon r7 200","7",0,[[1280,1024,60],[2560,1440,52]]],["radeon r7 300","7",0,[[1920,1080,60]]],["radeon r7 m340","7",0,[[1920,1080,32]]],["radeon r7 m360","7",0,[[1920,1080,32]]],["radeon r9 200","9",0,[[1920,1080,60],[1920,1200,60],[2560,1440,1]]],["radeon r9 380","9",0,[[2560,1440,1]]],["radeon r9 390","9",0,[[1920,1080,60],[2560,1440,60]]],["radeon r9 fury","9",0,[[1920,1080,51],[1920,1920,60]]],["radeon rx","rx",0,[[1920,1200,60]]],["radeon rx 460","460",0,[[1920,1080,60],[1920,1200,60]]],["radeon rx 470","470",0,[[1280,768,60],[1680,1050,422],[1920,1080,60],[2560,1440,60]]],["radeon rx 480","480",0,[[1920,1080,60],[1920,1200,185],[2560,1440,1]]],["radeon rx 550","550",0,[[1600,900,60],[1680,1050,60],[1920,1080,1],[1920,1200,60],[2560,1080,60],[3840,2160,30]]],["radeon rx 5500 xt","5500",0,[[1920,1080,60],[1920,1200,60],[2560,1440,60],[3840,2160,19]]],["radeon rx 560","560",0,[[1600,900,60],[1920,1080,29],[1920,1200,47],[2688,1512,60],[3440,1440,60],[3840,2160,58]]],["radeon rx 5600 xt","5600",0,[[1920,1080,60]]],["radeon rx 570","570",0,[[1440,900,60],[1280,1024,60],[1920,1080,51],[1920,1200,60],[2560,1080,60],[2560,1440,37],[3440,1440,60]]],["radeon rx 5700 xt","5700",0,[[1707,960,60],[1920,1080,60],[2560,1440,55],[3840,2160,60]]],["radeon rx 580","580",0,[[1477,831,72],[1440,900,60],[1680,1050,60],[1920,1080,4],[1920,1200,60],[2560,1080,52],[2560,1440,60],[2560,1600,60],[3840,2160,1]]],["radeon rx 580 2048sp","580",0,[[1440,900,75]]],["radeon rx 590","590",0,[[1920,1080,60],[2560,1440,60],[3840,2160,30]]],["radeon rx vega","rx",0,[[1920,1080,60],[1920,1200,60],[2194,1234,60],[2560,1080,60],[2560,1440,60],[3440,1440,75],[3840,2160,60]]],["radeon rx vega 8","8",0,[[3840,2160,23]]],["radeon rx550","550",0,[[1680,1050,60],[1920,1080,60],[3440,1440,58]]],["radeon vega 8","8",0,[[1680,1050,60]]],["radeon vega frontier","",0,[[2560,1440,144]]],["radeon vii","vii",0,[[2560,1440,60],[3440,1440,60],[3840,2160,1]]],["radeong 0.4 on amd polaris10","0",0,[[3840,2160,109]]],["radeong 0.4 on amd tahiti","0",0,[[1920,1080,223]]],["ryzen embedded r1305g with radeon vega gfx","1305",0,[[3840,2160,14]]],["ryzen embedded v1605b with radeon vega gfx","1605",0,[[3840,2160,28]]]]\')},921:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["adreno 506","506",0,[[1512,720,18,"motorola moto g(7) play"]]],["adreno 530","530",0,[[2560,1140,27,"samsung galaxy s7 (sm-930x)"],[2392,1440,28,"google pixel xl"]]],["adreno 615","615",0,[[2088,1080,20,"google pixel 3a"]]],["adreno 618","618",0,[[2210,1080,34,"xiaomi mi 9t"]]],["adreno 620","620",0,[[2340,1080,42,"google pixel 5"]]],["adreno 630","630",0,[[2280,1080,58,"oneplus a6003"]]],["adreno 640","640",0,[[2280,1080,60,"google pixel 4"]]],["qualcomm adreno 205","205",0,[[1280,720,11,"coolpad 8675-w00 (adreno 205)"]]],["qualcomm adreno 304","304",0,[[480,320,16,"zte z353vl cymbal t"],[480,480,6,"lg watch sport"],[758,480,8,"kyocera kyf33 torque x01 s-max"],[782,480,8,"vodafone vfd 510"],[791,480,8,"acer t012"],[792,480,6,"lg k4 2017 (m151, m160, m150 phoenix 3, m153 fortune, m154 risio 2, l58vl rebel 2)"],[800,480,7,"chainway c4050-q4"],[854,480,6,"zte q302c"],[897,540,6,"kyocera c6742 hydro view"],[960,540,6,"cat s40"],[1024,552,6,"tcl 9007 pixi 3 (7)"],[1184,720,4,"micromax q4251 canvas juice a1"],[1187,720,4,"lg phoenix 2 (k37x)"],[1193,720,4,"lg x power (k210, k450)"],[1196,720,4,"obi sj2.5"],[1217,720,4,"fibo la0920"],[1224,720,4,"umax visionbook p70 lte"],[1280,720,4,"k-touch beeline fast +"],[1280,736,4,"alcatel 9022x one touch pixi 3 8.0"],[1280,752,4,"lenovo tab 10 (x103f)"]]],["qualcomm adreno 305","305",0,[[432,320,18,"sonim xp6700"],[480,320,16,"lg t480s wine smart 3g"],[400,400,0,"huawei watch"],[734,480,7,"lg l fino (d290, d295)"],[737,480,7,"acer liquid z220"],[790,480,8,"htc desire 510 (adreno 305)"],[791,480,7,"sony xperia m (c19xx, c20xx)"],[800,480,5,"cherry mobile q510"],[854,480,6,"alcatel a564c one touch pop icon"],[886,540,7,"lg g2 mini (d610, d618, d620)"],[896,540,7,"htc desire 610"],[897,540,5,"motorola xt830c moto e"],[960,540,4,"huawei c8817l"],[1024,528,5,"aurora au701"],[1024,552,4,"asus zenfone go 6.9 (l001 zb690kg)"],[982,600,4,"huawei mediapad 7 youth 2"],[1024,600,7,"samsung galaxy tab 3 7.0 (sm-t215, sm-t217)"],[1024,720,4,"ereneben eben a2"],[1024,722,5,"prestigio pmt5287 multipad ranger 8.0 4g"],[1280,648,5,"tomtom bridge"],[1184,720,5,"htc desire 650 (d650)"],[1188,720,4,"lg aka (h778, h788, f520x)"],[1196,720,3,"zte z787"],[1200,720,4,"lg g vista (d631, vs880, gx2 f430)"],[1216,720,4,"vodafone smart 4 max"],[1217,720,4,"kyocera e6790 duraforce xd"],[1220,720,4,"huawei ascend mate 2 mt2-l03"],[1196,768,4,"infocus m2"],[1280,720,3,"zuum p47"],[1280,732,4,"lg g pad 7.0 (uk410, v410, vk410)"],[1280,736,4,"zte amazing p6"],[1280,737,4,"asus memo pad hd 7 (k00s me175kg)"],[1280,739,4,"lg g pad 8.0 (v480, v49x, p490, t01)"],[1280,740,4,"qualcomm msm8926 (adreno 305, development board)"],[1280,752,4,"asus padfone e (t008 a68m)"],[1216,800,3,"huawei mediapad t1 8.0 (adreno 305)"],[1280,800,3,"samsung tn10gedlte"],[1920,1080,2,"zte s2002 star 1"],[1920,1128,2,"lenovo b8080"]]],["qualcomm adreno 306","306",0,[[734,480,9,"lg f60 (d390, d392)"],[790,480,8,"htc desire 510 (adreno 306)"],[791,480,5,"lg l21g destiny"],[800,480,8,"covia fleaz cp-l42a pop"],[854,480,8,"freetel ft151a priori2 lte"],[897,540,7,"kyocera c6740 hydro wave"],[960,540,5,"blu studio mini lte 2"],[1024,552,6,"tcl 9006w"],[1024,600,5,"samsung sm-t116ir (adreno 306)"],[1024,720,5,"ereneben eben k8s"],[1024,768,5,"samsung sm-p350 galaxy tab a plus"],[1184,720,4,"lg x screen (k500, f650)"],[1188,720,4,"lg band play (f570s)"],[1196,720,4,"fly a5042"],[1199,720,4,"lg stylus 2 (f720, k520, k540, ls775 g stylo 2, l82vl)"],[1200,720,4,"lg g4 stylus (h63x, ms631, f560, ls770 g stylo)"],[1208,720,4,"vizio xr6m10 tablet remote"],[1217,720,4,"lenovo pb1-750x phab"],[1224,720,4,"c spire ft7"],[1280,720,3,"bgh joy smart axs ii"],[1280,736,4,"vodafone smart tab 4g"],[1280,752,4,"huawei mediapad t1 10 (t1-a21)"],[1216,800,4,"huawei mediapad t1 8.0 pro, lte (adreno 306)"],[1280,800,4,"samsung galaxy tab e 8.0 (adreno 306, sm-t377p)"],[1794,1080,2,"bluebird sf550"],[1815,1080,2,"vizio xr6"],[1920,1080,2,"longcheer cc01"]]],["qualcomm adreno 308","308",0,[[800,480,13,"samsung galaxy folder 2 (sm-g160x)"],[854,480,12,"coolpad 3632"],[960,540,10,"samsung sm-j250g"],[1184,720,5,"infocus 00ww"],[1187,720,6,"lg m200"],[1193,720,6,"lg k20 plus (mp260, k20 v vs501)"],[1195,720,6,"lg x charge (x power 2, m322, l63bl fiesta)"],[1199,720,6,"lg stylo 3 (l83bl)"],[1280,720,6,"hisense f23"],[1280,736,6,"lenovo tb-8504"],[1280,752,6,"lenovo tb-x304"],[1344,720,6,"wiko view"],[1223,800,6,"huawei mediapad t3 8.0 (kob-xxx)"],[1368,720,6,"casper via g1"],[1280,800,6,"samsung galaxy tab a2 s (sm-t380, sm-t385)"]]],["qualcomm adreno 320","320",0,[[1196,720,11,"pantech im-a850 vega r3"],[1196,768,10,"google nexus 4 (lg e960)"],[1280,720,8,"blackberry z30"],[1280,752,8,"asus memo pad 10 (k01e me103k)"],[1280,768,10,"lg optimus g (e97x, ls970, e987, f180, kddi lgl21)"],[1920,1008,5,"technicolor px36"],[1794,1080,5,"sony xperia z (c66xx, so-02e, l36x)"],[1848,1080,5,"pantech im-a860 vega n6"],[1920,1080,5,"zte nubia z5 (nx501, nx50x)"],[1920,1104,5,"google nexus 7 (2nd gen, razor)"],[1920,1114,4,"lg g pad 8.3 (vk810 4g)"],[1920,1128,5,"sony xperia tablet z (sgp3xx, so-03e)"]]],["qualcomm adreno 330","330",0,[[800,480,18,"samsung sm-w2014"],[1184,720,27,"sony so-04g xperia a4"],[1196,720,21,"sony xperia j1 compact (d5788)"],[1202,720,21,"lg g flex (d95x, ls995, lgl23, f340)"],[1280,720,20,"amazon fire phone (sd4930ur)"],[1280,768,21,"samsung sm-w2015 galaxy golden 2"],[1280,960,14,"lg f300 optimus vu 3"],[1600,1152,15,"hp pro slate 12"],[1440,1308,10,"blackberry passport"],[1776,1080,11,"google nexus 5"],[1788,1080,11,"lg g3 a f410"],[1794,1080,10,"fujitsu f-01f arrows nx luge (docomo)"],[1803,1080,11,"lg g pro 2 (d838, f350)"],[1836,1080,11,"sony xperia z ultra (c68xx, xl39h, sol24, sgp412)"],[1920,1080,9,"qualcomm quanta is7"],[1920,1104,12,"ntt docomo sh-06f sharp aquos pad"],[1920,1128,12,"sony xperia z2 tablet (sgp5xx, so-05f, sot21)"],[1920,1129,10,"lg g pad ii (v935, v940 prada 3.0, v930 g pad x 10.1, uk932)"],[1920,1200,9,"amazon kindle fire hdx 7 (3rd gen, kfthwa, kfthwi)"],[2048,1440,8,"hp red"],[2392,1440,8,"fujitsu f-02g arrows nx (docomo)"],[2400,1440,6,"iuni u3"],[2560,1440,7,"vivo x520l xplay 3s"],[2560,1504,7,"ntt docomo f-03g (fujitsu arrows tab)"],[2560,1600,5,"samsung sm-t525 galaxy tab pro 10.1"]]],["qualcomm adreno 405","405",0,[[1184,720,13,"lyf ls-5015 water 8"],[1196,720,10,"alcatel 6044 one touch pop up"],[1200,720,12,"oppo a53"],[1280,720,8,"hisense c1"],[1280,736,10,"asus zenpad 8 (adreno 405, p024 z380kl)"],[1776,1080,7,"lyf ls-5505"],[1794,1080,6,"medion life x5020"],[1798,1080,7,"lg h740 g vista 2"],[1800,1080,6,"oppo r7s plus"],[1803,1080,6,"oppo r7 plus (adreno 405)"],[1812,1080,6,"ramos mos1"],[1824,1080,6,"vargo ivargo v210101"],[1836,1080,6,"lenovo pb1-770m everypad3"],[1920,1080,2,"smartisan yq607 jianguo"],[1920,1104,5,"lg vk815 g pad x8.3, p815l g pad ii 8.3"],[1920,1111,6,"lg g pad x 8.0 (v52x)"],[1794,1200,5,"qisda f80"],[1920,1128,5,"huawei mediapad t2 10.0 pro (fdr-xxx)"],[1830,1200,6,"huawei mediapad x3 (ple-xxx)"],[1836,1200,6,"huawei mediapad t2 8.0 pro (jdn-xxx)"]]],["qualcomm adreno 418","418",0,[[1280,768,28,"samsung sm-g9198"],[1776,1080,17,"sharp sh-m03 aquos mini"],[1794,1080,15,"softbank 502sh (sharp aquos xx2)"],[1920,1080,11,"smartisan t2 (sm801)"],[2368,1440,10,"fujitsu f-02h arrows nx (docomo)"],[2392,1440,10,"lg k600"],[2413,1440,10,"motorola moto x style, pure (xt1570, xt1572, xt1575)"],[2560,1440,9,"qiku q terra (8692-a00)"],[2560,1504,9,"ntt docomo f-04h arrows tab"]]],["qualcomm adreno 420","420",0,[[1280,720,32,"odg r7-w"],[1920,1080,20,"samsung galaxy s5 (adreno 420, sm-g901)"],[2392,1440,13,"lg g3 (adreno 420, f460)"],[2560,1352,7,"qualcomm apq8084 (adreno 420, development board)"],[2413,1440,12,"motorola moto x pro"],[2560,1440,8,"qualcomm liquid (adreno 420, windows, development board)"],[2560,1532,12,"samsung galaxy note edge (adreno 420, sm-n915x, scl24, sc-01g)"],[2560,1600,11,"amazon kindle fire hdx 8.9 (4th gen, kfsawa, kfsawi)"]]],["qualcomm adreno 430","430",0,[[1184,720,53,"sony xperia z5 compact (e58xx, so-02h)"],[1280,720,18,"zebra technologies mtp8994"],[1776,1080,29,"sony xperia z5 (e66xx, so-01h, sov32, 501so)"],[1794,1080,19,"vertu signature touch (2015)"],[1920,1080,9,"nokia rm-1106"],[1920,1104,21,"ntt docomo sh-05g sharp aquos pad"],[2392,1440,11,"sony e6508 vzw xperia z4v"],[2413,1440,17,"sirin labs solarin"],[2560,1440,7,"microsoft rm-1105"],[2560,1504,16,"sony xperia z4 tablet (sgp7xx, so-05g, sot31)"]]],["qualcomm adreno 505","505",0,[[728,480,29,"zebra technologies tc25"],[1184,720,15,"ivvi i3-01"],[1196,720,15,"huawei honor 6c (dig-xxx)"],[1199,720,14,"lg stylus 2 plus (ms550, k550)"],[1280,720,14,"xiaomi land"],[1344,720,14,"wiko view prime"],[1368,720,13,"micromax hs3"],[1776,1080,7,"hisense a2"],[1787,1080,7,"lg qua phone px (lgv33)"],[1794,1080,7,"pantech im-100 vega"],[1798,1080,8,"lg stylo 3 plus (tp450, mp450, m470)"],[1802,1080,7,"lg k11 (k530, k535)"],[1812,1080,7,"sugar f11"],[1920,1080,6,"lg x venture (h700, m710)"],[1920,1111,6,"lg g pad x ii 8.0 plus (v530)"],[2004,1080,7,"lg q6 (m700, x600)"],[1920,1128,7,"vodafone vfd 1400"],[1920,1132,7,"huawei mediapad t3 lite 10 (bah-xxx)"],[1839,1200,7,"huawei mediapad m3 lite 8.0 (cpn-xxx)"]]],["qualcomm adreno 506","506",0,[[1184,720,20,"fujitsu f-04j docomo"],[1280,720,20,"samsung galaxy j7 2017 (adreno 506, sm-j727x)"],[1320,720,18,"xiaomi redmi 5"],[1356,720,18,"vivo v7 plus (1716)"],[1620,1080,11,"blackberry bbb100-x (keyone, mercury)"],[1776,1080,10,"condor plume h1"],[1788,1080,10,"huawei nova (caz-xxx)"],[1794,1080,10,"nuans neo reloaded"],[1920,1080,9,"blackberry bbd100"],[1920,1104,9,"nec lavietab pc-ts508fam"],[1980,1080,10,"xiaomi redmi 5 plus"],[1920,1128,9,"zte k92 primetime"],[1920,1132,9,"vestel v tab 1090 lte"],[1920,1200,9,"i.safe is910.1"]]],["qualcomm adreno 508","508",0,[[1776,1080,15,"sonim xp8812"],[1798,1080,15,"sharp fs8010"],[1920,1080,14,"htc u11 life"],[2009,1080,14,"vestel venus z20"]]],["qualcomm adreno 509","509",0,[[2159,1080,15,"asus zenfone 5"]]],["qualcomm adreno 510","510",0,[[1184,720,31,"zebra technologies tc51"],[1208,800,27,"askey turbonet tn800a1 turbotab e1"],[1366,720,29,"sony xperia touch (g1109)"],[1776,1080,13,"agm x2"],[1794,1080,14,"qualcomm msm8952 (adreno 510, development board)"],[1920,1080,14,"coolpad r116 cool1"],[2048,1440,11,"asus zenpad 3 8.0 (p008 z581kl)"],[2160,1440,10,"jide remix pro"],[2048,1536,11,"asus zenpad z10 (p00i zt500kl)"],[2368,1440,10,"vodafone vfd 900"],[2392,1440,10,"sharp aquos z3 (fs8009)"],[2413,1440,9,"infocus m820"],[2560,1440,9,"vivo pd1522a"],[2560,1504,9,"lenovo yoga tab3 plus (yt-x703)"]]],["qualcomm adreno 512","512",0,[[782,480,59,"honeywell cn80"],[1798,1080,23,"sharp fs8016"],[1920,1080,22,"vivo td1608"],[2016,1080,22,"oppo r11s"],[2034,1080,22,"vivo x20a"],[2151,1080,20,"xiaomi redmi note 7"]]],["qualcomm adreno 530","530",0,[[1600,900,56,"keecker keecker"],[1776,1080,43,"softbank 506sh (sharp aquos phone xx3)"],[1794,1080,49,"google pixel"],[1920,1024,47,"contextmedia p-wal-107-elc-03"],[1920,1080,26,"nokia 6071w"],[2048,1536,35,"samsung galaxy tab s3 (sm-t82x)"],[2368,1440,27,"motorola xt1650 (1.8 ghz)"],[2392,1440,21,"lg q8 (h970, x800l)"],[2416,1440,31,"alcatel 6076s"],[2560,1439,17,"hp elite x3"],[2560,1440,4,"hp falcon"],[2672,1440,30,"lg g6 (g600, us997, ls993, vs988, h87x)"],[2880,1440,26,"baofeng ke-01"],[3840,2076,15,"via vt6093"]]],["qualcomm adreno 540","540",0,[[1184,720,61,"sony xperia xz1 compact (g8441)"],[1776,1080,57,"sony xperia xz1 (g834x, sov36, so-01k, 701so)"],[1794,1080,57,"google pixel 2 (walleye)"],[1920,1080,56,"zte nx595j nubia"],[1980,1080,56,"xiaomi mi mix 2"],[2034,1080,55,"oneplus 5t (a5010)"],[2276,1312,43,"essential ph-1"],[2368,1440,39,"sharp aquos r (sh-03j, shv39, 605sh)"],[2392,1440,41,"qualcomm adreno 540 (development board)"],[2416,1440,40,"razer phone"],[2560,1440,36,"htc u11 (u-3x, 2pzc100, 2pzc5, htv33, 601ht)"],[2678,1440,35,"samsung galaxy s8 active (sm-g892)"],[2768,1440,33,"samsung galaxy s8+ (adreno 540, sm-g955x, sc-03j, scv35)"],[2960,1440,33,"samsung galaxy note 8 (adreno 540, sm-n950, sc-01k, scv37)"]]],["qualcomm adreno 615","615",0,[[2560,1492,18,"samsung galaxy tab s5e sm-t720"]]],["qualcomm adreno 616","616",0,[[2047,1080,30,"meizu x8"]]],["qualcomm adreno 618","618",0,[[2183,1080,38,"samsung galaxy a71 (sm-a715f)"],[2274,1080,37,"samsung galaxy a80 sm-a805f"]]],["qualcomm adreno 630","630",0,[[2792,1440,49,"samsung galaxy s9+ (adreno 630, sm-g965)"]]],["qualcomm adreno 640","640",0,[[2020,1080,60,"samsung galaxy s10e (adreno 640, sm-g970x)"],[2064,1080,60,"samsung galaxy note 10 (adreno 640, sm-n970x)"],[2181,1080,60,"samsung galaxy s10 lite"],[2198,1080,60,"samsung galaxy a90 5g"],[2210,1080,79,"xiaomi redmi k20 pro premium edition"],[2048,1410,59,"samsung galaxy fold 5g (adreno 640, sm-f900x)"],[2723,1440,55,"samsung galaxy s10 (adreno 640, sm-g973x)"],[2730,1440,56,"samsung galaxy s10+ (adreno 640, sm-g975x)"],[2759,1440,56,"samsung galaxy note 10+ (adreno 640, sm-n975x)"],[2901,1440,55,"samsung galaxy s10 5g (adreno 640, sm-g977x)"]]],["qualcomm adreno 650","650",0,[[2274,1080,90,"asus zenfone 7"],[3101,1387,50,"samsung galaxy s20 ultra 5g (sm-g988u1)"]]]]\')},535:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["apple a10 gpu","10",0,[[2048,1536,41,"apple ipad (6th gen)"],[2160,1620,36,"apple ipad (10.2-inch) (7th generation)"]]],["apple a10x gpu","10",0,[[2048,1536,59,"apple ipad pro (10.5-inch)"],[2224,1668,69,"apple ipad pro (10.5-inch)"],[2732,2048,46,"apple ipad pro (12.9-inch, 2nd gen)"]]],["apple a12 gpu","12",0,[[2048,1536,60,"apple ipad mini (2019)"]]],["apple a12x gpu","12",0,[[2224,1668,116,"apple ipad pro (11-inch)"],[2388,1668,115,"apple ipad pro (11-inch)"],[2732,2048,60,"apple ipad pro (12.9-inch) (3rd generation)"]]],["apple a12z gpu","12",0,[[2388,1668,115,"apple ipad pro (11-inch) (2nd generation)"],[2732,2048,60,"apple ipad pro (12.9 inch) (4th generation)"]]],["apple a13 gpu","13",0,[[2160,1620,59,"apple ipad 9th gen"]]],["apple a14 gpu","14",0,[[2388,1668,52,"apple ipad air 4th gen (wi-fi only)"]]],["apple a15 gpu","15",0,[[2388,1668,60,"apple ipad mini (6th gen)"]]],["apple a7 gpu","7",0,[[2048,1536,10,"apple ipad mini 3"]]],["apple a8 gpu","8",0,[[2048,1536,16,"apple ipad mini 4"]]],["apple a8x gpu","8",0,[[2048,1536,30,"apple ipad air 2"]]],["apple a9 gpu","9",0,[[2048,1536,29,"apple ipad 9.7 (5th gen)"]]],["apple a9x gpu","9",0,[[2048,1536,40,"apple ipad pro 9.7"],[2732,2048,35,"apple ipad pro"]]],["apple m1 gpu","1",0,[[2732,2048,60,"apple ipad pro (12.9-inch) (5th generation)"]]]]\')},438:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["apple a10 gpu","10",0,[[1334,750,104,"apple iphone 7"],[1920,1080,60,"apple iphone 7 plus"],[2001,1125,59,"apple iphone x"]]],["apple a11 gpu","11",0,[[1334,750,64,"apple iphone 8"],[1920,1080,78,"apple iphone 8 plus"]]],["apple a12 gpu","12",0,[[1792,828,60,"apple iphone xr"],[2436,1125,57,"apple iphone xs"],[2208,1242,60,"apple iphone xs max"]]],["apple a13 gpu","13",0,[[1334,750,60,"apple iphone se (2nd gen)"],[1792,828,61,"apple iphone 11"],[2436,1125,60,"apple iphone 11 pro"],[2688,1242,61,"apple iphone 11 pro max"]]],["apple a14 gpu","14",0,[[2338,1080,60,"apple iphone 12 mini"],[2436,1125,60,"apple iphone 12"],[2778,1284,60,"apple iphone 12 pro max"]]],["apple a15 gpu","15",0,[[2338,1080,60,"apple iphone 13 mini"],[2436,1125,60,"apple iphone 13 pro"],[2688,1242,60,"apple iphone 13 pro max"]]],["apple a7 gpu","7",0,[[1136,640,32,"apple iphone 5s"]]],["apple a8 gpu","8",0,[[1136,640,40,"apple ipod touch 6"],[1334,750,36,"apple iphone 6"],[1920,1080,21,"apple iphone 6 plus"]]],["apple a9 gpu","9",0,[[1136,640,90,"apple iphone se"],[1334,750,72,"apple iphone 6s"],[1920,1080,42,"apple iphone 6s plus"]]]]\')},283:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["intel intel hd graphics for atom x5","5",0,[[1024,600,35,"amazon aeokn"],[1024,720,13,"arbor venus 8"],[1217,720,23,"gole gole1"],[1280,736,27,"medion p850x"],[1360,704,15,"chuwi hibox hero mini pc"],[1280,752,21,"tetratab casebook 3"],[1280,759,28,"lenovo yoga a12 (yb-q501f)"],[1366,720,19,"nextbook nx16a11264 ares 11 (x5-z8300)"],[1920,996,20,"teclast x16 pro"],[1920,1008,12,"teclast tbook 16 pro"],[1920,1016,13,"teclast x16 plus"],[1920,1104,13,"medion p851x"],[1920,1116,13,"teclast x80 pro (x5-z8350)"],[1920,1128,8,"cube technology i12-y"],[1920,1133,9,"cube technology i1-tfp (x5-z8350)"],[1920,1134,11,"microtech e-tab pro lte"],[1920,1136,14,"cube technology iwork 10 ultimate (i15-t)"],[1920,1214,10,"chuwi cw-hi10 plus (x5-z8350)"],[2048,1440,8,"teclast x98 plus"],[2160,1368,10,"chuwi hi12 (x5-z8350)"],[2048,1452,10,"teclast x98 plus ii"],[2048,1536,14,"xiaomi mi pad 2"],[2560,1356,7,"baofeng a1"],[2560,1504,6,"chuwi hibook pro (z8350)"],[2560,1518,11,"lenovo yt3-x90 yoga tablet 3 pro (x5-z8550)"]]],["intel intel hd graphics for baytrail","hdfor",0,[[1024,552,13,"multilaser intel 7qc"],[1024,696,17,"thundersoft dual os tablet"],[1024,720,15,"airis onepad 785i"],[1184,720,18,"trimble tdc500"],[1280,736,12,"acer a1-840"],[1280,752,9,"imuz mupad win 10.1 ii"],[1366,720,13,"nextbook nxa116qc164"],[1366,724,10,"cube technology i10 remix"],[1440,1008,12,"teclast x89 kindow"],[1920,1008,8,"minix neo z64"],[1920,1014,9,"cube technology i7 cx remix"],[1920,1032,11,"hp slate 17"],[1920,1104,5,"jltd d630"],[1920,1128,6,"intel(r) e1008"],[1920,1133,9,"pipo w3f"],[2048,1440,6,"kruger & matz eagle 975 (km0975)"],[2048,1448,6,"jide e-tab 3g"],[2048,1464,6,"reeder a10ix air"],[2560,1344,7,"lenovo yoga tablet 2 pro-1380"],[2560,1504,5,"teclast x10hd 3g"]]],["intel mesa dri intel bay trail","dribay",0,[[1366,768,15,"google chromebook pixel (2015, n2830)"]]],["intel mesa dri intel hd","drihd",0,[[688,412,39,"hp chromebook x360 11 g1 ee"],[960,568,36,"google chromebook pixel (2015, n3450)"],[1024,561,28,"aaeon up-cht01 up board"],[1024,736,33,"google chromebook reef (n3350)"]]],["intel mesa dri intel hd graphics 400","400",0,[[688,412,41,"asus c202sa chromebook"],[768,431,45,"hp chromebook 11 g5"],[960,568,25,"acer chromebook r11 (n3050)"],[1366,768,19,"samsung chromebook 3"],[1536,832,25,"google chromebook r11 (n3160)"],[1920,1080,17,"acer chromebook 14"]]],["intel mesa dri intel hd graphics 510","510",0,[[690,378,53,"hp chromebook chell"],[688,412,60,"acer chromebook 14 for work"]]],["intel mesa dri intel hd graphics 515","515",0,[[1033,617,56,"samsung chromebook pro (m7-6y75, caroline)"],[1536,1088,32,"google chromebook pixel (2015, m3-6y30)"],[1920,980,32,"asus c302 chromebook flip"],[2400,1504,22,"samsung chromebook pro (caroline)"],[3200,1640,12,"google chromebook pixel (2015, 4405y)"]]],["intel mesa dri intel hd graphics 520","520",0,[[700,412,60,"acer chromebook 14 for work (i3-6100u)"]]],["intel mesa dri intel hd graphics 5500","5500",0,[[1080,575,59,"google chromebook pixel (2015, i3-5005u)"],[1920,1000,30,"google chromebook pixel (2015, i5-5300u)"],[2560,1700,14,"google chromebook pixel (2015, i5-5200u)"]]],["intel mesa dri intel hd graphics 615","615",0,[[1034,618,55,"google soraka (4415y)"],[1200,720,34,"google poppy (4410y, kabylake)"],[2400,1504,21,"google chromebook eve (i5-7y54)"]]],["intel mesa dri intel kabylake gt2","2",0,[[960,568,38,"google chromebook pixel (2015, m3-7y30)"]]]]\')},327:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["arm mali-t604 mp4","604",0,[[2560,1504,4,"google nexus 10"]]],["arm mali-t622","622",0,[[1024,564,12,"telechips tcc896x (quad core, development board)"],[1280,720,7,"leadcore l1860 (mali-t622, development board)"]]],["arm mali-t624","624",0,[[1794,1080,7,"huawei grace"],[1812,1080,6,"huawei abc-ul00"],[1830,1080,10,"huawei p8 max (dav-70x)"],[1920,1080,4,"sony amai vp9"],[1920,1104,9,"huawei dtab compact d-02h (docomo)"],[1920,1128,8,"huawei dtab d-01h (docomo)"],[1824,1200,9,"huawei mediapad m2 (m2-80xx)"],[1830,1200,9,"huawei mediapad x2 (gem-701l, gem-702l, gem-703l)"]]],["arm mali-t624 mp2","624",0,[[1280,720,5,"samsung sm-g910f (mali-t624)"]]],["arm mali-t624 mp4","624",0,[[1794,1080,9,"huawei z100"]]],["arm mali-t628","628",0,[[1024,600,30,"thinkware inavi davinci"],[2560,1536,8,"meizu mx4 pro"]]],["arm mali-t628 mp2","628",0,[[1280,720,8,"leadcore l1860 (development board)"]]],["arm mali-t628 mp6","628",0,[[800,480,35,"gen2wave rp1600"],[1280,672,14,"hardkernel odroid-xu3 (development board)"],[1280,720,26,"samsung galaxy alpha (mali-t628, sm-g850)"],[1920,1080,11,"samsung galaxy note iii (mali-t628, sm-n900, sm-n9000q)"],[2560,1600,3,"samsung sm-t520 galaxy tab 10.1"]]],["arm mali-t720","720",0,[[432,240,16,"unihertz jelly pro"],[782,480,8,"mobiistar lai zoro"],[784,480,8,"lg k3 (k100)"],[791,480,6,"i-mobile i-style 812 4g"],[800,480,4,"lava iris 550"],[854,480,3,"verykool sl5009 jet"],[897,540,5,"bluboo xfire"],[960,540,3,"siswoo a5 chocolate"],[1024,552,4,"bb-mobile tq763i techno 7.0 lte"],[1024,714,9,"bluedot bnt-791 (2g)"],[1024,720,3,"zte e8qp"],[1280,624,10,"panasonic p55 novo 4g"],[1280,648,4,"tcl 9025"],[1280,656,7,"acer a1-734 iconia talk s"],[1184,720,4,"lenovo xt1700, xt1706, k10a40"],[1187,720,7,"lg k8 (k350)"],[1189,720,5,"ark impulse p2"],[1193,720,7,"lg x power (k220, f750)"],[1196,720,2,"dtac phone m2"],[1198,720,5,"dtac phone t3"],[1205,720,7,"firefly aurii passion"],[1206,720,4,"archos 50 power"],[1208,720,3,"advan i7 plus"],[1217,720,7,"energy sistem energy phone max 2+"],[1238,720,9,"vnpt technology vivas lotus s3 lte"],[1280,720,2,"archos bush spira c2 5"],[1280,736,2,"digma cs1062ml citi 1903 4g"],[1280,737,3,"waywalkers t805g"],[1280,740,3,"casper via l8"],[1280,746,3,"philips tle821l e line 4g"],[1280,752,3,"4good light at200"],[1280,755,7,"leotec letab1020 supernova qi32"],[1356,720,8,"xiaolajiao la-v11"],[1360,720,7,"tecno in5"],[1368,720,7,"tinno p100"],[1280,800,4,"samsung galaxy tab e 8.0 (sm-t375x, sm-t377x)"],[1920,936,4,"panasonic eluga note"],[1920,996,4,"cube technology u83 iplay10"],[1776,1080,4,"fly fs522 cirrus 14"],[1787,1080,5,"lg x cam (k580, f690)"],[1920,1008,6,"alcatel one touch xess (p17aa)"],[1794,1080,3,"ramos mos 1 max"],[1800,1080,4,"archos sense 55 s"],[1815,1080,4,"archos diamond plus"],[1920,1032,5,"virgin media tellytablet"],[1920,1080,2,"infocus m640"],[1920,1104,4,"vestel v tab 7030"],[1920,1116,4,"jty q101"],[1920,1128,2,"archos 80 oxygen"],[2009,1080,4,"tcl 5099"],[1920,1136,4,"asus zenpad 10 (p028 z301m)"]]],["arm mali-t760","760",0,[[854,480,14,"aux t6200l"],[897,540,13,"sony xperia e4g (e20xx)"],[960,540,12,"gionee v381"],[960,568,24,"asus c100pa chromebook flip"],[1024,552,12,"archos 70 helium"],[1024,720,10,"wiz t-8168"],[1188,720,9,"lg h520 magna, h522 prime plus"],[1196,720,9,"acer s57 liquid jade z"],[1280,720,8,"dunetek vitamin a"],[1280,736,8,"archos 80b helium"],[1280,752,8,"frael m10g 4g"],[1280,768,8,"meizu m1"],[1794,1080,6,"sugar 2 ss136 l8560"],[1920,1032,9,"qbic bxp-300 box pc"],[1920,1080,4,"byxpress mphone xone"],[1920,1104,6,"cube technology t7"],[1920,1128,5,"nec lavietab pc-te510bal"],[2048,1440,3,"teclast p98 4g"],[2560,1440,10,"samsung galaxy note 4 (mali-t760, sm-n910x, sm-n916)"]]],["arm mali-t760 mp6","760",0,[[1920,1080,17,"samsung galaxy a8 (mali-t760, sm-a800x, scv32)"],[2048,1536,12,"samsung galaxy tab s 2 8.0 (sm-t710, sm-t715)"],[2560,1532,10,"samsung galaxy note edge (mali-t760, sm-n915x)"],[2560,1600,10,"samsung galaxy tab s 10.5 (mali-t760, sm-t805s)"]]],["arm mali-t760 mp8","760",0,[[1280,768,42,"samsung sm-w2016"],[1920,1080,25,"meizu niux"],[2160,1200,17,"idealens k2"],[2560,1440,12,"le xiang deepoon m2 vr"],[2560,1504,15,"bungbungame kalos 2"]]],["arm mali-t764","764",0,[[1024,600,19,"gpd q9"],[1280,720,15,"gpd xd"],[1280,752,13,"kruger & matz 1064.1g eagle"],[1280,800,13,"pipo p7"],[1920,1008,6,"rockchip mk809 4k tv stick"],[1920,1010,8,"pipo p7 hd"],[1920,1020,5,"rockchip mk903v mini tv"],[1920,1032,7,"acooo oneboard pro+"],[1872,1080,7,"contextmedia wallboard 32 tablet (p-wal-106-yit-01)"],[1920,1080,7,"rockchip cs4k tv box"],[1920,1128,7,"archos 101 oxygen"],[2048,1437,5,"haier pad 971"],[2048,1440,5,"hisense f5281 vidaa pad"],[2560,1504,4,"teclast p90hd"]]],["arm mali-t820","820",0,[[1344,720,5,"lenovo k320t"],[1776,1080,6,"leagoo t5c"],[1920,1008,7,"probox2 ava tv box"],[1920,1080,4,"skyworth coocaa 5s32 n2"]]],["arm mali-t830","830",0,[[1280,720,9,"samsung galaxy on7 (mali-t830, sm-g600x)"],[1280,800,9,"samsung sm-t536 (mali-t830)"],[1776,1080,9,"huawei p10 lite (was-xxx)"],[1794,1080,9,"huawei honor 6x (bln-xxx)"],[1920,1080,5,"samsung galaxy on7 prime 2018 (sm-g611)"],[2033,1080,8,"huawei p smart (fig-xxx)"],[2040,1080,9,"huawei maimang 6 (rne-xxx)"],[1920,1200,5,"samsung galaxy tab a 10.1 (sm-t580, sm-t585)"]]],["arm mali-t860","860",0,[[1184,720,8,"tcl a626"],[1196,720,8,"green orange go t2"],[1280,720,14,"htc one a9s"],[1920,1024,17,"hardkernel odroid-n1 (development board)"],[1920,1032,16,"contextmedia p-wal-108-elc-02"],[1920,1080,7,"htc u play (u-2u)"],[1920,1116,15,"imuz revolution a8"],[1920,1128,15,"rockchip rk3399 (development board)"],[2400,1440,10,"samsung chromebook plus (kevin)"]]],["arm mali-t860 mp2","860",0,[[598,480,25,"cipherlab 9700a"],[1184,720,11,"vernee m5"],[1193,720,11,"lg x power 2 (u+, x500, m-x320, m320)"],[1196,720,11,"lava z25"],[1199,720,11,"lg stylus 3 (m400)"],[1212,720,11,"meeg 306"],[1280,720,10,"oppo r66"],[1336,720,13,"asus pegasus 4s (x018d zb570tl)"],[1344,720,13,"allview x4 soul infinity n"],[1776,1080,7,"benq f55"],[1794,1080,6,"alcatel 7070"],[1798,1080,7,"energy sistem energy phone pro 3"],[1806,1080,8,"tecno phantom 6"],[1807,1080,7,"covia fleaz cp-j55a g07"],[1810,1080,8,"archos 55 diamond 2 plus"],[1920,1080,4,"advan vandroid i55c"],[2004,1080,7,"asus zenfone max plus m1 (x018d zb570tl)"],[1920,1128,7,"verizon qtaxia1"]]],["arm mali-t880","880",0,[[1184,720,22,"doogee mix"],[1280,720,20,"lenovo k8"],[1344,720,18,"casper via f2"],[1776,1080,11,"alcatel 6060 (mali-t880)"],[1794,1080,20,"huawei mate 8 (nxt-xxx)"],[1824,1080,11,"meiigoo m1"],[1920,1080,10,"letv leeco lex650"],[2016,1080,9,"vernee mix 2"],[2064,1080,10,"umi s2 pro"],[2392,1440,12,"huawei honor v8 (knt-al20)"],[2434,1440,11,"huawei honor note 8 premium edition (edi-al10)"],[2560,1440,24,"meizu pro 6 plus"],[2560,1480,10,"huawei dtab compact d-01j (docomo)"],[2560,1600,10,"huawei mediapad m3 (btv-xxx)"]]],["arm mali-t880 mp12","880",0,[[1920,1080,44,"samsung galaxy s7 (sm-g930f)"],[2560,1440,27,"samsung galaxy note 7 (mali-t880, sm-n930)"]]],["arm mali-t880 mp2","880",0,[[1184,720,19,"sony pikachu"],[1376,720,17,"umi s2"],[1776,1080,10,"coolpad a9s-9"],[1800,1080,11,"infinix x603"],[1920,1080,9,"innjoo pro2"]]],["arm mali-t880 mp4","880",0,[[1280,672,18,"mediatek x20 (development board)"],[1794,1080,13,"infocus tsp"],[1800,1080,16,"infinix x602 zero 4 plus"],[1806,1080,16,"tecno phantom a9"],[1810,1080,8,"mobiistar prime x pro"],[1815,1080,16,"tecno phantom 6 plus"],[1920,1080,7,"elephone r9"],[2048,1440,12,"brown tab 1"],[2392,1440,12,"vernee apollo"],[2416,1440,11,"freetel ftj162b kiwami2"],[2560,1440,10,"ivvi i5"]]],["mali-t830","830",0,[[1480,720,10,"samsung gm-j600fn"]]]]\')},538:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["arm mali-g31","31",0,[[1920,1080,7,"mecool km9 pro"]]],["arm mali-g51","51",0,[[1920,636,10,"telechips tcc803x_lcn"],[1920,1080,5,"skyworth 8n10 g1a"]]],["arm mali-g52 mc1","52",0,[[1280,736,25,"amazon fire hd 8 (kfonwi, 2020)"]]],["arm mali-g52 mc2","52",0,[[2110,1080,23,"xiaomi redmi 10x 4g"],[2264,1080,20,"xiaomi redmi 9 m2004j19c"],[2400,1080,20,"huawei y9a frl-l22"]]],["arm mali-g57 mc3","57",0,[[2158,1080,48,"realme rmx2173"]]],["arm mali-g71","71",0,[[1280,720,14,"samsung sm-j337"],[1812,1080,53,"huawei mate 9 (mha-xxx)"],[1920,1080,12,"sony amai vp9 (mali-g71)"],[2009,1080,11,"tcl 6062"],[2016,1080,11,"gionee s11"],[2038,1080,10,"ulefone power 3"],[2076,1080,15,"samsung galaxy a8 2018 (sm-a530x)"],[2094,1080,15,"samsung sm-a730x"],[2160,1080,9,"oukitel k6"],[2368,1440,35,"huawei honor v9 (duk-xxx)"],[2560,1440,32,"huawei mate 9 pro (lon-xxx)"],[2678,1440,41,"samsung galaxy s8 (mali-g71, sm-g950x)"],[2960,1440,39,"samsung galaxy s8+ (mali-g71, sm-g955x)"]]],["arm mali-g72","72",0,[[2041,1080,55,"huawei mate 10 pro (bla-xxx)"],[2160,1080,56,"huawei honor view 10 (v10, bkl-xxx)"],[2560,1440,43,"huawei mate 10 (alp-xxx)"],[2768,1440,47,"samsung galaxy s9 (mali-g72, sm-g960)"],[2792,1440,47,"samsung galaxy s9+ (mali-g72, sm-g965)"]]],["arm mali-g76","76",0,[[2020,1080,60,"samsung galaxy s10e (mali-g76, sm-g970x)"],[2029,1080,31,"samsung galaxy s10 plus sm-g975n"],[2064,1080,60,"samsung galaxy note 10 5g (mali-g76, sm-n971x)"],[2159,1080,47,"samsung galaxy a51 5g"],[2232,1080,59,"huawei honor 20 pro yal-l41"],[2328,1128,60,"huawei mate 30 pro (lio-lx9, lio-xl00"],[2723,1440,57,"samsung galaxy s10 (mali-g76, sm-g973x)"],[2730,1440,56,"samsung galaxy s10+ (mali-g76, sm-g975x)"],[2733,1440,56,"samsung galaxy s10 5g (mali-g76, sm-g977x)"],[2759,1440,57,"samsung galaxy note 10+ (mali-g76, sm-n975x)"]]],["arm mali-g77","77",0,[[2178,1080,60,"samsung galaxy s20 5g (sm-g981b)"],[2200,1080,67,"samsung galaxy s20 ultra 5g (sm-g988b)"],[2304,1080,55,"oppo pdcm00"]]],["arm mali-g77 mc9","77",0,[[2293,1080,59,"oppo pdsm00"]]],["arm mali-g78","78",0,[[2646,1288,90,"huawei mate 40 pro 5g"]]],["arm mali-t604 mp4","604",0,[[2560,1504,4,"google nexus 10"]]],["arm mali-t622","622",0,[[1024,564,12,"telechips tcc896x (quad core, development board)"],[1280,720,7,"leadcore l1860 (mali-t622, development board)"]]],["arm mali-t624","624",0,[[1794,1080,7,"huawei grace"],[1812,1080,6,"huawei abc-ul00"],[1830,1080,10,"huawei p8 max (dav-70x)"],[1920,1080,4,"sony amai vp9"],[1920,1104,9,"huawei dtab compact d-02h (docomo)"],[1920,1128,8,"huawei dtab d-01h (docomo)"],[1824,1200,9,"huawei mediapad m2 (m2-80xx)"],[1830,1200,9,"huawei mediapad x2 (gem-701l, gem-702l, gem-703l)"]]],["arm mali-t624 mp2","624",0,[[1280,720,5,"samsung sm-g910f (mali-t624)"]]],["arm mali-t624 mp4","624",0,[[1794,1080,9,"huawei z100"]]],["arm mali-t628","628",0,[[1024,600,30,"thinkware inavi davinci"],[2560,1536,8,"meizu mx4 pro"]]],["arm mali-t628 mp2","628",0,[[1280,720,8,"leadcore l1860 (development board)"]]],["arm mali-t628 mp6","628",0,[[800,480,35,"gen2wave rp1600"],[1280,672,14,"hardkernel odroid-xu3 (development board)"],[1280,720,26,"samsung galaxy alpha (mali-t628, sm-g850)"],[1920,1080,11,"samsung galaxy note iii (mali-t628, sm-n900, sm-n9000q)"],[2560,1600,3,"samsung sm-t520 galaxy tab 10.1"]]],["arm mali-t720","720",0,[[432,240,16,"unihertz jelly pro"],[782,480,8,"mobiistar lai zoro"],[784,480,8,"lg k3 (k100)"],[791,480,6,"i-mobile i-style 812 4g"],[800,480,4,"lava iris 550"],[854,480,3,"verykool sl5009 jet"],[897,540,5,"bluboo xfire"],[960,540,3,"siswoo a5 chocolate"],[1024,552,4,"bb-mobile tq763i techno 7.0 lte"],[1024,714,9,"bluedot bnt-791 (2g)"],[1024,720,3,"zte e8qp"],[1280,624,10,"panasonic p55 novo 4g"],[1280,648,4,"tcl 9025"],[1280,656,7,"acer a1-734 iconia talk s"],[1184,720,4,"lenovo xt1700, xt1706, k10a40"],[1187,720,7,"lg k8 (k350)"],[1189,720,5,"ark impulse p2"],[1193,720,7,"lg x power (k220, f750)"],[1196,720,2,"dtac phone m2"],[1198,720,5,"dtac phone t3"],[1205,720,7,"firefly aurii passion"],[1206,720,4,"archos 50 power"],[1208,720,3,"advan i7 plus"],[1217,720,7,"energy sistem energy phone max 2+"],[1238,720,9,"vnpt technology vivas lotus s3 lte"],[1280,720,2,"archos bush spira c2 5"],[1280,736,2,"digma cs1062ml citi 1903 4g"],[1280,737,3,"waywalkers t805g"],[1280,740,3,"casper via l8"],[1280,746,3,"philips tle821l e line 4g"],[1280,752,3,"4good light at200"],[1280,755,7,"leotec letab1020 supernova qi32"],[1356,720,8,"xiaolajiao la-v11"],[1360,720,7,"tecno in5"],[1368,720,7,"tinno p100"],[1280,800,4,"samsung galaxy tab e 8.0 (sm-t375x, sm-t377x)"],[1920,936,4,"panasonic eluga note"],[1920,996,4,"cube technology u83 iplay10"],[1776,1080,4,"fly fs522 cirrus 14"],[1787,1080,5,"lg x cam (k580, f690)"],[1920,1008,6,"alcatel one touch xess (p17aa)"],[1794,1080,3,"ramos mos 1 max"],[1800,1080,4,"archos sense 55 s"],[1815,1080,4,"archos diamond plus"],[1920,1032,5,"virgin media tellytablet"],[1920,1080,2,"infocus m640"],[1920,1104,4,"vestel v tab 7030"],[1920,1116,4,"jty q101"],[1920,1128,2,"archos 80 oxygen"],[2009,1080,4,"tcl 5099"],[1920,1136,4,"asus zenpad 10 (p028 z301m)"]]],["arm mali-t760","760",0,[[854,480,14,"aux t6200l"],[897,540,13,"sony xperia e4g (e20xx)"],[960,540,12,"gionee v381"],[960,568,24,"asus c100pa chromebook flip"],[1024,552,12,"archos 70 helium"],[1024,720,10,"wiz t-8168"],[1188,720,9,"lg h520 magna, h522 prime plus"],[1196,720,9,"acer s57 liquid jade z"],[1280,720,8,"dunetek vitamin a"],[1280,736,8,"archos 80b helium"],[1280,752,8,"frael m10g 4g"],[1280,768,8,"meizu m1"],[1794,1080,6,"sugar 2 ss136 l8560"],[1920,1032,9,"qbic bxp-300 box pc"],[1920,1080,4,"byxpress mphone xone"],[1920,1104,6,"cube technology t7"],[1920,1128,5,"nec lavietab pc-te510bal"],[2048,1440,3,"teclast p98 4g"],[2560,1440,10,"samsung galaxy note 4 (mali-t760, sm-n910x, sm-n916)"]]],["arm mali-t760 mp6","760",0,[[1920,1080,17,"samsung galaxy a8 (mali-t760, sm-a800x, scv32)"],[2048,1536,12,"samsung galaxy tab s 2 8.0 (sm-t710, sm-t715)"],[2560,1532,10,"samsung galaxy note edge (mali-t760, sm-n915x)"],[2560,1600,10,"samsung galaxy tab s 10.5 (mali-t760, sm-t805s)"]]],["arm mali-t760 mp8","760",0,[[1280,768,42,"samsung sm-w2016"],[1920,1080,25,"meizu niux"],[2160,1200,17,"idealens k2"],[2560,1440,12,"le xiang deepoon m2 vr"],[2560,1504,15,"bungbungame kalos 2"]]],["arm mali-t764","764",0,[[1024,600,19,"gpd q9"],[1280,720,15,"gpd xd"],[1280,752,13,"kruger & matz 1064.1g eagle"],[1280,800,13,"pipo p7"],[1920,1008,6,"rockchip mk809 4k tv stick"],[1920,1010,8,"pipo p7 hd"],[1920,1020,5,"rockchip mk903v mini tv"],[1920,1032,7,"acooo oneboard pro+"],[1872,1080,7,"contextmedia wallboard 32 tablet (p-wal-106-yit-01)"],[1920,1080,7,"rockchip cs4k tv box"],[1920,1128,7,"archos 101 oxygen"],[2048,1437,5,"haier pad 971"],[2048,1440,5,"hisense f5281 vidaa pad"],[2560,1504,4,"teclast p90hd"]]],["arm mali-t820","820",0,[[1344,720,5,"lenovo k320t"],[1776,1080,6,"leagoo t5c"],[1920,1008,7,"probox2 ava tv box"],[1920,1080,4,"skyworth coocaa 5s32 n2"]]],["arm mali-t830","830",0,[[1280,720,9,"samsung galaxy on7 (mali-t830, sm-g600x)"],[1280,800,9,"samsung sm-t536 (mali-t830)"],[1776,1080,9,"huawei p10 lite (was-xxx)"],[1794,1080,9,"huawei honor 6x (bln-xxx)"],[1920,1080,5,"samsung galaxy on7 prime 2018 (sm-g611)"],[2033,1080,8,"huawei p smart (fig-xxx)"],[2040,1080,9,"huawei maimang 6 (rne-xxx)"],[1920,1200,5,"samsung galaxy tab a 10.1 (sm-t580, sm-t585)"]]],["arm mali-t860","860",0,[[1184,720,8,"tcl a626"],[1196,720,8,"green orange go t2"],[1280,720,14,"htc one a9s"],[1920,1024,17,"hardkernel odroid-n1 (development board)"],[1920,1032,16,"contextmedia p-wal-108-elc-02"],[1920,1080,7,"htc u play (u-2u)"],[1920,1116,15,"imuz revolution a8"],[1920,1128,15,"rockchip rk3399 (development board)"],[2400,1440,10,"samsung chromebook plus (kevin)"]]],["arm mali-t860 mp2","860",0,[[598,480,25,"cipherlab 9700a"],[1184,720,11,"vernee m5"],[1193,720,11,"lg x power 2 (u+, x500, m-x320, m320)"],[1196,720,11,"lava z25"],[1199,720,11,"lg stylus 3 (m400)"],[1212,720,11,"meeg 306"],[1280,720,10,"oppo r66"],[1336,720,13,"asus pegasus 4s (x018d zb570tl)"],[1344,720,13,"allview x4 soul infinity n"],[1776,1080,7,"benq f55"],[1794,1080,6,"alcatel 7070"],[1798,1080,7,"energy sistem energy phone pro 3"],[1806,1080,8,"tecno phantom 6"],[1807,1080,7,"covia fleaz cp-j55a g07"],[1810,1080,8,"archos 55 diamond 2 plus"],[1920,1080,4,"advan vandroid i55c"],[2004,1080,7,"asus zenfone max plus m1 (x018d zb570tl)"],[1920,1128,7,"verizon qtaxia1"]]],["arm mali-t880","880",0,[[1184,720,22,"doogee mix"],[1280,720,20,"lenovo k8"],[1344,720,18,"casper via f2"],[1776,1080,11,"alcatel 6060 (mali-t880)"],[1794,1080,20,"huawei mate 8 (nxt-xxx)"],[1824,1080,11,"meiigoo m1"],[1920,1080,10,"letv leeco lex650"],[2016,1080,9,"vernee mix 2"],[2064,1080,10,"umi s2 pro"],[2392,1440,12,"huawei honor v8 (knt-al20)"],[2434,1440,11,"huawei honor note 8 premium edition (edi-al10)"],[2560,1440,24,"meizu pro 6 plus"],[2560,1480,10,"huawei dtab compact d-01j (docomo)"],[2560,1600,10,"huawei mediapad m3 (btv-xxx)"]]],["arm mali-t880 mp12","880",0,[[1920,1080,44,"samsung galaxy s7 (sm-g930f)"],[2560,1440,27,"samsung galaxy note 7 (mali-t880, sm-n930)"]]],["arm mali-t880 mp2","880",0,[[1184,720,19,"sony pikachu"],[1376,720,17,"umi s2"],[1776,1080,10,"coolpad a9s-9"],[1800,1080,11,"infinix x603"],[1920,1080,9,"innjoo pro2"]]],["arm mali-t880 mp4","880",0,[[1280,672,18,"mediatek x20 (development board)"],[1794,1080,13,"infocus tsp"],[1800,1080,16,"infinix x602 zero 4 plus"],[1806,1080,16,"tecno phantom a9"],[1810,1080,8,"mobiistar prime x pro"],[1815,1080,16,"tecno phantom 6 plus"],[1920,1080,7,"elephone r9"],[2048,1440,12,"brown tab 1"],[2392,1440,12,"vernee apollo"],[2416,1440,11,"freetel ftj162b kiwami2"],[2560,1440,10,"ivvi i5"]]],["mali-g71","71",0,[[2220,1080,54,"samsung s8+ sm-g955f"]]],["mali-g72","72",0,[[2220,1080,56,"samsung s9+ sm-g965f"]]],["mali-t830","830",0,[[1480,720,10,"samsung gm-j600fn"]]]]\')},884:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["nvidia tegra","",0,[[2048,1440,23,"google nexus 9"]]],["nvidia tegra k1","1",0,[[1920,1008,32,"nvidia jetson tk1 (pm375, development board)"],[1920,1032,12,"lenovo k1 hd (2014)"],[1920,1080,28,"nvidia tegra gk20a (ardbeg, development board)"],[1920,1104,29,"google project tango"],[2048,1536,21,"xiaomi mi pad"],[3840,2088,8,"lenovo thinkvision 28"]]],["nvidia tegra x1","1",0,[[1920,1080,60,"nvidia shield android tv"],[2560,1688,33,"google pixel c"]]]]\')},214:e=>{"use strict";e.exports=JSON.parse(\'["4.0.8",["powervr rogue g6110","6110",0,[[1024,600,11,"dasaita mtcd px5 head unit"],[1280,752,8,"visual land prestige prime 10se"],[1366,720,7,"ditecma m1092r"],[1920,1008,6,"vensmile t051 tv box"],[1920,1016,5,"geekbuying geekbox tv box"],[1920,1032,4,"hannspree hsg1351"],[1920,1080,5,"10moons tv box (rogue g6110)"],[1920,1128,5,"teclast p10"]]],["powervr rogue g6200","6200",0,[[1280,720,15,"infocus m530"],[1280,736,12,"amazon kindle fire hd 8 (5th gen, kfmewi)"],[1280,752,12,"amazon kindle fire hd 10 (5th gen, kftbwi)"],[1280,800,9,"amazon kindle fire hd 7 (4th gen, kfaswi)"],[1794,1080,5,"ubik uno"],[1920,1080,6,"cherry mobile x220 cosmos one plus"],[1920,1152,8,"meizu mx4 (m460, m460a, m461)"],[2392,1440,6,"hasee hl9916004"],[2560,1440,6,"condor allure a100 pgn-607"]]],["powervr rogue g6230","6230",0,[[1920,1008,8,"rikomagic mk80 tv box (tronsmart draco aw80, fantasy a80)"],[1920,1016,7,"cubietech cubieboard 4 (cc-a80, hansen-a80, development board)"],[2048,1440,5,"teclast p98air"],[2048,1464,7,"actions gs900a (development board)"]]],["powervr rogue g6400","6400",0,[[1794,1080,8,"lg f490 liger (g6400)"],[1920,1032,8,"renesas lager"]]],["powervr rogue g6430","6430",0,[[1024,552,26,"asus fonepad 7 (k01f fe171mg)"],[1280,720,27,"asus zenfone 2 (z008 ze550ml)"],[1280,736,20,"asus fonepad 7 (k019 fe375cg)"],[1280,752,27,"asus zenpad 10 (p01t z300cl)"],[1788,1080,8,"lg f490 liger (g6430)"],[1920,1080,15,"asus zenfone zoom (intel z3560, z00xsb zx551ml)"],[1920,1104,11,"asus memo pad 8 ast21 (intel z3580, k015 me581cl)"],[2048,1440,11,"asus zenpad s 8.0 (p01m z580c)"],[2560,1504,9,"dell venue 10 7040"]]],["powervr rogue ge8100","8100",0,[[906,480,8,"tinno k600"],[1184,720,5,"mediatek mt6739 (development board, rogue ge8100)"],[1339,720,5,"vodafone vfd 720"],[1344,720,6,"gionee f205"]]],["powervr rogue ge8300","8300",0,[[1280,752,9,"acer b3-a40 iconia one 10"],[1208,800,8,"verizon qtaki1"],[1920,1128,5,"acer b3-a40 fhd iconia one 10"]]],["powervr rogue gx6250","6250",0,[[688,412,16,"lenovo n23 yoga / flex 11 chromebook"],[1280,672,25,"renesas salvator-x-r8a7796"],[1280,736,25,"mediatek mt8173 (development board)"],[1920,980,10,"google chromebook pixel (2015, rogue gx6250)"],[1920,1016,14,"peloton ruby"],[1920,1020,8,"acer chromebook r13"],[1920,1032,13,"renesas salvator-x-m3"],[1920,1080,12,"xiaomi mibox 3 pro tv box"],[1920,1128,10,"amazon kindle fire hd 10 (2017, kfsuwi)"],[2048,1536,7,"alps jdtab j01"],[2560,1504,7,"onda f109"]]],["powervr rogue gx6650","6650",0,[[1280,672,52,"renesas salvator-x"],[1920,1032,24,"renesas salvator-x (octa core)"]]],["powervr rogue han","han",0,[[1794,1080,6,"ireadygo w3d"],[1920,1080,6,"changhong x6"],[2392,1440,5,"alcatel one touch d820"],[2560,1440,4,"alcatel 6071y phantom"]]],["powervr rogue hood","",0,[[1280,736,16,"dell venue 7 3740"],[1920,1080,12,"lenovo p90"],[1920,1104,9,"dell venue 8 3840"]]],["powervr rogue lando","",0,[[1920,1080,13,"spreadtrum sp9861e (development board, rogue lando)"]]],["powervr rogue marlowe","",0,[[1920,1080,39,"meitu v6 mp1605"],[2560,1440,25,"meizu pro 7 plus"]]]]\')},804:(e,t,n)=>{var i={"./d-adreno.json":622,"./d-amd.json":183,"./d-apple.json":732,"./d-geforce.json":405,"./d-intel.json":178,"./d-nvidia.json":217,"./d-radeon.json":145,"./m-adreno.json":921,"./m-apple-ipad.json":535,"./m-apple.json":438,"./m-intel.json":283,"./m-mali-t.json":327,"./m-mali.json":538,"./m-nvidia.json":884,"./m-powervr.json":214};function r(e){var t=o(e);return n(t)}function o(e){if(!n.o(i,e)){var t=new Error("Cannot find module \'"+e+"\'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}r.keys=function(){return Object.keys(i)},r.resolve=o,e.exports=r,r.id=804},354:(e,t,n)=>{var i,r=function(){function e(e,t){if(!r[e]){r[e]={};for(var n=0;ni;i++){var s=t.charCodeAt(i);n[2*i]=s>>>8,n[2*i+1]=s%256}return n},decompressFromUint8Array:function(e){if(null==e)return o.decompress(e);for(var n=new Array(e.length/2),i=0,r=n.length;r>i;i++)n[i]=256*e[2*i]+e[2*i+1];var s=[];return n.forEach((function(e){s.push(t(e))})),o.decompress(s.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":o._compress(e,6,(function(e){return i.charAt(e)}))},decompressFromEncodedURIComponent:function(t){return null==t?"":""==t?null:(t=t.replace(/ /g,"+"),o._decompress(t.length,32,(function(n){return e(i,t.charAt(n))})))},compress:function(e){return o._compress(e,16,(function(e){return t(e)}))},_compress:function(e,t,n){if(null==e)return"";var i,r,o,s={},a={},d="",c="",l="",h=2,u=3,p=2,m=[],g=0,f=0;for(o=0;oi;i++)g<<=1,f==t-1?(f=0,m.push(n(g)),g=0):f++;for(r=l.charCodeAt(0),i=0;8>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1}else{for(r=1,i=0;p>i;i++)g=g<<1|r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r=0;for(r=l.charCodeAt(0),i=0;16>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1}0==--h&&(h=Math.pow(2,p),p++),delete a[l]}else for(r=s[l],i=0;p>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1;0==--h&&(h=Math.pow(2,p),p++),s[c]=u++,l=String(d)}if(""!==l){if(Object.prototype.hasOwnProperty.call(a,l)){if(l.charCodeAt(0)<256){for(i=0;p>i;i++)g<<=1,f==t-1?(f=0,m.push(n(g)),g=0):f++;for(r=l.charCodeAt(0),i=0;8>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1}else{for(r=1,i=0;p>i;i++)g=g<<1|r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r=0;for(r=l.charCodeAt(0),i=0;16>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1}0==--h&&(h=Math.pow(2,p),p++),delete a[l]}else for(r=s[l],i=0;p>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1;0==--h&&(h=Math.pow(2,p),p++)}for(r=2,i=0;p>i;i++)g=g<<1|1&r,f==t-1?(f=0,m.push(n(g)),g=0):f++,r>>=1;for(;;){if(g<<=1,f==t-1){m.push(n(g));break}f++}return m.join("")},decompress:function(e){return null==e?"":""==e?null:o._decompress(e.length,32768,(function(t){return e.charCodeAt(t)}))},_decompress:function(e,n,i){var r,o,s,a,d,c,l,h=[],u=4,p=4,m=3,g="",f=[],v={val:i(0),position:n,index:1};for(r=0;3>r;r+=1)h[r]=r;for(s=0,d=Math.pow(2,2),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;switch(s){case 0:for(s=0,d=Math.pow(2,8),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;l=t(s);break;case 1:for(s=0,d=Math.pow(2,16),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;l=t(s);break;case 2:return""}for(h[3]=l,o=l,f.push(l);;){if(v.index>e)return"";for(s=0,d=Math.pow(2,m),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;switch(l=s){case 0:for(s=0,d=Math.pow(2,8),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;h[p++]=t(s),l=p-1,u--;break;case 1:for(s=0,d=Math.pow(2,16),c=1;c!=d;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=n,v.val=i(v.index++)),s|=(a>0?1:0)*c,c<<=1;h[p++]=t(s),l=p-1,u--;break;case 2:return f.join("")}if(0==u&&(u=Math.pow(2,m),m++),h[l])g=h[l];else{if(l!==p)return null;g=o+o.charAt(0)}f.push(g),h[p++]=o+g.charAt(0),o=g,0==--u&&(u=Math.pow(2,m),m++)}}};return o}();void 0===(i=function(){return r}.call(t,n,t,e))||(e.exports=i)}},t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={exports:{}};return e[i].call(r.exports,r,r.exports,n),r.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n(607)})().default},577:(e,t)=>{"use strict";t.byteLength=function(e){var t=d(e),n=t[0],i=t[1];return 3*(n+i)/4-i},t.toByteArray=function(e){var t,n,o=d(e),s=o[0],a=o[1],c=new r(function(e,t,n){return 3*(t+n)/4-n}(0,s,a)),l=0,h=a>0?s-4:s;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;return 2===a&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,c[l++]=255&t),1===a&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t),c},t.fromByteArray=function(e){for(var t,i=e.length,r=i%3,o=[],s=16383,a=0,d=i-r;ad?d:a+s));return 1===r?(t=e[i-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===r&&(t=(e[i-2]<<8)+e[i-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"=")),o.join("")};for(var n=[],i=[],r="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,a=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,i){for(var r,o,s=[],a=t;a>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},799:function(e,t){var n,i;this||window,void 0===(i="function"==typeof(n=function(){var e=/^(interactive|loaded|complete)$/,t=window.location?window.location.href:null,n=t&&t.replace(/#.*$/,"").replace(/\\?.*$/,"")||null,i=document.getElementsByTagName("script"),r="readyState"in(i[0]||document.createElement("script")),o=!window.opera||"[object Opera]"!==window.opera.toString(),s="currentScript"in document;"stackTraceLimit"in Error&&Error.stackTraceLimit!==1/0&&(Error.stackTraceLimit,Error.stackTraceLimit=1/0);var a=!1,d=!1;function c(e,t){var n,i=null,r="number"==typeof t;return t=r?Math.round(t):0,"string"==typeof e&&e&&(r?n=e.match(/(data:text\\/javascript(?:;[^,]+)?,.+?|(?:|blob:)(?:http[s]?|file):\\/\\/[\\/]?.+?\\/[^:\\)]*?)(?::\\d+)(?::\\d+)?/):(n=e.match(/^(?:|[^:@]*@|.+\\)@(?=data:text\\/javascript|blob|http[s]?|file)|.+?\\s+(?: at |@)(?:[^:\\(]+ )*[\\(]?)(data:text\\/javascript(?:;[^,]+)?,.+?|(?:|blob:)(?:http[s]?|file):\\/\\/[\\/]?.+?\\/[^:\\)]*?)(?::\\d+)(?::\\d+)?/))&&n[1]||(n=e.match(/\\)@(data:text\\/javascript(?:;[^,]+)?,.+?|(?:|blob:)(?:http[s]?|file):\\/\\/[\\/]?.+?\\/[^:\\)]*?)(?::\\d+)(?::\\d+)?/)),n&&n[1]&&(i=t>0?c(e.slice(e.indexOf(n[0])+n[0].length),t-1):n[1])),i}function l(){if(0===i.length)return null;var t,h,u,p,m,g=[],f=l.skipStackDepth||1;for(t=0;t{"use strict";var t,n="object"==typeof Reflect?Reflect:null,i=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function o(){o.init.call(this)}e.exports=o,e.exports.once=function(e,t){return new Promise((function(n,i){function r(n){e.removeListener(t,o),i(n)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",r),n([].slice.call(arguments))}g(e,t,o,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&g(e,"error",t,{once:!0})}(e,r)}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var s=10;function a(e){if("function"!=typeof e)throw new TypeError(\'The "listener" argument must be of type Function. Received type \'+typeof e)}function d(e){return void 0===e._maxListeners?o.defaultMaxListeners:e._maxListeners}function c(e,t,n,i){var r,o,s,c;if(a(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),s=o[t]),void 0===s)s=o[t]=n,++e._eventsCount;else if("function"==typeof s?s=o[t]=i?[n,s]:[s,n]:i?s.unshift(n):s.push(n),(r=d(e))>0&&s.length>r&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,c=l,console&&console.warn&&console.warn(c)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=l.bind(i);return r.listener=n,i.wrapFn=r,r}function u(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var d=o[e];if(void 0===d)return!1;if("function"==typeof d)i(d,this,t);else{var c=d.length,l=m(d,c);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){s=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},o.prototype.listeners=function(e){return u(this,e,!0)},o.prototype.rawListeners=function(e){return u(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},o.prototype.listenerCount=p,o.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},387:function(e,t){var n;!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(i,r){"use strict";var o=[],s=Object.getPrototypeOf,a=o.slice,d=o.flat?function(e){return o.flat.call(e)}:function(e){return o.concat.apply([],e)},c=o.push,l=o.indexOf,h={},u=h.toString,p=h.hasOwnProperty,m=p.toString,g=m.call(Object),f={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},_=function(e){return null!=e&&e===e.window},y=i.document,E={type:!0,src:!0,nonce:!0,noModule:!0};function S(e,t,n){var i,r,o=(n=n||y).createElement("script");if(o.text=e,t)for(i in E)(r=t[i]||t.getAttribute&&t.getAttribute(i))&&o.setAttribute(i,r);n.head.appendChild(o).parentNode.removeChild(o)}function b(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?h[u.call(e)]||"object":typeof e}var T="3.6.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector",C=function(e,t){return new C.fn.init(e,t)};function x(e){var t=!!e&&"length"in e&&e.length,n=b(e);return!v(e)&&!_(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+F+")"+F+"*"),q=new RegExp(F+"|>"),G=new RegExp(U),z=new RegExp("^"+j+"$"),K={ID:new RegExp("^#("+j+")"),CLASS:new RegExp("^\\\\.("+j+")"),TAG:new RegExp("^("+j+"|[*])"),ATTR:new RegExp("^"+V),PSEUDO:new RegExp("^"+U),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\("+F+"*(even|odd|(([+-]|)(\\\\d*)n|)"+F+"*(?:([+-]|)"+F+"*(\\\\d+)|))"+F+"*\\\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+F+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\("+F+"*((?:-\\\\d)?\\\\d*)"+F+"*\\\\)|)(?=[^-]|$)","i")},W=/HTML$/i,X=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\\\\\[\\\\da-fA-F]{1,6}"+F+"?|\\\\\\\\([^\\\\r\\\\n\\\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},ie=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,re=function(e,t){return t?"\\0"===e?"�":e.slice(0,-1)+"\\\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\\\"+e},oe=function(){u()},se=Ee((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{k.apply(P=N.call(S.childNodes),S.childNodes),P[S.childNodes.length].nodeType}catch(t){k={apply:P.length?function(e,t){O.apply(e,N.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function ae(e,t,i,r){var o,a,c,l,h,m,v,_=t&&t.ownerDocument,S=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==S&&9!==S&&11!==S)return i;if(!r&&(u(t),t=t||p,g)){if(11!==S&&(h=Z.exec(e)))if(o=h[1]){if(9===S){if(!(c=t.getElementById(o)))return i;if(c.id===o)return i.push(c),i}else if(_&&(c=_.getElementById(o))&&y(t,c)&&c.id===o)return i.push(c),i}else{if(h[2])return k.apply(i,t.getElementsByTagName(e)),i;if((o=h[3])&&n.getElementsByClassName&&t.getElementsByClassName)return k.apply(i,t.getElementsByClassName(o)),i}if(n.qsa&&!A[e+" "]&&(!f||!f.test(e))&&(1!==S||"object"!==t.nodeName.toLowerCase())){if(v=e,_=t,1===S&&(q.test(e)||B.test(e))){for((_=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((l=t.getAttribute("id"))?l=l.replace(ie,re):t.setAttribute("id",l=E)),a=(m=s(e)).length;a--;)m[a]=(l?"#"+l:":scope")+" "+ye(m[a]);v=m.join(",")}try{return k.apply(i,_.querySelectorAll(v)),i}catch(t){A(e,!0)}finally{l===E&&t.removeAttribute("id")}}}return d(e.replace($,"$1"),t,i,r)}function de(){var e=[];return function t(n,r){return e.push(n+" ")>i.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function ce(e){return e[E]=!0,e}function le(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function he(e,t){for(var n=e.split("|"),r=n.length;r--;)i.attrHandle[n[r]]=t}function ue(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function me(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ge(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&se(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function fe(e){return ce((function(t){return t=+t,ce((function(n,i){for(var r,o=e([],n.length,t),s=o.length;s--;)n[r=o[s]]&&(n[r]=!(i[r]=n[r]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=ae.support={},o=ae.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!W.test(t||n&&n.nodeName||"HTML")},u=ae.setDocument=function(e){var t,r,s=e?e.ownerDocument||e:S;return s!=p&&9===s.nodeType&&s.documentElement&&(m=(p=s).documentElement,g=!o(p),S!=p&&(r=p.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",oe,!1):r.attachEvent&&r.attachEvent("onunload",oe)),n.scope=le((function(e){return m.appendChild(e).appendChild(p.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=le((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=le((function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=Q.test(p.getElementsByClassName),n.getById=le((function(e){return m.appendChild(e).id=E,!p.getElementsByName||!p.getElementsByName(E).length})),n.getById?(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n,i,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),i=0;o=r[i++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),i.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],f=[],(n.qsa=Q.test(p.querySelectorAll))&&(le((function(e){var t;m.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^=\'\']").length&&f.push("[*^$]="+F+"*(?:\'\'|\\"\\")"),e.querySelectorAll("[selected]").length||f.push("\\\\["+F+"*(?:value|"+L+")"),e.querySelectorAll("[id~="+E+"-]").length||f.push("~="),(t=p.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name=\'\']").length||f.push("\\\\["+F+"*name"+F+"*="+F+"*(?:\'\'|\\"\\")"),e.querySelectorAll(":checked").length||f.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||f.push(".#.+[+~]"),e.querySelectorAll("\\\\\\f"),f.push("[\\\\r\\\\n\\\\f]")})),le((function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&f.push("name"+F+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&f.push(":enabled",":disabled"),m.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&f.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),f.push(",.*:")}))),(n.matchesSelector=Q.test(_=m.matches||m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&le((function(e){n.disconnectedMatch=_.call(e,"*"),_.call(e,"[s!=\'\']:x"),v.push("!=",U)})),f=f.length&&new RegExp(f.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(m.compareDocumentPosition),y=t||Q.test(m.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},w=t?function(e,t){if(e===t)return h=!0,0;var i=!e.compareDocumentPosition-!t.compareDocumentPosition;return i||(1&(i=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===i?e==p||e.ownerDocument==S&&y(S,e)?-1:t==p||t.ownerDocument==S&&y(S,t)?1:l?M(l,e)-M(l,t):0:4&i?-1:1)}:function(e,t){if(e===t)return h=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e==p?-1:t==p?1:r?-1:o?1:l?M(l,e)-M(l,t):0;if(r===o)return ue(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?ue(s[i],a[i]):s[i]==S?-1:a[i]==S?1:0}),p},ae.matches=function(e,t){return ae(e,null,null,t)},ae.matchesSelector=function(e,t){if(u(e),n.matchesSelector&&g&&!A[t+" "]&&(!v||!v.test(t))&&(!f||!f.test(t)))try{var i=_.call(e,t);if(i||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ae.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ae.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return K.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&G.test(n)&&(t=s(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=new RegExp("(^|"+F+")"+e+"("+F+"|$)"))&&C(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(i){var r=ae.attr(i,e);return null==r?"!="===t:!t||(r+="","="===t?r===n:"!="===t?r!==n:"^="===t?n&&0===r.indexOf(n):"*="===t?n&&-1:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function O(e,t,n){return v(t)?C.grep(e,(function(e,i){return!!t.call(e,i,e)!==n})):t.nodeType?C.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?C.grep(e,(function(e){return-1)[^>]*|#([\\w-]+))$/;(C.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:N.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:y,!0)),D.test(i[1])&&C.isPlainObject(t))for(i in t)v(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(r=y.getElementById(i[2]))&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(C):C.makeArray(e,this)}).prototype=C.fn,k=C(y);var M=/^(?:parents|prev(?:Until|All))/,L={children:!0,contents:!0,next:!0,prev:!0};function F(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter((function(){for(var e=0;e\\x20\\t\\r\\n\\f]*)/i,fe=/^$|^module$|\\/(?:java|ecma)script/i;ue=y.createDocumentFragment().appendChild(y.createElement("div")),(pe=y.createElement("input")).setAttribute("type","radio"),pe.setAttribute("checked","checked"),pe.setAttribute("name","t"),ue.appendChild(pe),f.checkClone=ue.cloneNode(!0).cloneNode(!0).lastChild.checked,ue.innerHTML="",f.noCloneChecked=!!ue.cloneNode(!0).lastChild.defaultValue,ue.innerHTML="",f.option=!!ue.lastChild;var ve={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function _e(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&P(e,t)?C.merge([e],n):n}function ye(e,t){for(var n=0,i=e.length;n",""]);var Ee=/<|&#?\\w+;/;function Se(e,t,n,i,r){for(var o,s,a,d,c,l,h=t.createDocumentFragment(),u=[],p=0,m=e.length;p\\s*$/g;function De(e,t){return P(e,"table")&&P(11!==t.nodeType?t:t.firstChild,"tr")&&C(e).children("tbody")[0]||e}function Oe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ke(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ne(e,t){var n,i,r,o,s,a;if(1===t.nodeType){if(Q.hasData(e)&&(a=Q.get(e).events))for(r in Q.remove(t,"handle events"),a)for(n=0,i=a[r].length;n
",2===mt.childNodes.length),C.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(f.createHTMLDocument?((i=(t=y.implementation.createHTMLDocument("")).createElement("base")).href=y.location.href,t.head.appendChild(i)):t=y),o=!n&&[],(r=D.exec(e))?[t.createElement(r[1])]:(r=Se([e],t,o),o&&o.length&&C(o).remove(),C.merge([],r.childNodes)));var i,r,o},C.offset={setOffset:function(e,t,n){var i,r,o,s,a,d,c=C.css(e,"position"),l=C(e),h={};"static"===c&&(e.style.position="relative"),a=l.offset(),o=C.css(e,"top"),d=C.css(e,"left"),("absolute"===c||"fixed"===c)&&-1<(o+d).indexOf("auto")?(s=(i=l.position()).top,r=i.left):(s=parseFloat(o)||0,r=parseFloat(d)||0),v(t)&&(t=t.call(e,n,C.extend({},a))),null!=t.top&&(h.top=t.top-a.top+s),null!=t.left&&(h.left=t.left-a.left+r),"using"in t?t.using.call(e,h):l.css(h)}},C.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){C.offset.setOffset(this,e,t)}));var t,n,i=this[0];return i?i.getClientRects().length?(t=i.getBoundingClientRect(),n=i.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,i=this[0],r={top:0,left:0};if("fixed"===C.css(i,"position"))t=i.getBoundingClientRect();else{for(t=this.offset(),n=i.ownerDocument,e=i.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===C.css(e,"position");)e=e.parentNode;e&&e!==i&&1===e.nodeType&&((r=C(e).offset()).top+=C.css(e,"borderTopWidth",!0),r.left+=C.css(e,"borderLeftWidth",!0))}return{top:t.top-r.top-C.css(i,"marginTop",!0),left:t.left-r.left-C.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===C.css(e,"position");)e=e.offsetParent;return e||se}))}}),C.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;C.fn[e]=function(i){return q(this,(function(e,i,r){var o;if(_(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===r)return o?o[t]:e[i];o?o.scrollTo(n?o.pageXOffset:r,n?r:o.pageYOffset):e[i]=r}),e,i,arguments.length)}})),C.each(["top","left"],(function(e,t){C.cssHooks[t]=qe(f.pixelPosition,(function(e,n){if(n)return n=Be(e,t),Fe.test(n)?C(e).position()[t]+"px":n}))})),C.each({Height:"height",Width:"width"},(function(e,t){C.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,i){C.fn[i]=function(r,o){var s=arguments.length&&(n||"boolean"!=typeof r),a=n||(!0===r||!0===o?"margin":"border");return q(this,(function(t,n,r){var o;return _(t)?0===i.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===r?C.css(t,n,a):C.style(t,n,r,a)}),t,s?r:void 0,s)}}))})),C.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),C.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),(function(e,t){C.fn[t]=function(e,n){return 0{var __WEBPACK_AMD_DEFINE_RESULT__;(function(){"use strict";var ERROR="input is invalid type",WINDOW="object"==typeof window,root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"==typeof self,NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS?root=__webpack_require__.g:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&module.exports,AMD=__webpack_require__.amdO,ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t){return new Md5(!0).update(t)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>2]|=e[o]<>6,d[r++]=128|63&i):i<55296||i>=57344?(d[r++]=224|i>>12,d[r++]=128|i>>6&63,d[r++]=128|63&i):(i=65536+((1023&i)<<10|1023&e.charCodeAt(++o)),d[r++]=240|i>>18,d[r++]=128|i>>12&63,d[r++]=128|i>>6&63,d[r++]=128|63&i);else for(r=this.start;o>2]|=i<>2]|=(192|i>>6)<>2]|=(128|63&i)<=57344?(a[r>>2]|=(224|i>>12)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<>2]|=(240|i>>18)<>2]|=(128|i>>12&63)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<=64?(this.start=r-64,this.hash(),this.hashed=!0):this.start=r}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,i,r,o,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(i=((i=(-1732584194^2004318071&e)+s[1]-117830708)<<12|i>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+i<<0)&(i^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((i=this.h3)^t&(n^i))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(i=((i+=(n^e&(t^n))+s[1]-389564586)<<12|i>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+i<<0)&(i^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(i^t&(n^i))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(i=((i+=(n^e&(t^n))+s[5]+1200080426)<<12|i>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+i<<0)&(i^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(i^t&(n^i))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(i=((i+=(n^e&(t^n))+s[9]-1958414417)<<12|i>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+i<<0)&(i^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(i^t&(n^i))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(i=((i+=(n^e&(t^n))+s[13]-40341101)<<12|i>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+i<<0)&(i^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((i=((i+=(t^n&((e=((e+=(n^i&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|i>>>23)+e<<0)^e&((n=((n+=(e^t&(i^e))+s[11]+643717713)<<14|n>>>18)+i<<0)^i))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((i=((i+=(t^n&((e=((e+=(n^i&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|i>>>23)+e<<0)^e&((n=((n+=(e^t&(i^e))+s[15]-660478335)<<14|n>>>18)+i<<0)^i))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((i=((i+=(t^n&((e=((e+=(n^i&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|i>>>23)+e<<0)^e&((n=((n+=(e^t&(i^e))+s[3]-187363961)<<14|n>>>18)+i<<0)^i))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((i=((i+=(t^n&((e=((e+=(n^i&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|i>>>23)+e<<0)^e&((n=((n+=(e^t&(i^e))+s[7]+1735328473)<<14|n>>>18)+i<<0)^i))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((o=(i=((i+=((r=t^n)^(e=((e+=(r^i)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|i>>>21)+e<<0)^e)^(n=((n+=(o^t)+s[11]+1839030562)<<16|n>>>16)+i<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((o=(i=((i+=((r=t^n)^(e=((e+=(r^i)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|i>>>21)+e<<0)^e)^(n=((n+=(o^t)+s[7]-155497632)<<16|n>>>16)+i<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((o=(i=((i+=((r=t^n)^(e=((e+=(r^i)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|i>>>21)+e<<0)^e)^(n=((n+=(o^t)+s[3]-722521979)<<16|n>>>16)+i<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((o=(i=((i+=((r=t^n)^(e=((e+=(r^i)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|i>>>21)+e<<0)^e)^(n=((n+=(o^t)+s[15]+530742520)<<16|n>>>16)+i<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((i=((i+=(t^((e=((e+=(n^(t|~i))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|i>>>22)+e<<0)^((n=((n+=(e^(i|~t))+s[14]-1416354905)<<15|n>>>17)+i<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((i=((i+=(t^((e=((e+=(n^(t|~i))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|i>>>22)+e<<0)^((n=((n+=(e^(i|~t))+s[10]-1051523)<<15|n>>>17)+i<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((i=((i+=(t^((e=((e+=(n^(t|~i))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|i>>>22)+e<<0)^((n=((n+=(e^(i|~t))+s[6]-1560198380)<<15|n>>>17)+i<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((i=((i+=(t^((e=((e+=(n^(t|~i))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|i>>>22)+e<<0)^((n=((n+=(e^(i|~t))+s[2]+718787259)<<15|n>>>17)+i<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=i+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+i<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,i=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[15&i]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,i=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&i,i>>8&255,i>>16&255,i>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,i="",r=this.array(),o=0;o<15;)e=r[o++],t=r[o++],n=r[o++],i+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=r[o],i+(BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"==")};var exports=createMethod();COMMON_JS?module.exports=exports:(root.md5=exports,AMD&&(__WEBPACK_AMD_DEFINE_RESULT__=function(){return exports}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)))})()},138:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",r=9007199254740991,o="[object Arguments]",s="[object Boolean]",a="[object Date]",d="[object Function]",c="[object GeneratorFunction]",l="[object Map]",h="[object Number]",u="[object Object]",p="[object Promise]",m="[object RegExp]",g="[object Set]",f="[object String]",v="[object Symbol]",_="[object WeakMap]",y="[object ArrayBuffer]",E="[object DataView]",S="[object Float32Array]",b="[object Float64Array]",T="[object Int8Array]",C="[object Int16Array]",x="[object Int32Array]",R="[object Uint8Array]",A="[object Uint8ClampedArray]",w="[object Uint16Array]",I="[object Uint32Array]",P=/\\w*$/,D=/^\\[object .+?Constructor\\]$/,O=/^(?:0|[1-9]\\d*)$/,k={};k[o]=k["[object Array]"]=k[y]=k[E]=k[s]=k[a]=k[S]=k[b]=k[T]=k[C]=k[x]=k[l]=k[h]=k[u]=k[m]=k[g]=k[f]=k[v]=k[R]=k[A]=k[w]=k[I]=!0,k["[object Error]"]=k[d]=k[_]=!1;var N="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,M="object"==typeof self&&self&&self.Object===Object&&self,L=N||M||Function("return this")(),F=t&&!t.nodeType&&t,j=F&&e&&!e.nodeType&&e,V=j&&j.exports===F;function U(e,t){return e.set(t[0],t[1]),e}function H(e,t){return e.add(t),e}function $(e,t,n,i){var r=-1,o=e?e.length:0;for(i&&o&&(n=e[++r]);++r-1},Ae.prototype.set=function(e,t){var n=this.__data__,i=De(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},we.prototype.clear=function(){this.__data__={hash:new Re,map:new(me||Ae),string:new Re}},we.prototype.delete=function(e){return Me(this,e).delete(e)},we.prototype.get=function(e){return Me(this,e).get(e)},we.prototype.has=function(e){return Me(this,e).has(e)},we.prototype.set=function(e,t){return Me(this,e).set(e,t),this},Ie.prototype.clear=function(){this.__data__=new Ae},Ie.prototype.delete=function(e){return this.__data__.delete(e)},Ie.prototype.get=function(e){return this.__data__.get(e)},Ie.prototype.has=function(e){return this.__data__.has(e)},Ie.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Ae){var i=n.__data__;if(!me||i.length<199)return i.push([e,t]),this;n=this.__data__=new we(i)}return n.set(e,t),this};var Fe=le?q(le,Object):function(){return[]},je=function(e){return te.call(e)};function Ve(e,t){return!!(t=null==t?r:t)&&("number"==typeof e||O.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=r}(e.length)&&!Ge(e)}var qe=he||function(){return!1};function Ge(e){var t=ze(e)?te.call(e):"";return t==d||t==c}function ze(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ke(e){return Be(e)?function(e,t){var n=Je(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&Be(e)}(e)&&ee.call(e,"callee")&&(!de.call(e,"callee")||te.call(e)==o)}(e)?function(e,t){for(var n=-1,i=Array(e);++n{var i=NaN,r="[object Symbol]",o=/^\\s+|\\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,d=/^0o[0-7]+$/i,c=parseInt,l="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,h="object"==typeof self&&self&&self.Object===Object&&self,u=l||h||Function("return this")(),p=Object.prototype.toString,m=Math.max,g=Math.min,f=function(){return u.Date.now()};function v(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function _(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&p.call(e)==r}(e))return i;if(v(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=v(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=a.test(e);return n||d.test(e)?c(e.slice(2),n?2:8):s.test(e)?i:+e}e.exports=function(e,t,n){var i,r,o,s,a,d,c=0,l=!1,h=!1,u=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function p(t){var n=i,o=r;return i=r=void 0,c=t,s=e.apply(o,n)}function y(e){var n=e-d;return void 0===d||n>=t||n<0||h&&e-c>=o}function E(){var e=f();if(y(e))return S(e);a=setTimeout(E,function(e){var n=t-(e-d);return h?g(n,o-(e-c)):n}(e))}function S(e){return a=void 0,u&&i?p(e):(i=r=void 0,s)}function b(){var e=f(),n=y(e);if(i=arguments,r=this,d=e,n){if(void 0===a)return function(e){return c=e,a=setTimeout(E,t),l?p(e):s}(d);if(h)return a=setTimeout(E,t),p(d)}return void 0===a&&(a=setTimeout(E,t)),s}return t=_(t)||0,v(n)&&(l=!!n.leading,o=(h="maxWait"in n)?m(_(n.maxWait)||0,t):o,u="trailing"in n?!!n.trailing:u),b.cancel=function(){void 0!==a&&clearTimeout(a),c=0,i=d=r=a=void 0},b.flush=function(){return void 0===a?s:S(f())},b}},47:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",r=1,o=2,s=9007199254740991,a="[object Arguments]",d="[object Array]",c="[object AsyncFunction]",l="[object Boolean]",h="[object Date]",u="[object Error]",p="[object Function]",m="[object GeneratorFunction]",g="[object Map]",f="[object Number]",v="[object Null]",_="[object Object]",y="[object Promise]",E="[object Proxy]",S="[object RegExp]",b="[object Set]",T="[object String]",C="[object Symbol]",x="[object Undefined]",R="[object WeakMap]",A="[object ArrayBuffer]",w="[object DataView]",I=/^\\[object .+?Constructor\\]$/,P=/^(?:0|[1-9]\\d*)$/,D={};D["[object Float32Array]"]=D["[object Float64Array]"]=D["[object Int8Array]"]=D["[object Int16Array]"]=D["[object Int32Array]"]=D["[object Uint8Array]"]=D["[object Uint8ClampedArray]"]=D["[object Uint16Array]"]=D["[object Uint32Array]"]=!0,D[a]=D[d]=D[A]=D[l]=D[w]=D[h]=D[u]=D[p]=D[g]=D[f]=D[_]=D[S]=D[b]=D[T]=D[R]=!1;var O="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,k="object"==typeof self&&self&&self.Object===Object&&self,N=O||k||Function("return this")(),M=t&&!t.nodeType&&t,L=M&&e&&!e.nodeType&&e,F=L&&L.exports===M,j=F&&O.process,V=function(){try{return j&&j.binding&&j.binding("util")}catch(e){}}(),U=V&&V.isTypedArray;function H(e,t){for(var n=-1,i=null==e?0:e.length;++nc))return!1;var h=a.get(e);if(h&&a.get(t))return h==t;var u=-1,p=!0,m=n&o?new Ae:void 0;for(a.set(e,t),a.set(t,e);++u-1},xe.prototype.set=function(e,t){var n=this.__data__,i=Ie(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},Re.prototype.clear=function(){this.size=0,this.__data__={hash:new Ce,map:new(ue||xe),string:new Ce}},Re.prototype.delete=function(e){var t=Me(this,e).delete(e);return this.size-=t?1:0,t},Re.prototype.get=function(e){return Me(this,e).get(e)},Re.prototype.has=function(e){return Me(this,e).has(e)},Re.prototype.set=function(e,t){var n=Me(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},Ae.prototype.add=Ae.prototype.push=function(e){return this.__data__.set(e,i),this},Ae.prototype.has=function(e){return this.__data__.has(e)},we.prototype.clear=function(){this.__data__=new xe,this.size=0},we.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},we.prototype.get=function(e){return this.__data__.get(e)},we.prototype.has=function(e){return this.__data__.has(e)},we.prototype.set=function(e,t){var n=this.__data__;if(n instanceof xe){var i=n.__data__;if(!ue||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new Re(i)}return n.set(e,t),this.size=n.size,this};var Fe=de?function(e){return null==e?[]:(e=Object(e),function(t,n){for(var i=-1,r=null==t?0:t.length,o=0,s=[];++i-1&&e%1==0&&e-1&&e%1==0&&e<=s}function ze(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Ke(e){return null!=e&&"object"==typeof e}var We=U?function(e){return function(t){return e(t)}}(U):function(e){return Ke(e)&&Ge(e.length)&&!!D[Pe(e)]};function Xe(e){return null!=(t=e)&&Ge(t.length)&&!qe(t)?function(e,t){var n=Je(e),i=!n&&$e(e),r=!n&&!i&&Be(e),o=!n&&!i&&!r&&We(e),s=n||i||r||o,a=s?function(e,t){for(var n=-1,i=Array(e);++n{var t=e.exports={v:[{name:"version",reg:/^(\\d*)$/}],o:[{name:"origin",reg:/^(\\S*) (\\d*) (\\d*) (\\S*) IP(\\d) (\\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\\d*) (\\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\\d) (\\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\\w*) (\\d*) ([\\w\\/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\\d*) ([\\w\\-\\.]*)(?:\\s*\\/(\\d*)(?:\\s*\\/(\\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\\d*) ([\\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\\d*)(?: (\\S*) IP(\\d) (\\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\\*|\\d*) trr-int (\\d*)/,names:["payload","value"],format:"rtcp-fb:%d trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\\*|\\d*) ([\\w-_]*)(?: ([\\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\\d+)(?:\\/(\\w+))? (\\S*)(?: (\\S*))?/,names:["value","direction","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+" %s"+(e.config?" %s":"")}},{push:"crypto",reg:/^crypto:(\\d*) ([\\w_]*) (\\S*)(?: (\\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\\w*)/,format:"setup:%s"},{name:"mid",reg:/^mid:([^\\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\\d*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\\d*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\\S*) (\\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\\S*) (\\d*) (\\S*) (\\d*) (\\S*) (\\d*) typ (\\S*)(?: raddr (\\S*) rport (\\d*))?(?: tcptype (\\S*))?(?: generation (\\d*))?(?: network-id (\\d*))?(?: network-cost (\\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),(t+=null!=e["network-id"]?" network-id %d":"%v")+(null!=e["network-cost"]?" network-cost %d":"%v")}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\\d*) ([\\w_]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\\x21\\x23\\x24\\x25\\x26\\x27\\x2A\\x2B\\x2D\\x2E\\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\\s?(\\w*) (\\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\\w_\\/]*) (\\S*)(?: (\\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\\d\\w]+) (\\w+)(?: ([\\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\\\d+|\\\\*)[\\\\s\\\\t]+(send|recv)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*)(?:[\\\\s\\\\t]+(recv|send)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\\\-_~;,]+)(?:\\\\s?(send|recv) ([a-zA-Z0-9\\\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\\s\\t]+([\\S+\\s\\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\\d+(?:$|\\.\\d+))/,format:"framerate:%s"},{push:"invalid",names:["value"]}]};Object.keys(t).forEach((function(e){t[e].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))}))},310:(e,t,n)=>{var i=n(415),r=n(159);t.write=r,t.parse=i.parse,t.parseFmtpConfig=i.parseFmtpConfig,t.parseParams=i.parseParams,t.parsePayloads=i.parsePayloads,t.parseRemoteCandidates=i.parseRemoteCandidates,t.parseImageAttributes=i.parseImageAttributes,t.parseSimulcastStreamList=i.parseSimulcastStreamList},415:(e,t,n)=>{var i=function(e){return String(Number(e))===e?Number(e):e},r=function(e,t,n){var r=e.name&&e.names;e.push&&!t[e.push]?t[e.push]=[]:r&&!t[e.name]&&(t[e.name]={});var o=e.push?{}:r?t[e.name]:t;!function(e,t,n,r){if(r&&!n)t[r]=i(e[1]);else for(var o=0;o{var i=n(296),r=/%[sdv%]/g,o=function(e){var t=1,n=arguments,i=n.length;return e.replace(r,(function(e){if(t>=i)return e;var r=n[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(r);case"%d":return Number(r);case"%v":return""}}))},s=function(e,t,n){var i=[e+"="+(t.format instanceof Function?t.format(t.push?n:n[t.name]):t.format)];if(t.names)for(var r=0;r{"use strict";const t={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\\n").map((e=>e.trim()))},t.splitSections=function(e){return e.split("\\nm=").map(((e,t)=>(t>0?"m="+e:e).trim()+"\\r\\n"))},t.getDescription=function(e){const n=t.splitSections(e);return n&&n[0]},t.getMediaSections=function(e){const n=t.splitSections(e);return n.shift(),n},t.matchPrefix=function(e,n){return t.splitLines(e).filter((e=>0===e.indexOf(n)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const n={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let e=8;e0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\\r\\n"},t.parseFmtp=function(e){const t={};let n;const i=e.substr(e.indexOf(" ")+1).split(";");for(let e=0;e{void 0!==e.parameters[t]?i.push(t+"="+e.parameters[t]):i.push(t)})),t+="a=fmtp:"+n+" "+i.join(";")+"\\r\\n"}return t},t.parseRtcpFb=function(e){const t=e.substr(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",n=e.payloadType;return void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+n+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\\r\\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),n={ssrc:parseInt(e.substr(7,t-7),10)},i=e.indexOf(":",t);return i>-1?(n.attribute=e.substr(t+1,i-t-1),n.value=e.substr(i+1)):n.attribute=e.substr(t+1),n},t.parseSsrcGroup=function(e){const t=e.substr(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((e=>parseInt(e,10)))}},t.getMid=function(e){const n=t.matchPrefix(e,"a=mid:")[0];if(n)return n.substr(6)},t.parseFingerprint=function(e){const t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,n){return{role:"auto",fingerprints:t.matchPrefix(e+n,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let n="a=setup:"+t+"\\r\\n";return e.fingerprints.forEach((e=>{n+="a=fingerprint:"+e.algorithm+" "+e.value+"\\r\\n"})),n},t.parseCryptoLine=function(e){const t=e.substr(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\\r\\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substr(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,n){return t.matchPrefix(e+n,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,n){const i=t.matchPrefix(e+n,"a=ice-ufrag:")[0],r=t.matchPrefix(e+n,"a=ice-pwd:")[0];return i&&r?{usernameFragment:i.substr(12),password:r.substr(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\\r\\na=ice-pwd:"+e.password+"\\r\\n";return e.iceLite&&(t+="a=ice-lite\\r\\n"),t},t.parseRtpParameters=function(e){const n={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},i=t.splitLines(e)[0].split(" ");for(let r=3;r{n.headerExtensions.push(t.parseExtmap(e))})),n},t.writeRtpDescription=function(e,n){let i="";i+="m="+e+" ",i+=n.codecs.length>0?"9":"0",i+=" UDP/TLS/RTP/SAVPF ",i+=n.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\\r\\n",i+="c=IN IP4 0.0.0.0\\r\\n",i+="a=rtcp:9 IN IP4 0.0.0.0\\r\\n",n.codecs.forEach((e=>{i+=t.writeRtpMap(e),i+=t.writeFmtp(e),i+=t.writeRtcpFb(e)}));let r=0;return n.codecs.forEach((e=>{e.maxptime>r&&(r=e.maxptime)})),r>0&&(i+="a=maxptime:"+r+"\\r\\n"),n.headerExtensions&&n.headerExtensions.forEach((e=>{i+=t.writeExtmap(e)})),i},t.parseRtpEncodingParameters=function(e){const n=[],i=t.parseRtpParameters(e),r=-1!==i.fecMechanisms.indexOf("RED"),o=-1!==i.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=s.length>0&&s[0].ssrc;let d;const c=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substr(17).split(" ").map((e=>parseInt(e,10)))));c.length>0&&c[0].length>1&&c[0][0]===a&&(d=c[0][1]),i.codecs.forEach((e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&d&&(t.rtx={ssrc:d}),n.push(t),r&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:o?"red+ulpfec":"red"},n.push(t))}})),0===n.length&&a&&n.push({ssrc:a});let l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substr(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substr(5),10)*.95-16e3:void 0,n.forEach((e=>{e.maxBitrate=l}))),n},t.parseRtcpParameters=function(e){const n={},i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];i&&(n.cname=i.value,n.ssrc=i.ssrc);const r=t.matchPrefix(e,"a=rtcp-rsize");n.reducedSize=r.length>0,n.compound=0===r.length;const o=t.matchPrefix(e,"a=rtcp-mux");return n.mux=o.length>0,n},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\\r\\n"),e.mux&&(t+="a=rtcp-mux\\r\\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\\r\\n"),t},t.parseMsid=function(e){let n;const i=t.matchPrefix(e,"a=msid:");if(1===i.length)return n=i[0].substr(7).split(" "),{stream:n[0],track:n[1]};const r=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return r.length>0?(n=r[0].value.split(" "),{stream:n[0],track:n[1]}):void 0},t.parseSctpDescription=function(e){const n=t.parseMLine(e),i=t.matchPrefix(e,"a=max-message-size:");let r;i.length>0&&(r=parseInt(i[0].substr(19),10)),isNaN(r)&&(r=65536);const o=t.matchPrefix(e,"a=sctp-port:");if(o.length>0)return{port:parseInt(o[0].substr(12),10),protocol:n.fmt,maxMessageSize:r};const s=t.matchPrefix(e,"a=sctpmap:");if(s.length>0){const e=s[0].substr(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:r}}},t.writeSctpDescription=function(e,t){let n=[];return n="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\\r\\n","c=IN IP4 0.0.0.0\\r\\n","a=sctp-port:"+t.port+"\\r\\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\\r\\n","c=IN IP4 0.0.0.0\\r\\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\\r\\n"],void 0!==t.maxMessageSize&&n.push("a=max-message-size:"+t.maxMessageSize+"\\r\\n"),n.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,21)},t.writeSessionBoilerplate=function(e,n,i){let r;const o=void 0!==n?n:2;return r=e||t.generateSessionId(),"v=0\\r\\no="+(i||"thisisadapterortc")+" "+r+" "+o+" IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\n"},t.getDirection=function(e,n){const i=t.splitLines(e);for(let e=0;e>16)+(t>>16)+(n>>16)<<16|65535&n},a=function(e){if("string"!=typeof e)throw new Error("str2binl was passed a non-string");const t=[];for(let n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<>>32-d,n);var a,d},c=function(e,t,n,i,r,o,s){return d(t&n|~t&i,e,t,r,o,s)},l=function(e,t,n,i,r,o,s){return d(t&i|n&~i,e,t,r,o,s)},h=function(e,t,n,i,r,o,s){return d(t^n^i,e,t,r,o,s)},u=function(e,t,n,i,r,o,s){return d(n^(t|~i),e,t,r,o,s)},p=function(e,t){e[t>>5]|=128<>>9<<4)]=t;let n,i,r,o,a=1732584193,d=-271733879,p=-1732584194,m=271733878;for(let t=0;t>2]>>i%4*8+4&15)+t.charAt(e[i>>2]>>i%4*8&15);return n}(p(a(e),8*e.length))},hash:function(e){return function(e){let t="";for(let n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>n%32&255);return t}(p(a(e),8*e.length))}};class g{constructor(e,t,n){this.mechname=e,this.isClientFirst=t,this.priority=n}test(){return!0}onStart(e){this._connection=e}onChallenge(e,t){throw new Error("You should implement challenge handling!")}clientChallenge(e){if(!this.isClientFirst)throw new Error("clientChallenge should not be called if isClientFirst is false!");return this.onChallenge(e)}onFailure(){this._connection=null}onSuccess(){this._connection=null}}const f=function(e){var t,n,i="",r=e.length;for(t=0;t=0&&n<=127?i+=e.charAt(t):n>2047?(i+=String.fromCharCode(224|n>>12&15),i+=String.fromCharCode(128|n>>6&63),i+=String.fromCharCode(128|n>>0&63)):(i+=String.fromCharCode(192|n>>6&31),i+=String.fromCharCode(128|n>>0&63));return i},v=function(e){e=e||{};for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n="",i="",r="";const o=e[t],s="object"==typeof o,a=escape(unescape(s?o.value:o));s&&(n=o.expires?";expires="+o.expires:"",i=o.domain?";domain="+o.domain:"",r=o.path?";path="+o.path:""),document.cookie=t+"="+a+n+i+r}};function _(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var n,i,r,o,s,a,d,c,l=new Array(80),h=1732584193,u=-271733879,p=-1732584194,m=271733878,g=-1009589776;for(n=0;n16&&(n=_(n,8*e.length));for(var i=new Array(16),r=new Array(16),o=0;o<16;o++)i[o]=909522486^n[o],r[o]=1549556828^n[o];var s=_(i.concat(C(t)),512+8*t.length);return _(r.concat(s),672)}function b(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function T(e,t){return e<>>32-t}function C(e){for(var t=[],n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<24-n%32;return t}function x(e){for(var t,n,i="",r=0;r<4*e.length;r+=3)for(t=(e[r>>2]>>8*(3-r%4)&255)<<16|(e[r+1>>2]>>8*(3-(r+1)%4)&255)<<8|e[r+2>>2]>>8*(3-(r+2)%4)&255,n=0;n<4;n++)8*r+6*n>32*e.length?i+="=":i+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-n)&63);return i}function R(e){for(var t="",n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>24-n%32&255);return t}const A={b64_hmac_sha1:function(e,t){return x(S(e,t))},b64_sha1:function(e){return x(_(C(e),8*e.length))},binb2str:R,core_hmac_sha1:S,str_hmac_sha1:function(e,t){return R(S(e,t))},str_sha1:function(e){return R(_(C(e),8*e.length))}};const w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function I(e){const t=w.indexOf(e);return t<0?void 0:t}const P="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function D(e){if(e>=0&&e<64)return P[e]}var O={atob:function(e){if(0===arguments.length)throw new TypeError("1 argument required, but only 0 present.");if((e=(e=`${e}`).replace(/[ \\t\\n\\f\\r]/g,"")).length%4==0&&(e=e.replace(/==?$/,"")),e.length%4==1||/[^+/0-9A-Za-z]/.test(e))return null;let t="",n=0,i=0;for(let r=0;r>16),t+=String.fromCharCode((65280&n)>>8),t+=String.fromCharCode(255&n),n=i=0);return 12===i?(n>>=4,t+=String.fromCharCode(n)):18===i&&(n>>=2,t+=String.fromCharCode((65280&n)>>8),t+=String.fromCharCode(255&n)),t},btoa:function(e){if(0===arguments.length)throw new TypeError("1 argument required, but only 0 present.");let t;for(e=`${e}`,t=0;t255)return null;let n="";for(t=0;t>2,i[1]=(3&e.charCodeAt(t))<<4,e.length>t+1&&(i[1]|=e.charCodeAt(t+1)>>4,i[2]=(15&e.charCodeAt(t+1))<<2),e.length>t+2&&(i[2]|=e.charCodeAt(t+2)>>6,i[3]=63&e.charCodeAt(t+2));for(let e=0;e0)for(let n=0;ne.tagName===t,_xmlGenerator:null,xmlGenerator:()=>(F._xmlGenerator||(F._xmlGenerator=o()),F._xmlGenerator),xmlElement(e){if(!e)return null;const t=F.xmlGenerator().createElement(e);for(let e=1;e(e=(e=(e=(e=e.replace(/\\&/g,"&")).replace(//g,">")).replace(/\'/g,"'")).replace(/"/g,"""),xmlunescape:e=>(e=(e=(e=(e=e.replace(/\\&/g,"&")).replace(/</g,"<")).replace(/>/g,">")).replace(/'/g,"\'")).replace(/"/g,\'"\'),xmlTextNode:e=>F.xmlGenerator().createTextNode(e),xmlHtmlNode(e){let t;return r?t=(new r).parseFromString(e,"text/xml"):(t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e)),t},getText(e){if(!e)return null;let t="";0===e.childNodes.length&&e.nodeType===F.ElementType.TEXT&&(t+=e.nodeValue);for(let n=0;n0&&(o=e.join("; "),t.setAttribute(r,o))}else t.setAttribute(r,o)}for(let n=0;n"string"!=typeof e?e:e.replace(/^\\s+|\\s+$/g,"").replace(/\\\\/g,"\\\\5c").replace(/ /g,"\\\\20").replace(/\\"/g,"\\\\22").replace(/\\&/g,"\\\\26").replace(/\\\'/g,"\\\\27").replace(/\\//g,"\\\\2f").replace(/:/g,"\\\\3a").replace(//g,"\\\\3e").replace(/@/g,"\\\\40"),unescapeNode:e=>"string"!=typeof e?e:e.replace(/\\\\20/g," ").replace(/\\\\22/g,\'"\').replace(/\\\\26/g,"&").replace(/\\\\27/g,"\'").replace(/\\\\2f/g,"/").replace(/\\\\3a/g,":").replace(/\\\\3c/g,"<").replace(/\\\\3e/g,">").replace(/\\\\40/g,"@").replace(/\\\\5c/g,"\\\\"),getNodeFromJid:e=>e.indexOf("@")<0?null:e.split("@")[0],getDomainFromJid(e){const t=F.getBareJidFromJid(e);if(t.indexOf("@")<0)return t;{const e=t.split("@");return e.splice(0,1),e.join("@")}},getResourceFromJid(e){if(!e)return null;const t=e.split("/");return t.length<2?null:(t.splice(0,1),t.join("/"))},getBareJidFromJid:e=>e?e.split("/")[0]:null,_handleError(e){void 0!==e.stack&&F.fatal(e.stack),e.sourceURL?F.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?F.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message):F.fatal("error: "+e.message)},log(e,t){var n;e===this.LogLevel.FATAL&&(null===(n=console)||void 0===n||n.error(t))},debug(e){this.log(this.LogLevel.DEBUG,e)},info(e){this.log(this.LogLevel.INFO,e)},warn(e){this.log(this.LogLevel.WARN,e)},error(e){this.log(this.LogLevel.ERROR,e)},fatal(e){this.log(this.LogLevel.FATAL,e)},serialize(e){if(!e)return null;"function"==typeof e.tree&&(e=e.tree());const t=[...Array(e.attributes.length).keys()].map((t=>e.attributes[t].nodeName));t.sort();let n=t.reduce(((t,n)=>`${t} ${n}="${F.xmlescape(e.attributes.getNamedItem(n).value)}"`),`<${e.nodeName}`);if(e.childNodes.length>0){n+=">";for(let t=0;t"}}n+=""}else n+="/>";return n},_requestId:0,_connectionPlugins:{},addConnectionPlugin(e,t){F._connectionPlugins[e]=t},Builder:class{constructor(e,t){"presence"!==e&&"message"!==e&&"iq"!==e||(t&&!t.xmlns?t.xmlns=F.NS.CLIENT:t||(t={xmlns:F.NS.CLIENT})),this.nodeTree=F.xmlElement(e,t),this.node=this.nodeTree}tree(){return this.nodeTree}toString(){return F.serialize(this.nodeTree)}up(){return this.node=this.node.parentNode,this}root(){return this.node=this.nodeTree,this}attrs(e){for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===e[t]?this.node.removeAttribute(t):this.node.setAttribute(t,e[t]));return this}c(e,t,n){const i=F.xmlElement(e,t,n);return this.node.appendChild(i),"string"!=typeof n&&"number"!=typeof n&&(this.node=i),this}cnode(e){let t;const n=F.xmlGenerator();try{t=void 0!==n.importNode}catch(e){t=!1}const i=t?n.importNode(e,!0):F.copyElement(e);return this.node.appendChild(i),this.node=i,this}t(e){const t=F.xmlTextNode(e);return this.node.appendChild(t),this}h(e){const t=F.xmlGenerator().createElement("body");t.innerHTML=e;const n=F.createHtml(t);for(;n.childNodes.length>0;)this.node.appendChild(n.childNodes[0]);return this}},Handler:function(e,t,n,i,r,o,s){this.handler=e,this.ns=t,this.name=n,this.type=i,this.id=r,this.options=s||{matchBareFromJid:!1,ignoreNamespaceFragment:!1},this.options.matchBare&&(F.warn(\'The "matchBare" option is deprecated, use "matchBareFromJid" instead.\'),this.options.matchBareFromJid=this.options.matchBare,delete this.options.matchBare),this.options.matchBareFromJid?this.from=o?F.getBareJidFromJid(o):null:this.from=o,this.user=!0}};F.Handler.prototype={getNamespace(e){let t=e.getAttribute("xmlns");return t&&this.options.ignoreNamespaceFragment&&(t=t.split("#")[0]),t},namespaceMatch(e){let t=!1;return!this.ns||(F.forEachChild(e,null,(e=>{this.getNamespace(e)===this.ns&&(t=!0)})),t||this.getNamespace(e)===this.ns)},isMatch(e){let t=e.getAttribute("from");this.options.matchBareFromJid&&(t=F.getBareJidFromJid(t));const n=e.getAttribute("type");return!(!this.namespaceMatch(e)||this.name&&!F.isTagEqual(e,this.name)||this.type&&(Array.isArray(this.type)?-1===this.type.indexOf(n):n!==this.type)||this.id&&e.getAttribute("id")!==this.id||this.from&&t!==this.from)},run(e){let t=null;try{t=this.handler(e)}catch(e){throw F._handleError(e),e}return t},toString(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},F.TimedHandler=class{constructor(e,t){this.period=e,this.handler=t,this.lastCalled=(new Date).getTime(),this.user=!0}run(){return this.lastCalled=(new Date).getTime(),this.handler()}reset(){this.lastCalled=(new Date).getTime()}toString(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},F.Connection=class{constructor(e,t){this.service=e,this.options=t||{},this.setProtocol(),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_bind=!1,this.do_session=!1,this.mechanisms={},this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.protocolErrorHandlers={HTTP:{},websocket:{}},this._idleTimeout=null,this._disconnectTimeout=null,this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.do_authentication=!0,this.paused=!1,this.restored=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout((()=>this._onIdle()),100),v(this.options.cookies),this.registerSASLMechanisms(this.options.mechanisms),this.iqFallbackHandler=new F.Handler((e=>this.send(M({type:"error",id:e.getAttribute("id")}).c("error",{type:"cancel"}).c("service-unavailable",{xmlns:F.NS.STANZAS}))),null,"iq",["get","set"]);for(const e in F._connectionPlugins)if(Object.prototype.hasOwnProperty.call(F._connectionPlugins,e)){const t=function(){};t.prototype=F._connectionPlugins[e],this[e]=new t,this[e].init(this)}}setProtocol(){const e=this.options.protocol||"";this.options.worker?this._proto=new F.WorkerWebsocket(this):0===this.service.indexOf("ws:")||0===this.service.indexOf("wss:")||0===e.indexOf("ws")?this._proto=new F.Websocket(this):this._proto=new F.Bosh(this)}reset(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.restored=!1,this._data=[],this._requests=[],this._uniqueId=0}pause(){this.paused=!0}resume(){this.paused=!1}getUniqueId(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t+""}addProtocolErrorHandler(e,t,n){this.protocolErrorHandlers[e][t]=n}connect(e,t,n,i,r,o,s){let a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:3e3;this.jid=e,this.authzid=F.getBareJidFromJid(this.jid),this.authcid=s||F.getNodeFromJid(this.jid),this.pass=t,this.connect_callback=n,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.disconnection_timeout=a,this.domain=F.getDomainFromJid(this.jid),this._changeConnectStatus(F.Status.CONNECTING,null),this._proto._connect(i,r,o)}attach(e,t,n,i,r,o,s){if(this._proto._attach)return this._proto._attach(e,t,n,i,r,o,s);{const e=new Error(\'The "attach" method is not available for your connection protocol\');throw e.name="StropheSessionError",e}}restore(e,t,n,i,r){if(!this._sessionCachingSupported()){const e=new Error(\'The "restore" method can only be used with a BOSH connection.\');throw e.name="StropheSessionError",e}this._proto._restore(e,t,n,i,r)}_sessionCachingSupported(){if(this._proto instanceof F.Bosh){if(!JSON)return!1;try{sessionStorage.setItem("_strophe_","_strophe_"),sessionStorage.removeItem("_strophe_")}catch(e){return!1}return!0}return!1}xmlInput(e){}xmlOutput(e){}rawInput(e){}rawOutput(e){}nextValidRid(e){}send(e){if(null!==e){if("function"==typeof e.sort)for(let t=0;t{r&&this.deleteTimedHandler(r),"error"===e.getAttribute("type")?n&&n(e):t&&t(e)}),null,"presence",null,o);i&&(r=this.addTimedHandler(i,(()=>(this.deleteHandler(e),n&&n(null),!1))))}return this.send(e),o}sendIQ(e,t,n,i){let r=null;"function"==typeof e.tree&&(e=e.tree());let o=e.getAttribute("id");if(o||(o=this.getUniqueId("sendIQ"),e.setAttribute("id",o)),"function"==typeof t||"function"==typeof n){const e=this.addHandler((e=>{r&&this.deleteTimedHandler(r);const i=e.getAttribute("type");if("result"===i)t&&t(e);else{if("error"!==i){const e=new Error(`Got bad IQ type of ${i}`);throw e.name="StropheError",e}n&&n(e)}}),null,"iq",["error","result"],o);i&&(r=this.addTimedHandler(i,(()=>(this.deleteHandler(e),n&&n(null),!1))))}return this.send(e),o}_queueData(e){if(null===e||!e.tagName||!e.childNodes){const e=new Error("Cannot queue non-DOMElement.");throw e.name="StropheError",e}this._data.push(e)}_sendRestart(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout((()=>this._onIdle()),100)}addTimedHandler(e,t){const n=new F.TimedHandler(e,t);return this.addTimeds.push(n),n}deleteTimedHandler(e){this.removeTimeds.push(e)}addHandler(e,t,n,i,r,o,s){const a=new F.Handler(e,t,n,i,r,o,s);return this.addHandlers.push(a),a}deleteHandler(e){this.removeHandlers.push(e);const t=this.addHandlers.indexOf(e);t>=0&&this.addHandlers.splice(t,1)}registerSASLMechanisms(e){this.mechanisms={},(e=e||[F.SASLAnonymous,F.SASLExternal,F.SASLOAuthBearer,F.SASLXOAuth2,F.SASLPlain,F.SASLSHA1]).forEach((e=>this.registerSASLMechanism(e)))}registerSASLMechanism(e){const t=new e;this.mechanisms[t.mechname]=t}disconnect(e){if(this._changeConnectStatus(F.Status.DISCONNECTING,e),e?F.warn("Disconnect was called because: "+e):F.info("Disconnect was called"),this.connected){let e=!1;this.disconnecting=!0,this.authenticated&&(e=L({xmlns:F.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(this.disconnection_timeout,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(e)}else F.warn("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests(),this._doDisconnect()}_changeConnectStatus(e,t,n){for(const n in F._connectionPlugins)if(Object.prototype.hasOwnProperty.call(F._connectionPlugins,n)){const i=this[n];if(i.statusChanged)try{i.statusChanged(e,t)}catch(e){F.error(`${n} plugin caused an exception changing status: ${e}`)}}if(this.connect_callback)try{this.connect_callback(e,t,n)}catch(e){F._handleError(e),F.error(`User connection callback caused an exception: ${e}`)}}_doDisconnect(e){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),F.debug("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.restored=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(F.Status.DISCONNECTED,e),this.connected=!1}_dataRecv(e,t){const n=this._proto._reqToData(e);if(null===n)return;for(this.xmlInput!==F.Connection.prototype.xmlInput&&(n.nodeName===this._proto.strip&&n.childNodes.length?this.xmlInput(n.childNodes[0]):this.xmlInput(n)),this.rawInput!==F.Connection.prototype.rawInput&&(t?this.rawInput(t):this.rawInput(F.serialize(n)));this.removeHandlers.length>0;){const e=this.removeHandlers.pop(),t=this.handlers.indexOf(e);t>=0&&this.handlers.splice(t,1)}for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();const i=n.getAttribute("type");if(null!==i&&"terminate"===i){if(this.disconnecting)return;let e=n.getAttribute("condition");const t=n.getElementsByTagName("conflict");return null!==e?("remote-stream-error"===e&&t.length>0&&(e="conflict"),this._changeConnectStatus(F.Status.CONNFAIL,e)):this._changeConnectStatus(F.Status.CONNFAIL,F.ErrorCondition.UNKOWN_REASON),void this._doDisconnect(e)}F.forEachChild(n,null,(e=>{const t=[];this.handlers=this.handlers.reduce(((n,i)=>{try{!i.isMatch(e)||!this.authenticated&&i.user?n.push(i):(i.run(e)&&n.push(i),t.push(i))}catch(e){F.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}return n}),[]),!t.length&&this.iqFallbackHandler.isMatch(e)&&this.iqFallbackHandler.run(e)}))}_connect_cb(e,t,n){let i,r;F.debug("_connect_cb was called"),this.connected=!0;try{i=this._proto._reqToData(e)}catch(e){if(e.name!==F.ErrorCondition.BAD_FORMAT)throw e;this._changeConnectStatus(F.Status.CONNFAIL,F.ErrorCondition.BAD_FORMAT),this._doDisconnect(F.ErrorCondition.BAD_FORMAT)}if(!i)return;if(this.xmlInput!==F.Connection.prototype.xmlInput&&(i.nodeName===this._proto.strip&&i.childNodes.length?this.xmlInput(i.childNodes[0]):this.xmlInput(i)),this.rawInput!==F.Connection.prototype.rawInput&&(n?this.rawInput(n):this.rawInput(F.serialize(i))),this._proto._connect_cb(i)===F.Status.CONNFAIL)return;if(r=i.getElementsByTagNameNS?i.getElementsByTagNameNS(F.NS.STREAM,"features").length>0:i.getElementsByTagName("stream:features").length>0||i.getElementsByTagName("features").length>0,!r)return void this._proto._no_auth_received(t);const o=Array.from(i.getElementsByTagName("mechanism")).map((e=>this.mechanisms[e.textContent])).filter((e=>e));0!==o.length||0!==i.getElementsByTagName("auth").length?!1!==this.do_authentication&&this.authenticate(o):this._proto._no_auth_received(t)}sortMechanismsByPriority(e){for(let t=0;te[n].priority&&(n=i);if(n!==t){const i=e[t];e[t]=e[n],e[n]=i}}return e}authenticate(e){this._attemptSASLAuth(e)||this._attemptLegacyAuth()}_attemptSASLAuth(e){e=this.sortMechanismsByPriority(e||[]);let t=!1;for(let n=0;n{for(;e.length;)this.deleteHandler(e.pop());return this._onStreamFeaturesAfterSASL(t),!1};return t.push(this._addSysHandler((e=>n(t,e)),null,"stream:features",null,null)),t.push(this._addSysHandler((e=>n(t,e)),F.NS.STREAM,"features",null,null)),this._sendRestart(),!1}_onStreamFeaturesAfterSASL(e){this.features=e;for(let t=0;t0&&(t=F.ErrorCondition.CONFLICT),this._changeConnectStatus(F.Status.AUTHFAIL,t,e),!1}const t=e.getElementsByTagName("bind");if(!(t.length>0))return F.warn("Resource binding failed."),this._changeConnectStatus(F.Status.AUTHFAIL,null,e),!1;{const e=t[0].getElementsByTagName("jid");e.length>0&&(this.authenticated=!0,this.jid=F.getText(e[0]),this.do_session?this._establishSession():this._changeConnectStatus(F.Status.CONNECTED,null))}}_establishSession(){if(!this.do_session)throw new Error(`Strophe.Connection.prototype._establishSession called but apparently ${F.NS.SESSION} wasn\'t advertised by the server`);this._addSysHandler(this._onSessionResultIQ.bind(this),null,null,null,"_session_auth_2"),this.send(M({type:"set",id:"_session_auth_2"}).c("session",{xmlns:F.NS.SESSION}).tree())}_onSessionResultIQ(e){if("result"===e.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(F.Status.CONNECTED,null);else if("error"===e.getAttribute("type"))return this.authenticated=!1,F.warn("Session creation failed."),this._changeConnectStatus(F.Status.AUTHFAIL,null,e),!1;return!1}_sasl_failure_cb(e){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(F.Status.AUTHFAIL,null,e),!1}_auth2_cb(e){return"result"===e.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(F.Status.CONNECTED,null)):"error"===e.getAttribute("type")&&(this._changeConnectStatus(F.Status.AUTHFAIL,null,e),this.disconnect("authentication failed")),!1}_addSysTimedHandler(e,t){const n=new F.TimedHandler(e,t);return n.user=!1,this.addTimeds.push(n),n}_addSysHandler(e,t,n,i,r){const o=new F.Handler(e,t,n,i,r);return o.user=!1,this.addHandlers.push(o),o}_onDisconnectTimeout(){return F.debug("_onDisconnectTimeout was called"),this._changeConnectStatus(F.Status.CONNTIMEOUT,null),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1}_onIdle(){for(;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;){const e=this.removeTimeds.pop(),t=this.timedHandlers.indexOf(e);t>=0&&this.timedHandlers.splice(t,1)}const e=(new Date).getTime(),t=[];for(let n=0;nthis._onIdle()),100))}},F.SASLMechanism=g,F.SASLAnonymous=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"ANONYMOUS",arguments.length>1&&void 0!==arguments[1]&&arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:20)}test(e){return null===e.authcid}},F.SASLPlain=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"PLAIN",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:50)}test(e){return null!==e.authcid}onChallenge(e){const{authcid:t,authzid:n,domain:i,pass:r}=e;if(!i)throw new Error("SASLPlain onChallenge: domain is not defined!");let o=n!==`${t}@${i}`?n:"";return o+="\\0",o+=t,o+="\\0",o+=r,f(o)}},F.SASLSHA1=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"SCRAM-SHA-1",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:60)}test(e){return null!==e.authcid}onChallenge(e,t){let n,i,r,o,s,a,d,c,l="c=biws,",h=`${e._sasl_data["client-first-message-bare"]},${t},`;const u=e._sasl_data.cnonce,p=/([a-z]+)=([^,]+)(,|$)/;for(;t.match(p);){const e=t.match(p);switch(t=t.replace(e[0],""),e[1]){case"r":n=e[2];break;case"s":i=e[2];break;case"i":r=e[2]}}if(n.slice(0,u.length)!==u)return e._sasl_data={},e._sasl_failure_cb();l+="r="+n,h+=l,i=atob(i),i+="\\0\\0\\0";const m=f(e.pass);for(o=a=A.core_hmac_sha1(m,i),d=1;d0&&void 0!==arguments[0]?arguments[0]:"OAUTHBEARER",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:40)}test(e){return null!==e.pass}onChallenge(e){let t="n,";return null!==e.authcid&&(t=t+"a="+e.authzid),t+=",",t+="",t+="auth=Bearer ",t+=e.pass,t+="",t+="",f(t)}},F.SASLExternal=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"EXTERNAL",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:10)}onChallenge(e){return e.authcid===e.authzid?"":e.authzid}},F.SASLXOAuth2=class extends g{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"X-OAUTH2",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:30)}test(e){return null!==e.pass}onChallenge(e){let t="\\0";return null!==e.authcid&&(t+=e.authzid),t+="\\0",t+=e.pass,f(t)}};var j={Strophe:F,$build:k,$iq:M,$msg:N,$pres:L,SHA1:A,MD5:m,b64_hmac_sha1:A.b64_hmac_sha1,b64_sha1:A.b64_sha1,str_hmac_sha1:A.str_hmac_sha1,str_sha1:A.str_sha1};F.Request=class{constructor(e,t,n,i){this.id=++F._requestId,this.xmlData=e,this.data=F.serialize(e),this.origFunc=t,this.func=t,this.rid=n,this.date=NaN,this.sends=i||0,this.abort=!1,this.dead=null,this.age=function(){return this.date?(new Date-this.date)/1e3:0},this.timeDead=function(){return this.dead?(new Date-this.dead)/1e3:0},this.xhr=this._newXHR()}getResponse(){let e=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(e=this.xhr.responseXML.documentElement,"parsererror"===e.tagName)throw F.error("invalid response received"),F.error("responseText: "+this.xhr.responseText),F.error("responseXML: "+F.serialize(this.xhr.responseXML)),new Error("parsererror")}else if(this.xhr.responseText){if(F.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."),e=(new r).parseFromString(this.xhr.responseText,"application/xml").documentElement,!e)throw new Error("Parsing produced null node");if(e.querySelector("parsererror")){F.error("invalid response received: "+e.querySelector("parsererror").textContent),F.error("responseText: "+this.xhr.responseText);const t=new Error;throw t.name=F.ErrorCondition.BAD_FORMAT,t}}return e}_newXHR(){let e=null;return window.XMLHttpRequest?(e=new XMLHttpRequest,e.overrideMimeType&&e.overrideMimeType("text/xml; charset=utf-8")):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP")),e.onreadystatechange=this.func.bind(null,this),e}},F.Bosh=class e{constructor(e){this._conn=e,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this.errors=0,this.inactivity=null,this.lastResponseHeaders=null,this._requests=[]}_buildBody(){const e=k("body",{rid:this.rid++,xmlns:F.NS.HTTPBIND});return null!==this.sid&&e.attrs({sid:this.sid}),this._conn.options.keepalive&&this._conn._sessionCachingSupported()&&this._cacheSession(),e}_reset(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.errors=0,this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_connect(e,t,n){this.wait=e||this.wait,this.hold=t||this.hold,this.errors=0;const i=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":F.NS.BOSH});n&&i.attrs({route:n});const r=this._conn._connect_cb;this._requests.push(new F.Request(i.tree(),this._onRequestStateChange.bind(this,r.bind(this._conn)),i.tree().getAttribute("rid"))),this._throttledRequestHandler()}_attach(e,t,n,i,r,o,s){this._conn.jid=e,this.sid=t,this.rid=n,this._conn.connect_callback=i,this._conn.domain=F.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=r||this.wait,this.hold=o||this.hold,this.window=s||this.window,this._conn._changeConnectStatus(F.Status.ATTACHED,null)}_restore(e,t,n,i,r){const o=JSON.parse(window.sessionStorage.getItem("strophe-bosh-session"));if(!(null!=o&&o.rid&&o.sid&&o.jid&&(null==e||F.getBareJidFromJid(o.jid)===F.getBareJidFromJid(e)||null===F.getNodeFromJid(e)&&F.getDomainFromJid(o.jid)===e))){const e=new Error("_restore: no restoreable session.");throw e.name="StropheSessionError",e}this._conn.restored=!0,this._attach(o.jid,o.sid,o.rid,t,n,i,r)}_cacheSession(){this._conn.authenticated?this._conn.jid&&this.rid&&this.sid&&window.sessionStorage.setItem("strophe-bosh-session",JSON.stringify({jid:this._conn.jid,rid:this.rid,sid:this.sid})):window.sessionStorage.removeItem("strophe-bosh-session")}_connect_cb(e){const t=e.getAttribute("type");if(null!==t&&"terminate"===t){let t=e.getAttribute("condition");F.error("BOSH-Connection failed: "+t);const n=e.getElementsByTagName("conflict");return null!==t?("remote-stream-error"===t&&n.length>0&&(t="conflict"),this._conn._changeConnectStatus(F.Status.CONNFAIL,t)):this._conn._changeConnectStatus(F.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(t),F.Status.CONNFAIL}this.sid||(this.sid=e.getAttribute("sid"));const n=e.getAttribute("requests");n&&(this.window=parseInt(n,10));const i=e.getAttribute("hold");i&&(this.hold=parseInt(i,10));const r=e.getAttribute("wait");r&&(this.wait=parseInt(r,10));const o=e.getAttribute("inactivity");o&&(this.inactivity=parseInt(o,10))}_disconnect(e){this._sendTerminate(e)}_doDisconnect(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_emptyQueue(){return 0===this._requests.length}_callProtocolErrorHandlers(t){const n=e._getRequestStatus(t),i=this._conn.protocolErrorHandlers.HTTP[n];i&&i.call(this,n)}_hitError(e){this.errors++,F.warn("request errored, status: "+e+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()}_no_auth_received(e){F.warn("Server did not yet offer a supported authentication mechanism. Sending a blank poll request."),e=e?e.bind(this._conn):this._conn._connect_cb.bind(this._conn);const t=this._buildBody();this._requests.push(new F.Request(t.tree(),this._onRequestStateChange.bind(this,e),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}_onDisconnectTimeout(){this._abortAllRequests()}_abortAllRequests(){for(;this._requests.length>0;){const e=this._requests.pop();e.abort=!0,e.xhr.abort(),e.xhr.onreadystatechange=function(){}}}_onIdle(){const e=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===e.length&&!this._conn.disconnecting&&(F.debug("no requests during idle cycle, sending blank request"),e.push(null)),!this._conn.paused){if(this._requests.length<2&&e.length>0){const t=this._buildBody();for(let n=0;n0){const e=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(F.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),e>Math.floor(F.TIMEOUT*this.wait)&&(F.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(F.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}}static _getRequestStatus(e,t){let n;if(4===e.xhr.readyState)try{n=e.xhr.status}catch(e){F.error("Caught an error while retrieving a request\'s status, reqStatus: "+n)}return void 0===n&&(n="number"==typeof t?t:0),n}_onRequestStateChange(t,n){if(F.debug("request id "+n.id+"."+n.sends+" state changed to "+n.xhr.readyState),n.abort)return void(n.abort=!1);if(4!==n.xhr.readyState)return;const i=e._getRequestStatus(n);if(this.lastResponseHeaders=n.xhr.getAllResponseHeaders(),this._conn.disconnecting&&i>=400)return this._hitError(i),void this._callProtocolErrorHandlers(n);const r=this._requests[0]===n,o=this._requests[1]===n,s=i>0&&i<500,a=n.sends>this._conn.maxRetries;(s||a)&&(this._removeRequest(n),F.debug("request id "+n.id+" should now be removed")),200===i?((o||r&&this._requests.length>0&&this._requests[0].age()>Math.floor(F.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(n.rid)+1),F.debug("request id "+n.id+"."+n.sends+" got 200"),t(n),this.errors=0):0===i||i>=400&&i<600||i>=12e3?(F.error("request id "+n.id+"."+n.sends+" error "+i+" happened"),this._hitError(i),this._callProtocolErrorHandlers(n),i>=400&&i<500&&(this._conn._changeConnectStatus(F.Status.DISCONNECTING,null),this._conn._doDisconnect())):F.error("request id "+n.id+"."+n.sends+" error "+i+" happened"),s||a?a&&!this._conn.connected&&this._conn._changeConnectStatus(F.Status.CONNFAIL,"giving-up"):this._throttledRequestHandler()}_processRequest(t){let n=this._requests[t];const i=e._getRequestStatus(n,-1);if(n.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();const r=n.age(),o=!isNaN(r)&&r>Math.floor(F.TIMEOUT*this.wait),s=null!==n.dead&&n.timeDead()>Math.floor(F.SECONDARY_TIMEOUT*this.wait),a=4===n.xhr.readyState&&(i<1||i>=500);if((o||s||a)&&(s&&F.error(`Request ${this._requests[t].id} timed out (secondary), restarting`),n.abort=!0,n.xhr.abort(),n.xhr.onreadystatechange=function(){},this._requests[t]=new F.Request(n.xmlData,n.origFunc,n.rid,n.sends),n=this._requests[t]),0===n.xhr.readyState){F.debug("request id "+n.id+"."+n.sends+" posting");try{const e=this._conn.options.contentType||"text/xml; charset=utf-8";n.xhr.open("POST",this._conn.service,!this._conn.options.sync),void 0!==n.xhr.setRequestHeader&&n.xhr.setRequestHeader("Content-Type",e),this._conn.options.withCredentials&&(n.xhr.withCredentials=!0)}catch(e){return F.error("XHR open failed: "+e.toString()),this._conn.connected||this._conn._changeConnectStatus(F.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}const e=()=>{if(n.date=new Date,this._conn.options.customHeaders){const e=this._conn.options.customHeaders;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.xhr.setRequestHeader(t,e[t])}n.xhr.send(n.data)};if(n.sends>1){const t=1e3*Math.min(Math.floor(F.TIMEOUT*this.wait),Math.pow(n.sends,3));setTimeout((function(){e()}),t)}else e();n.sends++,this._conn.xmlOutput!==F.Connection.prototype.xmlOutput&&(n.xmlData.nodeName===this.strip&&n.xmlData.childNodes.length?this._conn.xmlOutput(n.xmlData.childNodes[0]):this._conn.xmlOutput(n.xmlData)),this._conn.rawOutput!==F.Connection.prototype.rawOutput&&this._conn.rawOutput(n.data)}else F.debug("_processRequest: "+(0===t?"first":"second")+" request has readyState of "+n.xhr.readyState)}_removeRequest(e){F.debug("removing request");for(let t=this._requests.length-1;t>=0;t--)e===this._requests[t]&&this._requests.splice(t,1);e.xhr.onreadystatechange=function(){},this._throttledRequestHandler()}_restartRequest(e){const t=this._requests[e];null===t.dead&&(t.dead=new Date),this._processRequest(e)}_reqToData(e){try{return e.getResponse()}catch(e){if("parsererror"!==e.message)throw e;this._conn.disconnect("strophe-parsererror")}}_sendTerminate(e){F.debug("_sendTerminate was called");const t=this._buildBody().attrs({type:"terminate"});e&&t.cnode(e.tree());const n=new F.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"));this._requests.push(n),this._throttledRequestHandler()}_send(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout((()=>this._conn._onIdle()),100)}_sendRestart(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)}_throttledRequestHandler(){this._requests?F.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):F.debug("_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)this._onOpen(),this.socket.onerror=e=>this._onError(e),this.socket.onclose=e=>this._onClose(e),this.socket.onmessage=e=>this._onInitialMessage(e)}_connect_cb(e){if(this._checkStreamError(e,F.Status.CONNFAIL))return F.Status.CONNFAIL}_handleStreamStart(e){let t=!1;const n=e.getAttribute("xmlns");"string"!=typeof n?t="Missing xmlns in ":n!==F.NS.FRAMING&&(t="Wrong xmlns in : "+n);const i=e.getAttribute("version");return"string"!=typeof i?t="Missing version in ":"1.0"!==i&&(t="Wrong version in : "+i),!t||(this._conn._changeConnectStatus(F.Status.CONNFAIL,t),this._conn._doDisconnect(),!1)}_onInitialMessage(e){if(0===e.data.indexOf("\\s*)*/,"");if(""===t)return;const n=(new r).parseFromString(t,"text/xml").documentElement;this._conn.xmlInput(n),this._conn.rawInput(e.data),this._handleStreamStart(n)&&this._connect_cb(n)}else if(0===e.data.indexOf("=0&&n.indexOf("wss:")>=0||e.indexOf("ws:")>=0)&&(this._conn._changeConnectStatus(F.Status.REDIRECT,"Received see-other-uri, resetting connection"),this._conn.reset(),this._conn.service=n,this._connect())}else this._conn._changeConnectStatus(F.Status.CONNFAIL,"Received closing stream"),this._conn._doDisconnect()}else{this._replaceMessageHandler();const t=this._streamWrap(e.data),n=(new r).parseFromString(t,"text/xml").documentElement;this._conn._connect_cb(n,null,e.data)}}_replaceMessageHandler(){this.socket.onmessage=e=>this._onMessage(e)}_disconnect(e){if(this.socket&&this.socket.readyState!==i.CLOSED){e&&this._conn.send(e);const t=k("close",{xmlns:F.NS.FRAMING});this._conn.xmlOutput(t.tree());const n=F.serialize(t);this._conn.rawOutput(n);try{this.socket.send(n)}catch(e){F.warn("Couldn\'t send tag.")}}setTimeout((()=>this._conn._doDisconnect()),0)}_doDisconnect(){F.debug("WebSockets _doDisconnect was called"),this._closeSocket()}_streamWrap(e){return""+e+""}_closeSocket(){if(this.socket)try{this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,this.socket.close()}catch(e){F.debug(e.message)}this.socket=null}_emptyQueue(){return!0}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(F.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected&&this.socket?(F.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(F.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):F.debug("Websocket closed")}_no_auth_received(e){F.error("Server did not offer a supported authentication mechanism"),this._conn._changeConnectStatus(F.Status.CONNFAIL,F.ErrorCondition.NO_AUTH_MECH),e&&e.call(this._conn),this._conn._doDisconnect()}_onDisconnectTimeout(){}_abortAllRequests(){}_onError(e){F.error("Websocket error "+JSON.stringify(e)),this._conn._changeConnectStatus(F.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._disconnect()}_onIdle(){const e=this._conn._data;if(e.length>0&&!this._conn.paused){for(let t=0;t\';if(e.data===n)return this._conn.rawInput(n),this._conn.xmlInput(e),void(this._conn.disconnecting||this._conn._doDisconnect());if(0===e.data.search("{var t;null===(t=console)||void 0===t||t.error(e),F.log(F.LogLevel.ERROR,`Shared Worker Error: ${e}`)}}get socket(){return{send:e=>this.worker.port.postMessage(["send",e])}}_connect(){this._messageHandler=e=>this._onInitialMessage(e),this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_connect",this._conn.service,this._conn.jid])}_attach(e){this._messageHandler=e=>this._onMessage(e),this._conn.connect_callback=e,this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_attach",this._conn.service])}_attachCallback(e,t){e===F.Status.ATTACHED?(this._conn.jid=t,this._conn.authenticated=!0,this._conn.connected=!0,this._conn.restored=!0,this._conn._changeConnectStatus(F.Status.ATTACHED)):e===F.Status.ATTACHFAIL&&(this._conn.authenticated=!1,this._conn.connected=!1,this._conn.restored=!1,this._conn._changeConnectStatus(F.Status.ATTACHFAIL))}_disconnect(e,t){t&&this._conn.send(t);const n=k("close",{xmlns:F.NS.FRAMING});this._conn.xmlOutput(n.tree());const i=F.serialize(n);this._conn.rawOutput(i),this.worker.port.postMessage(["send",i]),this._conn._doDisconnect()}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(F.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected?(F.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(F.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):F.debug("Websocket closed")}_closeSocket(){this.worker.port.postMessage(["_closeSocket"])}_replaceMessageHandler(){this._messageHandler=e=>this._onMessage(e)}_onWorkerMessage(e){const{data:t}=e,n=t[0];if("_onMessage"===n)this._messageHandler(t[1]);else if(n in this)try{this[n].apply(this,e.data.slice(1))}catch(e){F.log(F.LogLevel.ERROR,e)}else if("log"===n){const e=t[1],n=t[2];F.log(V[e],n)}else F.log(F.LogLevel.ERROR,`Found unhandled service worker message: ${t}`)}},t.$build=j.$build,t.$iq=j.$iq,t.$msg=j.$msg,t.$pres=j.$pres,t.Strophe=j.Strophe;const{b64_sha1:U}=A;e.$build=k,e.$iq=M,e.$msg=N,e.$pres=L,e.Strophe=F,e.b64_sha1=U,Object.defineProperty(e,"__esModule",{value:!0})}(t)},352:function(e,t,n){!function(e){"use strict";e.Strophe.addConnectionPlugin("disco",{_connection:null,_identities:[],_features:[],_items:[],init:function(t){this._connection=t,this._identities=[],this._features=[],this._items=[],t.addHandler(this._onDiscoInfo.bind(this),e.Strophe.NS.DISCO_INFO,"iq","get",null,null),t.addHandler(this._onDiscoItems.bind(this),e.Strophe.NS.DISCO_ITEMS,"iq","get",null,null)},addIdentity:function(e,t,n,i){for(var r=0;r0,this._originalOnStreamFeaturesAfterSASL.apply(this._c,arguments)},statusChanged:function(t){if(this._connectionStatus=t,this.getResumeToken()||t!==e.Strophe.Status.CONNECTED&&t!==e.Strophe.Status.DISCONNECTED)if(t===e.Strophe.Status.BINDREQUIRED){this._c.jid=this._storedJid;for(const e of(this._resumeState.handlers||[]).concat(this._resumeState.addHandlers||[]))this._c._addSysHandler(e.handler,e.ns,e.name,e.type,e.id);for(const e of(this._resumeState.timedHandlers||[]).concat(this._resumeState.addTimeds))this._c.addTimedHandler(e.period,e.handler);for(const e of(this._resumeState.removeTimeds||[]).concat(this._resumeState.removeHandlers||[]))this._c.deleteTimedHandler(e);this._c.send(e.$build("resume",{xmlns:this._NS,h:this._clientProcessedStanzasCounter,previd:this._resumeToken})),this._c.flush()}else t===e.Strophe.Status.ERROR&&(this.logging&&e.Strophe.debug("SM cleared resume token on error"),this._resumeToken=void 0);else this.logging&&e.Strophe.debug("SM reset state"),this._serverProcesssedStanzasCounter=0,this._clientProcessedStanzasCounter=0,this._clientSentStanzasCounter=0,this._isStreamManagementEnabled=!1,this._requestResponseIntervalCount=0,this._resuming=!1,t===e.Strophe.Status.DISCONNECTED&&(this._isSupported=!1),this._unacknowledgedStanzas=[],this._requestHandler&&this._c.deleteHandler(this._requestHandler),this._incomingHandler&&this._c.deleteHandler(this._incomingHandler),this._requestHandler=this._c.addHandler(this._handleServerRequestHandler.bind(this),this._NS,"r"),this._ackHandler=this._c.addHandler(this._handleServerAck.bind(this),this._NS,"a"),this._incomingHandler=this._c.addHandler(this._incomingStanzaHandler.bind(this)),this._enabledHandler=this._c._addSysHandler(this._handleEnabled.bind(this),this._NS,"enabled"),this._resumeFailedHandler=this._c._addSysHandler(this._handleResumeFailed.bind(this),this._NS,"failed"),this._resumedHandler=this._c._addSysHandler(this._handleResumed.bind(this),this._NS,"resumed")},xmlOutput:function(t){return(e.Strophe.isTagEqual(t,"iq")||e.Strophe.isTagEqual(t,"presence")||e.Strophe.isTagEqual(t,"message"))&&this._increaseSentStanzasCounter(t),this._originalXMLOutput.call(this._c,t)},_handleEnabled:function(e){return this._isStreamManagementEnabled=!0,this._resumeToken="true"===e.getAttribute("resume")&&e.getAttribute("id"),this._c.resume(),!0},_handleResumeFailed:function(t){const n=t&&(t.firstElementChild&&t.firstElementChild.tagName||t.firstChild&&t.firstChild.tagName);return this._c._changeConnectStatus(e.Strophe.Status.ERROR,n,t),this._c._doDisconnect(),!0},_handleResumed:function(t){var n=parseInt(t.getAttribute("h"));if(this._handleAcknowledgedStanzas(n,this._serverProcesssedStanzasCounter),this._resuming=!1,this._c.do_bind=!1,this._c.authenticated=!0,this._c.restored=!0,this._unacknowledgedStanzas.length>0){this.logging&&e.Strophe.debug("SM Sending unacknowledged stanzas",this._unacknowledgedStanzas);for(const e of this._unacknowledgedStanzas)this._c.send(e)}else this.logging&&e.Strophe.debug("SM No unacknowledged stanzas",this._unacknowledgedStanzas);return this._c._changeConnectStatus(e.Strophe.Status.CONNECTED,null),!0},_incomingStanzaHandler:function(t){return(e.Strophe.isTagEqual(t,"iq")||e.Strophe.isTagEqual(t,"presence")||e.Strophe.isTagEqual(t,"message"))&&(this._increaseReceivedStanzasCounter(),this.autoSendCountOnEveryIncomingStanza&&this._answerProcessedStanzas()),!0},_handleAcknowledgedStanzas:function(t,n){var i=t-n;i<0&&this._throwError("New reported stanza count lower than previous. New: "+t+" - Previous: "+n),i>this._unacknowledgedStanzas.length&&this._throwError("Higher reported acknowledge count than unacknowledged stanzas. Reported Acknowledge Count: "+i+" - Unacknowledge Stanza Count: "+this._unacknowledgedStanzas.length+" - New: "+t+" - Previous: "+n);for(var r=0;r0&&e.Strophe.warn("SM Unacknowledged stanzas",this._unacknowledgedStanzas),this._serverProcesssedStanzasCounter=t,this.requestResponseInterval>0&&(this._requestResponseIntervalCount=0)},_handleServerRequestHandler:function(){return this._answerProcessedStanzas(),!0},_handleServerAck:function(e){var t=parseInt(e.getAttribute("h"));return this._handleAcknowledgedStanzas(t,this._serverProcesssedStanzasCounter),!0},_answerProcessedStanzas:function(){this._isStreamManagementEnabled&&this._c.send(e.$build("a",{xmlns:this._NS,h:this._clientProcessedStanzasCounter}))},_increaseSentStanzasCounter:function(t){if(this._isStreamManagementEnabled){if(-1!==this._unacknowledgedStanzas.indexOf(t))return;this._unacknowledgedStanzas.push(t),this._clientSentStanzasCounter++,this.requestResponseInterval>0&&(this._requestResponseIntervalCount++,this._requestResponseIntervalCount===this.requestResponseInterval&&setTimeout((()=>{this._connectionStatus===e.Strophe.Status.CONNECTED&&this.requestAcknowledgement()}),1))}},_increaseReceivedStanzasCounter:function(){this._isStreamManagementEnabled&&this._clientProcessedStanzasCounter++},_throwError:function(t){throw e.Strophe.error(t),new Error(t)}})}(n(33))},144:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const n=[];for(let e=0;e<256;++e)n.push((e+256).toString(16).substr(1));t.default=function(e,t){const i=t||0,r=n;return(r[e[i+0]]+r[e[i+1]]+r[e[i+2]]+r[e[i+3]]+"-"+r[e[i+4]]+r[e[i+5]]+"-"+r[e[i+6]]+r[e[i+7]]+"-"+r[e[i+8]]+r[e[i+9]]+"-"+r[e[i+10]]+r[e[i+11]]+r[e[i+12]]+r[e[i+13]]+r[e[i+14]]+r[e[i+15]]).toLowerCase()}},433:(e,t,n)=>{"use strict";Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return s.default}});var i=a(n(423)),r=a(n(89)),o=a(n(600)),s=a(n(400));function a(e){return e&&e.__esModule?e:{default:e}}},862:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function i(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function r(e,t,n,r,o,s){return i((a=i(i(t,e),i(r,s)))<<(d=o)|a>>>32-d,n);var a,d}function o(e,t,n,i,o,s,a){return r(t&n|~t&i,e,t,o,s,a)}function s(e,t,n,i,o,s,a){return r(t&i|n&~i,e,t,o,s,a)}function a(e,t,n,i,o,s,a){return r(t^n^i,e,t,o,s,a)}function d(e,t,n,i,o,s,a){return r(n^(t|~i),e,t,o,s,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n>5]>>>r%32&255,o=parseInt(i.charAt(n>>>4&15)+i.charAt(15&n),16);t.push(o)}return t}(function(e,t){e[t>>5]|=128<>5]|=(255&e[n/8])<{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(i)};const n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto),i=new Uint8Array(16)},585:(e,t)=>{"use strict";function n(e,t,n,i){switch(e){case 0:return t&n^~t&i;case 1:case 3:return t^n^i;case 2:return t&n^t&i^n&i}}function i(e,t){return e<>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n>>0;h=l,l=c,c=i(d,30)>>>0,d=s,s=a}r[0]=r[0]+s>>>0,r[1]=r[1]+d>>>0,r[2]=r[2]+c>>>0,r[3]=r[3]+l>>>0,r[4]=r[4]+h>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}},423:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n(294)),r=o(n(144));function o(e){return e&&e.__esModule?e:{default:e}}let s,a,d=0,c=0;t.default=function(e,t,n){let o=t&&n||0;const l=t||[];let h=(e=e||{}).node||s,u=void 0!==e.clockseq?e.clockseq:a;if(null==h||null==u){const t=e.random||(e.rng||i.default)();null==h&&(h=s=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==u&&(u=a=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:c+1;const g=p-d+(m-c)/1e4;if(g<0&&void 0===e.clockseq&&(u=u+1&16383),(g<0||p>d)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can\'t create more than 10M uuids/sec");d=p,c=m,a=u,p+=122192928e5;const f=(1e4*(268435455&p)+m)%4294967296;l[o++]=f>>>24&255,l[o++]=f>>>16&255,l[o++]=f>>>8&255,l[o++]=255&f;const v=p/4294967296*1e4&268435455;l[o++]=v>>>8&255,l[o++]=255&v,l[o++]=v>>>24&15|16,l[o++]=v>>>16&255,l[o++]=u>>>8|128,l[o++]=255&u;for(let e=0;e<6;++e)l[o+e]=h[e];return t||(0,r.default)(l)}},89:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n(929)),r=o(n(862));function o(e){return e&&e.__esModule?e:{default:e}}var s=(0,i.default)("v3",48,r.default);t.default=s},929:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){function i(e,i,o,s){const a=o&&s||0;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n(294)),r=o(n(144));function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){"string"==typeof e&&(t="binary"===e?new Uint8Array(16):null,e=null);const o=(e=e||{}).random||(e.rng||i.default)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){const e=n||0;for(let n=0;n<16;++n)t[e+n]=o[n];return t}return(0,r.default)(o)}},400:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=o(n(929)),r=o(n(585));function o(e){return e&&e.__esModule?e:{default:e}}var s=(0,i.default)("v5",80,r.default);t.default=s},987:(e,t,n)=>{"use strict";let i;n.r(t),n.d(t,{AUDIO_OUTPUT_DEVICE_CHANGED:()=>T,AUDIO_SSRCS_REMAPPED:()=>O,CREATE_ANSWER_FAILED:()=>r,CREATE_OFFER_FAILED:()=>o,DATA_CHANNEL_CLOSED:()=>a,DATA_CHANNEL_OPEN:()=>s,DEVICE_LIST_AVAILABLE:()=>R,DEVICE_LIST_CHANGED:()=>C,DEVICE_LIST_WILL_CHANGE:()=>x,DOMINANT_SPEAKER_CHANGED:()=>c,ENDPOINT_CONN_STATUS_CHANGED:()=>d,ENDPOINT_MESSAGE_RECEIVED:()=>A,ENDPOINT_STATS_RECEIVED:()=>w,FORWARDED_SOURCES_CHANGED:()=>l,LASTN_VALUE_CHANGED:()=>p,LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED:()=>g,LOCAL_TRACK_SSRC_UPDATED:()=>m,LOCAL_UFRAG_CHANGED:()=>I,PERMISSIONS_CHANGED:()=>h,REMOTE_TRACK_ADDED:()=>v,REMOTE_TRACK_MUTE:()=>_,REMOTE_TRACK_REMOVED:()=>y,REMOTE_TRACK_UNMUTE:()=>E,REMOTE_UFRAG_CHANGED:()=>P,RTCEvents:()=>i,SENDER_VIDEO_CONSTRAINTS_CHANGED:()=>u,SET_LOCAL_DESCRIPTION_FAILED:()=>S,SET_REMOTE_DESCRIPTION_FAILED:()=>b,TRACK_ATTACHED:()=>f,VIDEO_SSRCS_REMAPPED:()=>D,default:()=>k}),function(e){e.CREATE_ANSWER_FAILED="rtc.create_answer_failed",e.CREATE_OFFER_FAILED="rtc.create_offer_failed",e.DATA_CHANNEL_OPEN="rtc.data_channel_open",e.DATA_CHANNEL_CLOSED="rtc.data_channel_closed",e.ENDPOINT_CONN_STATUS_CHANGED="rtc.endpoint_conn_status_changed",e.DOMINANT_SPEAKER_CHANGED="rtc.dominant_speaker_changed",e.FORWARDED_SOURCES_CHANGED="rtc.forwarded_sources_changed",e.PERMISSIONS_CHANGED="rtc.permissions_changed",e.SENDER_VIDEO_CONSTRAINTS_CHANGED="rtc.sender_video_constraints_changed",e.LASTN_VALUE_CHANGED="rtc.lastn_value_changed",e.LOCAL_TRACK_SSRC_UPDATED="rtc.local_track_ssrc_updated",e.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED="rtc.local_track_max_enabled_resolution_changed",e.TRACK_ATTACHED="rtc.track_attached",e.REMOTE_TRACK_ADDED="rtc.remote_track_added",e.REMOTE_TRACK_MUTE="rtc.remote_track_mute",e.REMOTE_TRACK_REMOVED="rtc.remote_track_removed",e.REMOTE_TRACK_UNMUTE="rtc.remote_track_unmute",e.SET_LOCAL_DESCRIPTION_FAILED="rtc.set_local_description_failed",e.SET_REMOTE_DESCRIPTION_FAILED="rtc.set_remote_description_failed",e.AUDIO_OUTPUT_DEVICE_CHANGED="rtc.audio_output_device_changed",e.DEVICE_LIST_CHANGED="rtc.device_list_changed",e.DEVICE_LIST_WILL_CHANGE="rtc.device_list_will_change",e.DEVICE_LIST_AVAILABLE="rtc.device_list_available",e.ENDPOINT_MESSAGE_RECEIVED="rtc.endpoint_message_received",e.ENDPOINT_STATS_RECEIVED="rtc.endpoint_stats_received",e.LOCAL_UFRAG_CHANGED="rtc.local_ufrag_changed",e.REMOTE_UFRAG_CHANGED="rtc.remote_ufrag_changed",e.VIDEO_SSRCS_REMAPPED="rtc.video_ssrcs_remapped",e.AUDIO_SSRCS_REMAPPED="rtc.audio_ssrcs_remapped"}(i||(i={}));const r=i.CREATE_ANSWER_FAILED,o=i.CREATE_OFFER_FAILED,s=i.DATA_CHANNEL_OPEN,a=i.DATA_CHANNEL_CLOSED,d=i.ENDPOINT_CONN_STATUS_CHANGED,c=i.DOMINANT_SPEAKER_CHANGED,l=i.FORWARDED_SOURCES_CHANGED,h=i.PERMISSIONS_CHANGED,u=i.SENDER_VIDEO_CONSTRAINTS_CHANGED,p=i.LASTN_VALUE_CHANGED,m=i.LOCAL_TRACK_SSRC_UPDATED,g=i.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED,f=i.TRACK_ATTACHED,v=i.REMOTE_TRACK_ADDED,_=i.REMOTE_TRACK_MUTE,y=i.REMOTE_TRACK_REMOVED,E=i.REMOTE_TRACK_UNMUTE,S=i.SET_LOCAL_DESCRIPTION_FAILED,b=i.SET_REMOTE_DESCRIPTION_FAILED,T=i.AUDIO_OUTPUT_DEVICE_CHANGED,C=i.DEVICE_LIST_CHANGED,x=i.DEVICE_LIST_WILL_CHANGE,R=i.DEVICE_LIST_AVAILABLE,A=i.ENDPOINT_MESSAGE_RECEIVED,w=i.ENDPOINT_STATS_RECEIVED,I=i.LOCAL_UFRAG_CHANGED,P=i.REMOTE_UFRAG_CHANGED,D=i.VIDEO_SSRCS_REMAPPED,O=i.AUDIO_SSRCS_REMAPPED,k=i},125:e=>{e.exports={2160:{width:3840,height:2160},"4k":{width:3840,height:2160},1080:{width:1920,height:1080},fullhd:{width:1920,height:1080},720:{width:1280,height:720},hd:{width:1280,height:720},540:{width:960,height:540},qhd:{width:960,height:540},480:{width:640,height:480},vga:{width:640,height:480},360:{width:640,height:360},240:{width:320,height:240},180:{width:320,height:180}}},408:(e,t,n)=>{"use strict";let i;n.r(t),n.d(t,{VideoType:()=>i}),function(e){e.CAMERA="camera",e.DESKTOP="desktop"}(i||(i={}))},514:e=>{e.exports={IDENTITY_UPDATED:"authentication.identity_updated"}},680:(e,t,n)=>{"use strict";n.d(t,{D:()=>i});const i="local"},609:(e,t,n)=>{"use strict";let i;n.r(t),n.d(t,{XMPPEvents:()=>i}),function(e){e.ADD_ICE_CANDIDATE_FAILED="xmpp.add_ice_candidate_failed",e.AUDIO_MUTED_BY_FOCUS="xmpp.audio_muted_by_focus",e.VIDEO_MUTED_BY_FOCUS="xmpp.video_muted_by_focus",e.AUTHENTICATION_REQUIRED="xmpp.authentication_required",e.BRIDGE_DOWN="xmpp.bridge_down",e.CALL_ACCEPTED="xmpp.callaccepted.jingle",e.CALL_INCOMING="xmpp.callincoming.jingle",e.CALL_ENDED="xmpp.callended.jingle",e.CHAT_ERROR_RECEIVED="xmpp.chat_error_received",e.SETTINGS_ERROR_RECEIVED="xmpp.settings_error_received",e.CONFERENCE_PROPERTIES_CHANGED="xmpp.conference_properties_changed",e.CONNECTION_ESTABLISHED="xmpp.connection.connected",e.CONNECTION_FAILED="xmpp.connection.failed",e.CONNECTION_INTERRUPTED="xmpp.connection.interrupted",e.CONNECTION_RESTORED="xmpp.connection.restored",e.CONNECTION_ICE_FAILED="xmpp.connection.ice.failed",e.CONNECTION_RESTARTED="xmpp.connection.restart",e.CONNECTION_STATUS_CHANGED="xmpp.connection.status.changed",e.DISPLAY_NAME_CHANGED="xmpp.display_name_changed",e.DISPLAY_NAME_REQUIRED="xmpp.display_name_required",e.EMUC_ROOM_ADDED="xmpp.emuc_room_added",e.EMUC_ROOM_REMOVED="xmpp.emuc_room_removed",e.ETHERPAD="xmpp.etherpad",e.FOCUS_DISCONNECTED="xmpp.focus_disconnected",e.FOCUS_LEFT="xmpp.focus_left",e.GRACEFUL_SHUTDOWN="xmpp.graceful_shutdown",e.ICE_RESTARTING="rtc.ice_restarting",e.ICE_RESTART_SUCCESS="rtc.ice_restart_success",e.KICKED="xmpp.kicked",e.LOCAL_ROLE_CHANGED="xmpp.localrole_changed",e.MEETING_ID_SET="xmpp.meeting_id_set",e.MESSAGE_RECEIVED="xmpp.message_received",e.INVITE_MESSAGE_RECEIVED="xmpp.invite_message_received",e.PRIVATE_MESSAGE_RECEIVED="xmpp.private_message_received",e.MUC_MEMBER_BOT_TYPE_CHANGED="xmpp.muc_member_bot_type_changed",e.MUC_DESTROYED="xmpp.muc_destroyed",e.MUC_JOIN_IN_PROGRESS="xmpp.muc_join_in_progress",e.MUC_JOINED="xmpp.muc_joined",e.MUC_MEMBER_JOINED="xmpp.muc_member_joined",e.MUC_MEMBER_LEFT="xmpp.muc_member_left",e.MUC_LOBBY_MEMBER_JOINED="xmpp.muc_lobby_member_joined",e.MUC_LOBBY_MEMBER_UPDATED="xmpp.muc_lobby_member_updated",e.MUC_LOBBY_MEMBER_LEFT="xmpp.muc_lobby_member_left",e.MUC_DENIED_ACCESS="xmpp.muc_denied access",e.MUC_LEFT="xmpp.muc_left",e.MUC_ROLE_CHANGED="xmpp.muc_role_changed",e.MUC_LOCK_CHANGED="xmpp.muc_lock_changed",e.MUC_MEMBERS_ONLY_CHANGED="xmpp.muc_members_only_changed",e.MUC_VISITORS_SUPPORTED_CHANGED="xmpp.muc_visitors_supported_changed",e.PARTICIPANT_AUDIO_MUTED="xmpp.audio_muted",e.PARTICIPANT_VIDEO_MUTED="xmpp.video_muted",e.PARTICIPANT_VIDEO_TYPE_CHANGED="xmpp.video_type",e.PARTICIPANT_FEATURES_CHANGED="xmpp.participant_features_changed",e.PASSWORD_REQUIRED="xmpp.password_required",e.PHONE_NUMBER_CHANGED="conference.phoneNumberChanged",e.PRESENCE_RECEIVED="xmpp.presence_received",e.PRESENCE_STATUS="xmpp.presence_status",e.PROMPT_FOR_LOGIN="xmpp.prompt_for_login",e.READY_TO_JOIN="xmpp.ready_to_join",e.RECORDER_STATE_CHANGED="xmpp.recorderStateChanged",e.REMOTE_STATS="xmpp.remote_stats",e.RENEGOTIATION_FAILED="xmpp.renegotiation_failed",e.RESERVATION_ERROR="xmpp.room_reservation_error",e.ROOM_CONNECT_ERROR="xmpp.room_connect_error",e.ROOM_CONNECT_NOT_ALLOWED_ERROR="xmpp.room_connect_error.not_allowed",e.ROOM_JOIN_ERROR="xmpp.room_join_error",e.ROOM_CONNECT_MEMBERS_ONLY_ERROR="xmpp.room_connect_error.members_only",e.ROOM_DISCO_INFO_UPDATED="xmpp.room_disco_info_updated",e.ROOM_DISCO_INFO_FAILED="xmpp.room_disco_info_failed",e.ROOM_MAX_USERS_ERROR="xmpp.room_max_users_error",e.SENDING_CHAT_MESSAGE="xmpp.sending_chat_message",e.SENDING_PRIVATE_CHAT_MESSAGE="xmpp.sending_private_chat_message",e.SESSION_ACCEPT="xmpp.session_accept",e.SESSION_ACCEPT_ERROR="xmpp.session_accept_error",e.SESSION_ACCEPT_TIMEOUT="xmpp.session_accept_timeout",e.SOURCE_ADD="xmpp.source_add",e.SOURCE_ADD_ERROR="xmpp.source_add_error",e.SOURCE_REMOVE="xmpp.source_remove",e.SOURCE_REMOVE_ERROR="xmpp.source_remove_error",e.SPEAKER_STATS_RECEIVED="xmpp.speaker_stats_received",e.CONFERENCE_TIMESTAMP_RECEIVED="xmpp.conference_timestamp_received",e.AV_MODERATION_APPROVED="xmpp.av_moderation.approved",e.AV_MODERATION_REJECTED="xmpp.av_moderation.rejected",e.AV_MODERATION_RECEIVED="xmpp.av_moderation.received",e.AV_MODERATION_CHANGED="xmpp.av_moderation.changed",e.AV_MODERATION_PARTICIPANT_APPROVED="xmpp.av_moderation.participant.approved",e.AV_MODERATION_PARTICIPANT_REJECTED="xmpp.av_moderation.participant.rejected",e.BREAKOUT_ROOMS_MOVE_TO_ROOM="xmpp.breakout-rooms.move-to-room",e.BREAKOUT_ROOMS_EVENT="xmpp.breakout-rooms.event",e.BREAKOUT_ROOMS_UPDATED="xmpp.breakout-rooms.updated",e.ROOM_METADATA_EVENT="xmpp.room-metadata.event",e.ROOM_METADATA_UPDATED="xmpp.room-metadata.updated",e.START_MUTED_FROM_FOCUS="xmpp.start_muted_from_focus",e.SUBJECT_CHANGED="xmpp.subject_changed",e.SUSPEND_DETECTED="xmpp.suspend_detected",e.TRANSCRIPTION_STATUS_CHANGED="xmpp.transcription_status_changed",e.TRANSPORT_INFO="xmpp.transportinfo.jingle",e.VIDEO_SIP_GW_AVAILABILITY_CHANGED="xmpp.videoSIPGWAvailabilityChanged",e.VIDEO_SIP_GW_SESSION_STATE_CHANGED="xmpp.videoSIPGWSessionStateChanged",e.VISITORS_MESSAGE="xmpp.visitors_message",e.VISITORS_REJECTION="xmpp.visitors_rejection",e.ICE_CONNECTION_STATE_CHANGED="xmpp.ice_connection_state_changed",e.JSON_MESSAGE_RECEIVED="xmmp.json_message_received"}(i||(i={}))},526:(e,t,n)=>{"use strict";n.d(t,{Z:()=>mu});var i={};n.r(i),n.d(i,{AUTHENTICATION_REQUIRED:()=>T,CHAT_ERROR:()=>C,CONFERENCE_ACCESS_DENIED:()=>O,CONFERENCE_DESTROYED:()=>R,CONFERENCE_MAX_USERS:()=>A,CONFERENCE_RESTARTED:()=>I,CONNECTION_ERROR:()=>w,DISPLAY_NAME_REQUIRED:()=>k,FOCUS_DISCONNECTED:()=>N,FOCUS_LEFT:()=>M,GRACEFUL_SHUTDOWN:()=>L,ICE_FAILED:()=>F,INCOMPATIBLE_SERVER_VERSIONS:()=>j,JitsiConferenceErrors:()=>b,MEMBERS_ONLY_ERROR:()=>D,NOT_ALLOWED_ERROR:()=>P,OFFER_ANSWER_FAILED:()=>V,PASSWORD_NOT_SUPPORTED:()=>U,PASSWORD_REQUIRED:()=>H,RESERVATION_ERROR:()=>$,SETTINGS_ERROR:()=>x,VIDEOBRIDGE_NOT_AVAILABLE:()=>J});var r={};n.r(r),n.d(r,{AUDIO_INPUT_STATE_CHANGE:()=>z,AUDIO_UNMUTE_PERMISSIONS_CHANGED:()=>K,AUTH_STATUS_CHANGED:()=>W,AV_MODERATION_APPROVED:()=>X,AV_MODERATION_CHANGED:()=>Y,AV_MODERATION_PARTICIPANT_APPROVED:()=>Q,AV_MODERATION_PARTICIPANT_REJECTED:()=>Z,AV_MODERATION_REJECTED:()=>ee,BEFORE_STATISTICS_DISPOSED:()=>te,BOT_TYPE_CHANGED:()=>ne,BREAKOUT_ROOMS_MOVE_TO_ROOM:()=>ie,BREAKOUT_ROOMS_UPDATED:()=>re,CONFERENCE_CREATED_TIMESTAMP:()=>oe,CONFERENCE_ERROR:()=>se,CONFERENCE_FAILED:()=>ae,CONFERENCE_JOINED:()=>ce,CONFERENCE_JOIN_IN_PROGRESS:()=>de,CONFERENCE_LEFT:()=>le,CONFERENCE_UNIQUE_ID_SET:()=>he,CONFERENCE_VISITOR_CODECS_CHANGED:()=>ue,CONNECTION_ESTABLISHED:()=>pe,CONNECTION_INTERRUPTED:()=>me,CONNECTION_RESTORED:()=>ge,DATA_CHANNEL_CLOSED:()=>fe,DATA_CHANNEL_OPENED:()=>ve,DISPLAY_NAME_CHANGED:()=>_e,DOMINANT_SPEAKER_CHANGED:()=>ye,DTMF_SUPPORT_CHANGED:()=>Ee,E2EE_VERIFICATION_AVAILABLE:()=>Se,E2EE_VERIFICATION_COMPLETED:()=>be,E2EE_VERIFICATION_READY:()=>Te,ENDPOINT_MESSAGE_RECEIVED:()=>Ce,ENDPOINT_STATS_RECEIVED:()=>xe,FORWARDED_SOURCES_CHANGED:()=>Re,JVB121_STATUS:()=>Ae,JitsiConferenceEvents:()=>B,KICKED:()=>we,LAST_N_ENDPOINTS_CHANGED:()=>Ie,LOBBY_USER_JOINED:()=>Pe,LOBBY_USER_LEFT:()=>De,LOBBY_USER_UPDATED:()=>Oe,LOCK_STATE_CHANGED:()=>ke,MEMBERS_ONLY_CHANGED:()=>Ne,MESSAGE_RECEIVED:()=>Me,METADATA_UPDATED:()=>Le,NOISY_MIC:()=>je,NON_PARTICIPANT_MESSAGE_RECEIVED:()=>Ve,NO_AUDIO_INPUT:()=>Fe,P2P_STATUS:()=>Ue,PARTCIPANT_FEATURES_CHANGED:()=>Be,PARTICIPANT_KICKED:()=>He,PARTICIPANT_PROPERTY_CHANGED:()=>qe,PARTICIPANT_SOURCE_UPDATED:()=>$e,PHONE_NUMBER_CHANGED:()=>Ge,PRIVATE_MESSAGE_RECEIVED:()=>Je,PROPERTIES_CHANGED:()=>ze,RECORDER_STATE_CHANGED:()=>Ke,SERVER_REGION_CHANGED:()=>We,STARTED_MUTED:()=>Ye,START_MUTED_POLICY_CHANGED:()=>Xe,SUBJECT_CHANGED:()=>Qe,SUSPEND_DETECTED:()=>Ze,TALK_WHILE_MUTED:()=>et,TRACK_ADDED:()=>tt,TRACK_AUDIO_LEVEL_CHANGED:()=>nt,TRACK_MUTE_CHANGED:()=>it,TRACK_REMOVED:()=>rt,TRACK_UNMUTE_REJECTED:()=>ot,TRANSCRIPTION_STATUS_CHANGED:()=>st,USER_JOINED:()=>at,USER_LEFT:()=>dt,USER_ROLE_CHANGED:()=>ct,USER_STATUS_CHANGED:()=>lt,VIDEO_SIP_GW_AVAILABILITY_CHANGED:()=>ht,VIDEO_SIP_GW_SESSION_STATE_CHANGED:()=>ut,VIDEO_UNMUTE_PERMISSIONS_CHANGED:()=>pt,VISITORS_MESSAGE:()=>gt,VISITORS_REJECTION:()=>ft,VISITORS_SUPPORTED_CHANGED:()=>mt,_MEDIA_SESSION_ACTIVE_CHANGED:()=>G,_MEDIA_SESSION_STARTED:()=>q});var o={};n.r(o),n.d(o,{JitsiTrackEvents:()=>bt,LOCAL_TRACK_STOPPED:()=>Tt,NO_AUDIO_INPUT:()=>It,NO_DATA_FROM_SOURCE:()=>wt,TRACK_AUDIO_LEVEL_CHANGED:()=>Ct,TRACK_AUDIO_OUTPUT_CHANGED:()=>xt,TRACK_MUTE_CHANGED:()=>Rt,TRACK_OWNER_CHANGED:()=>Dt,TRACK_REMOVED:()=>Ot,TRACK_STREAMING_STATUS_CHANGED:()=>Pt,TRACK_VIDEOTYPE_CHANGED:()=>At});var s={};n.r(s),n.d(s,{RTCStatsEvents:()=>Zn,RTC_STATS_PC_EVENT:()=>ti,RTC_STATS_WC_DISCONNECTED:()=>ei});var a={};n.r(a),n.d(a,{CONSTRAINT_FAILED:()=>Gi,ELECTRON_DESKTOP_PICKER_ERROR:()=>zi,ELECTRON_DESKTOP_PICKER_NOT_FOUND:()=>Ki,GENERAL:()=>Wi,JitsiTrackErrors:()=>qi,NOT_FOUND:()=>Xi,PERMISSION_DENIED:()=>Yi,SCREENSHARING_GENERIC_ERROR:()=>Qi,SCREENSHARING_USER_CANCELED:()=>Zi,TIMEOUT:()=>er,TRACK_IS_DISPOSED:()=>tr,TRACK_NO_STREAM_FOUND:()=>nr,TRACK_NO_STREAM_TRACKS_FOUND:()=>or,TRACK_TOO_MANY_TRACKS_IN_STREAM:()=>rr,UNSUPPORTED_RESOLUTION:()=>ir});var d={};n.r(d),n.d(d,{CONNECTION_DISCONNECTED:()=>lr,CONNECTION_ESTABLISHED:()=>hr,CONNECTION_FAILED:()=>ur,CONNECTION_REDIRECTED:()=>pr,DISPLAY_NAME_REQUIRED:()=>gr,JitsiConnectionEvents:()=>cr,PROPERTIES_UPDATED:()=>fr,WRONG_STATE:()=>mr});var c={};n.r(c),n.d(c,{CONNECTION_DROPPED_ERROR:()=>Er,JitsiConnectionErrors:()=>yr,OTHER_ERROR:()=>Sr,PASSWORD_REQUIRED:()=>br,SERVER_ERROR:()=>Tr});var l={};n.r(l),n.d(l,{JitsiTranscriptionStatus:()=>Wo,OFF:()=>Yo,ON:()=>Xo});var h={};n.r(h),n.d(h,{fixNegotiationNeeded:()=>cd,shimAddTrackRemoveTrack:()=>ad,shimAddTrackRemoveTrackWithNative:()=>sd,shimGetDisplayMedia:()=>ed,shimGetSendersWithDtmf:()=>id,shimGetStats:()=>rd,shimGetUserMedia:()=>Za,shimMediaStream:()=>td,shimOnTrack:()=>nd,shimPeerConnection:()=>dd,shimSenderReceiverGetStats:()=>od});var u={};n.r(u),n.d(u,{shimAddTransceiver:()=>_d,shimCreateAnswer:()=>Sd,shimCreateOffer:()=>Ed,shimGetDisplayMedia:()=>hd,shimGetParameters:()=>yd,shimGetUserMedia:()=>ld,shimOnTrack:()=>ud,shimPeerConnection:()=>pd,shimRTCDataChannel:()=>vd,shimReceiverGetStats:()=>gd,shimRemoveStream:()=>fd,shimSenderGetStats:()=>md});var p={};n.r(p),n.d(p,{shimAudioContext:()=>Pd,shimCallbacksAPI:()=>Cd,shimConstraints:()=>Rd,shimCreateOfferLegacy:()=>Id,shimGetUserMedia:()=>xd,shimLocalStreamsAPI:()=>bd,shimRTCIceServerUrls:()=>Ad,shimRemoteStreamsAPI:()=>Td,shimTrackEventTransceiver:()=>wd});var m={};n.r(m),n.d(m,{removeExtmapAllowMixed:()=>Md,shimAddIceCandidateNullOrEmpty:()=>Ld,shimConnectionState:()=>Nd,shimMaxMessageSize:()=>Od,shimParameterlessSetLocalDescription:()=>Fd,shimRTCIceCandidate:()=>Dd,shimSendThrowTypeError:()=>kd});var g={};n.r(g),n.d(g,{ConnectionQualityEvents:()=>cl,LOCAL_STATS_UPDATED:()=>ml,REMOTE_STATS_UPDATED:()=>gl});var f={};n.r(f),n.d(f,{AUDIO_INPUT_STATE_CHANGE:()=>Rl,DETECTOR_STATE_CHANGE:()=>xl,DetectionEvents:()=>Cl,NO_AUDIO_INPUT:()=>Al,VAD_NOISY_DEVICE:()=>wl,VAD_REPORT_PUBLISHED:()=>Il,VAD_SCORE_PUBLISHED:()=>Pl,VAD_TALK_WHILE_MUTED:()=>Dl});var v={};n.r(v),n.d(v,{E2E_RTT_CHANGED:()=>Hl,E2ePingEvents:()=>Ul});var _={};n.r(_),n.d(_,{ERROR_NO_CONNECTION:()=>Ph,ERROR_SESSION_EXISTS:()=>Dh,STATE_FAILED:()=>Ih,STATE_OFF:()=>Rh,STATE_ON:()=>xh,STATE_PENDING:()=>Ah,STATE_RETRYING:()=>wh,STATUS_AVAILABLE:()=>bh,STATUS_BUSY:()=>Ch,STATUS_UNDEFINED:()=>Th,VideoSIPGWErrorConstants:()=>Sh,VideoSIPGWStateConstants:()=>Eh,VideoSIPGWStatusConstants:()=>yh});var y={};n.r(y),n.d(y,{DEVICE_LIST_CHANGED:()=>Gh,JitsiMediaDevicesEvents:()=>qh,PERMISSIONS_CHANGED:()=>zh,PERMISSION_PROMPT_IS_SHOWN:()=>Kh,SLOW_GET_USER_MEDIA:()=>Wh});var E=n(810),S=n.n(E);let b;!function(e){e.AUTHENTICATION_REQUIRED="conference.authenticationRequired",e.CHAT_ERROR="conference.chatError",e.SETTINGS_ERROR="conference.settingsError",e.CONFERENCE_DESTROYED="conference.destroyed",e.CONFERENCE_MAX_USERS="conference.max_users",e.CONNECTION_ERROR="conference.connectionError",e.CONFERENCE_RESTARTED="conference.restarted",e.NOT_ALLOWED_ERROR="conference.connectionError.notAllowed",e.MEMBERS_ONLY_ERROR="conference.connectionError.membersOnly",e.CONFERENCE_ACCESS_DENIED="conference.connectionError.accessDenied",e.DISPLAY_NAME_REQUIRED="conference.display_name_required",e.FOCUS_DISCONNECTED="conference.focusDisconnected",e.FOCUS_LEFT="conference.focusLeft",e.GRACEFUL_SHUTDOWN="conference.gracefulShutdown",e.ICE_FAILED="conference.iceFailed",e.INCOMPATIBLE_SERVER_VERSIONS="conference.incompatible_server_versions",e.OFFER_ANSWER_FAILED="conference.offerAnswerFailed",e.PASSWORD_NOT_SUPPORTED="conference.passwordNotSupported",e.PASSWORD_REQUIRED="conference.passwordRequired",e.RESERVATION_ERROR="conference.reservationError",e.VIDEOBRIDGE_NOT_AVAILABLE="conference.videobridgeNotAvailable"}(b||(b={}));const T=b.AUTHENTICATION_REQUIRED,C=b.CHAT_ERROR,x=b.SETTINGS_ERROR,R=b.CONFERENCE_DESTROYED,A=b.CONFERENCE_MAX_USERS,w=b.CONNECTION_ERROR,I=b.CONFERENCE_RESTARTED,P=b.NOT_ALLOWED_ERROR,D=b.MEMBERS_ONLY_ERROR,O=b.CONFERENCE_ACCESS_DENIED,k=b.DISPLAY_NAME_REQUIRED,N=b.FOCUS_DISCONNECTED,M=b.FOCUS_LEFT,L=b.GRACEFUL_SHUTDOWN,F=b.ICE_FAILED,j=b.INCOMPATIBLE_SERVER_VERSIONS,V=b.OFFER_ANSWER_FAILED,U=b.PASSWORD_NOT_SUPPORTED,H=b.PASSWORD_REQUIRED,$=b.RESERVATION_ERROR,J=b.VIDEOBRIDGE_NOT_AVAILABLE;let B;!function(e){e._MEDIA_SESSION_ACTIVE_CHANGED="conference.media_session.active_changed",e._MEDIA_SESSION_STARTED="conference.media_session.started",e.AUDIO_INPUT_STATE_CHANGE="conference.audio_input_state_changed",e.AUDIO_UNMUTE_PERMISSIONS_CHANGED="conference.audio_unmute_permissions_changed",e.AUTH_STATUS_CHANGED="conference.auth_status_changed",e.AV_MODERATION_APPROVED="conference.av_moderation.approved",e.AV_MODERATION_CHANGED="conference.av_moderation.changed",e.AV_MODERATION_PARTICIPANT_APPROVED="conference.av_moderation.participant.approved",e.AV_MODERATION_PARTICIPANT_REJECTED="conference.av_moderation.participant.rejected",e.AV_MODERATION_REJECTED="conference.av_moderation.rejected",e.BEFORE_STATISTICS_DISPOSED="conference.beforeStatisticsDisposed",e.BOT_TYPE_CHANGED="conference.bot_type_changed",e.BREAKOUT_ROOMS_MOVE_TO_ROOM="conference.breakout-rooms.move-to-room",e.BREAKOUT_ROOMS_UPDATED="conference.breakout-rooms.updated",e.CONFERENCE_CREATED_TIMESTAMP="conference.createdTimestamp",e.CONFERENCE_ERROR="conference.error",e.CONFERENCE_FAILED="conference.failed",e.CONFERENCE_JOIN_IN_PROGRESS="conference.join_in_progress",e.CONFERENCE_JOINED="conference.joined",e.CONFERENCE_LEFT="conference.left",e.CONFERENCE_UNIQUE_ID_SET="conference.unique_id_set",e.CONFERENCE_VISITOR_CODECS_CHANGED="conference.visitor_codecs_changed",e.CONNECTION_ESTABLISHED="conference.connectionEstablished",e.CONNECTION_INTERRUPTED="conference.connectionInterrupted",e.CONNECTION_RESTORED="conference.connectionRestored",e.DATA_CHANNEL_CLOSED="conference.dataChannelClosed",e.DATA_CHANNEL_OPENED="conference.dataChannelOpened",e.DISPLAY_NAME_CHANGED="conference.displayNameChanged",e.DOMINANT_SPEAKER_CHANGED="conference.dominantSpeaker",e.DTMF_SUPPORT_CHANGED="conference.dtmfSupportChanged",e.E2EE_VERIFICATION_AVAILABLE="conference.e2ee.verification.available",e.E2EE_VERIFICATION_COMPLETED="conference.e2ee.verification.completed",e.E2EE_VERIFICATION_READY="conference.e2ee.verification.ready",e.ENDPOINT_MESSAGE_RECEIVED="conference.endpoint_message_received",e.ENDPOINT_STATS_RECEIVED="conference.endpoint_stats_received",e.FORWARDED_SOURCES_CHANGED="conference.forwardedSourcesChanged",e.JVB121_STATUS="conference.jvb121Status",e.KICKED="conference.kicked",e.LAST_N_ENDPOINTS_CHANGED="conference.lastNEndpointsChanged",e.LOBBY_USER_JOINED="conference.lobby.userJoined",e.LOBBY_USER_LEFT="conference.lobby.userLeft",e.LOBBY_USER_UPDATED="conference.lobby.userUpdated",e.LOCK_STATE_CHANGED="conference.lock_state_changed",e.MEMBERS_ONLY_CHANGED="conference.membersOnlyChanged",e.MESSAGE_RECEIVED="conference.messageReceived",e.METADATA_UPDATED="conference.metadata.updated",e.NO_AUDIO_INPUT="conference.no_audio_input",e.NOISY_MIC="conference.noisy_mic",e.NON_PARTICIPANT_MESSAGE_RECEIVED="conference.non_participant_message_received",e.P2P_STATUS="conference.p2pStatus",e.PARTCIPANT_FEATURES_CHANGED="conference.partcipant_features_changed",e.PARTICIPANT_KICKED="conference.participant_kicked",e.PARTICIPANT_PROPERTY_CHANGED="conference.participant_property_changed",e.PARTICIPANT_SOURCE_UPDATED="conference.participant_source_updated",e.PHONE_NUMBER_CHANGED="conference.phoneNumberChanged",e.PRIVATE_MESSAGE_RECEIVED="conference.privateMessageReceived",e.PROPERTIES_CHANGED="conference.propertiesChanged",e.RECORDER_STATE_CHANGED="conference.recorderStateChanged",e.SERVER_REGION_CHANGED="conference.server_region_changed",e.START_MUTED_POLICY_CHANGED="conference.start_muted_policy_changed",e.STARTED_MUTED="conference.started_muted",e.SUBJECT_CHANGED="conference.subjectChanged",e.SUSPEND_DETECTED="conference.suspendDetected",e.TALK_WHILE_MUTED="conference.talk_while_muted",e.TRACK_ADDED="conference.trackAdded",e.TRACK_AUDIO_LEVEL_CHANGED="conference.audioLevelsChanged",e.TRACK_MUTE_CHANGED="conference.trackMuteChanged",e.TRACK_REMOVED="conference.trackRemoved",e.TRACK_UNMUTE_REJECTED="conference.trackUnmuteRejected",e.TRANSCRIPTION_STATUS_CHANGED="conference.transcriptionStatusChanged",e.USER_JOINED="conference.userJoined",e.USER_LEFT="conference.userLeft",e.USER_ROLE_CHANGED="conference.roleChanged",e.USER_STATUS_CHANGED="conference.statusChanged",e.VIDEO_SIP_GW_AVAILABILITY_CHANGED="conference.videoSIPGWAvailabilityChanged",e.VIDEO_SIP_GW_SESSION_STATE_CHANGED="conference.videoSIPGWSessionStateChanged",e.VIDEO_UNMUTE_PERMISSIONS_CHANGED="conference.video_unmute_permissions_changed",e.VISITORS_SUPPORTED_CHANGED="conference.visitorsSupported",e.VISITORS_MESSAGE="conference.visitors_message",e.VISITORS_REJECTION="conference.visitors_rejection"}(B||(B={}));const q=B._MEDIA_SESSION_STARTED,G=B._MEDIA_SESSION_ACTIVE_CHANGED,z=B.AUDIO_INPUT_STATE_CHANGE,K=B.AUDIO_UNMUTE_PERMISSIONS_CHANGED,W=B.AUTH_STATUS_CHANGED,X=B.AV_MODERATION_APPROVED,Y=B.AV_MODERATION_CHANGED,Q=B.AV_MODERATION_PARTICIPANT_APPROVED,Z=B.AV_MODERATION_PARTICIPANT_REJECTED,ee=B.AV_MODERATION_REJECTED,te=B.BEFORE_STATISTICS_DISPOSED,ne=B.BOT_TYPE_CHANGED,ie=B.BREAKOUT_ROOMS_MOVE_TO_ROOM,re=B.BREAKOUT_ROOMS_UPDATED,oe=B.CONFERENCE_CREATED_TIMESTAMP,se=B.CONFERENCE_ERROR,ae=B.CONFERENCE_FAILED,de=B.CONFERENCE_JOIN_IN_PROGRESS,ce=B.CONFERENCE_JOINED,le=B.CONFERENCE_LEFT,he=B.CONFERENCE_UNIQUE_ID_SET,ue=B.CONFERENCE_VISITOR_CODECS_CHANGED,pe=B.CONNECTION_ESTABLISHED,me=B.CONNECTION_INTERRUPTED,ge=B.CONNECTION_RESTORED,fe=B.DATA_CHANNEL_CLOSED,ve=B.DATA_CHANNEL_OPENED,_e=B.DISPLAY_NAME_CHANGED,ye=B.DOMINANT_SPEAKER_CHANGED,Ee=B.DTMF_SUPPORT_CHANGED,Se=B.E2EE_VERIFICATION_AVAILABLE,be=B.E2EE_VERIFICATION_COMPLETED,Te=B.E2EE_VERIFICATION_READY,Ce=B.ENDPOINT_MESSAGE_RECEIVED,xe=B.ENDPOINT_STATS_RECEIVED,Re=B.FORWARDED_SOURCES_CHANGED,Ae=B.JVB121_STATUS,we=B.KICKED,Ie=B.LAST_N_ENDPOINTS_CHANGED,Pe=B.LOBBY_USER_JOINED,De=B.LOBBY_USER_LEFT,Oe=B.LOBBY_USER_UPDATED,ke=B.LOCK_STATE_CHANGED,Ne=B.MEMBERS_ONLY_CHANGED,Me=B.MESSAGE_RECEIVED,Le=B.METADATA_UPDATED,Fe=B.NO_AUDIO_INPUT,je=B.NOISY_MIC,Ve=B.NON_PARTICIPANT_MESSAGE_RECEIVED,Ue=B.P2P_STATUS,He=B.PARTICIPANT_KICKED,$e=B.PARTICIPANT_SOURCE_UPDATED,Je=B.PRIVATE_MESSAGE_RECEIVED,Be=B.PARTCIPANT_FEATURES_CHANGED,qe=B.PARTICIPANT_PROPERTY_CHANGED,Ge=B.PHONE_NUMBER_CHANGED,ze=B.PROPERTIES_CHANGED,Ke=B.RECORDER_STATE_CHANGED,We=B.SERVER_REGION_CHANGED,Xe=B.START_MUTED_POLICY_CHANGED,Ye=B.STARTED_MUTED,Qe=B.SUBJECT_CHANGED,Ze=B.SUSPEND_DETECTED,et=B.TALK_WHILE_MUTED,tt=B.TRACK_ADDED,nt=B.TRACK_AUDIO_LEVEL_CHANGED,it=B.TRACK_MUTE_CHANGED,rt=B.TRACK_REMOVED,ot=B.TRACK_UNMUTE_REJECTED,st=B.TRANSCRIPTION_STATUS_CHANGED,at=B.USER_JOINED,dt=B.USER_LEFT,ct=B.USER_ROLE_CHANGED,lt=B.USER_STATUS_CHANGED,ht=B.VIDEO_SIP_GW_AVAILABILITY_CHANGED,ut=B.VIDEO_SIP_GW_SESSION_STATE_CHANGED,pt=B.VIDEO_UNMUTE_PERMISSIONS_CHANGED,mt=B.VISITORS_SUPPORTED_CHANGED,gt=B.VISITORS_MESSAGE,ft=B.VISITORS_REJECTION;var vt=n(387),_t=n.n(vt),yt=n(47),Et=n.n(yt),St=n(33);let bt;!function(e){e.LOCAL_TRACK_STOPPED="track.stopped",e.TRACK_AUDIO_LEVEL_CHANGED="track.audioLevelsChanged",e.TRACK_AUDIO_OUTPUT_CHANGED="track.audioOutputChanged",e.TRACK_MUTE_CHANGED="track.trackMuteChanged",e.TRACK_VIDEOTYPE_CHANGED="track.videoTypeChanged",e.NO_DATA_FROM_SOURCE="track.no_data_from_source",e.NO_AUDIO_INPUT="track.no_audio_input",e.TRACK_STREAMING_STATUS_CHANGED="track.streaming_status_changed",e.TRACK_OWNER_CHANGED="track.owner_changed",e.TRACK_REMOVED="track.removed"}(bt||(bt={}));const Tt=bt.LOCAL_TRACK_STOPPED,Ct=bt.TRACK_AUDIO_LEVEL_CHANGED,xt=bt.TRACK_AUDIO_OUTPUT_CHANGED,Rt=bt.TRACK_MUTE_CHANGED,At=bt.TRACK_VIDEOTYPE_CHANGED,wt=bt.NO_DATA_FROM_SOURCE,It=bt.NO_AUDIO_INPUT,Pt=bt.TRACK_STREAMING_STATUS_CHANGED,Dt=bt.TRACK_OWNER_CHANGED,Ot=bt.TRACK_REMOVED;let kt;!function(e){e.TYPE_OPERATIONAL="operational",e.TYPE_PAGE="page",e.TYPE_TRACK="track",e.TYPE_UI="ui",e.ACTION_JINGLE_RESTART="restart",e.ACTION_JINGLE_SA_TIMEOUT="session-accept.timeout",e.ACTION_JINGLE_SI_RECEIVED="session-initiate.received",e.ACTION_JINGLE_SI_TIMEOUT="session-initiate.timeout",e.ACTION_JINGLE_TERMINATE="terminate",e.ACTION_JINGLE_TR_RECEIVED="transport-replace.received",e.ACTION_JINGLE_TR_SUCCESS="transport-replace.success",e.ACTION_P2P_DECLINED="decline",e.ACTION_P2P_ESTABLISHED="established",e.ACTION_P2P_FAILED="failed",e.ACTION_P2P_SWITCH_TO_JVB="switch.to.jvb",e.AVAILABLE_DEVICE="available.device",e.CONNECTION_DISCONNECTED="connection.disconnected",e.FEEDBACK="feedback",e.ICE_DURATION="ice.duration",e.ICE_ESTABLISHMENT_DURATION_DIFF="ice.establishment.duration.diff",e.ICE_STATE_CHANGED="ice.state.changed",e.NO_BYTES_SENT="track.no-bytes-sent",e.TRACK_UNMUTED="track.unmuted"}(kt||(kt={}));const Nt=kt.TYPE_OPERATIONAL,Mt=kt.TYPE_PAGE,Lt=kt.TYPE_TRACK,Ft=kt.TYPE_UI,jt=kt.ACTION_JINGLE_RESTART,Vt=kt.ACTION_JINGLE_SA_TIMEOUT,Ut=kt.ACTION_JINGLE_SI_RECEIVED,Ht=kt.ACTION_JINGLE_SI_TIMEOUT,$t=kt.ACTION_JINGLE_TERMINATE,Jt=kt.ACTION_JINGLE_TR_RECEIVED,Bt=kt.ACTION_JINGLE_TR_SUCCESS,qt=kt.ACTION_P2P_DECLINED,Gt=kt.ACTION_P2P_ESTABLISHED,zt=kt.ACTION_P2P_FAILED,Kt=kt.ACTION_P2P_SWITCH_TO_JVB,Wt=kt.AVAILABLE_DEVICE,Xt=kt.CONNECTION_DISCONNECTED,Yt=kt.FEEDBACK,Qt=kt.ICE_DURATION,Zt=kt.ICE_ESTABLISHMENT_DURATION_DIFF,en=kt.ICE_STATE_CHANGED,tn=kt.NO_BYTES_SENT,nn=kt.TRACK_UNMUTED,rn=(e,t,n)=>({type:kt.TYPE_OPERATIONAL,action:"connection.failed",attributes:{error_type:e,error_message:t,...n}}),on=(e,t)=>({action:e,attributes:t,source:"conference",type:kt.TYPE_OPERATIONAL}),sn=(e,t)=>({action:"connection.stage.reached",actionSubject:e,attributes:t,source:"connection.stage.reached",type:kt.TYPE_OPERATIONAL}),an=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{type:kt.TYPE_OPERATIONAL,source:"get.user.media",action:e,attributes:t}},dn=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{type:kt.TYPE_OPERATIONAL,action:e,source:"jingle",attributes:t}},cn=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{type:kt.TYPE_OPERATIONAL,action:e,source:"p2p",attributes:t}},ln=e=>({type:kt.TYPE_OPERATIONAL,action:"remotely.muted",mediaType:e}),hn=e=>({type:kt.TYPE_OPERATIONAL,action:"rtp.stats",attributes:e});let un;!function(e){e.AUDIO_LEVEL="statistics.audioLevel",e.BEFORE_DISPOSED="statistics.before_disposed",e.BYTE_SENT_STATS="statistics.byte_sent_stats",e.CONNECTION_STATS="statistics.connectionstats",e.LONG_TASKS_STATS="statistics.long_tasks_stats"}(un||(un={}));const pn=un.AUDIO_LEVEL,mn=un.BEFORE_DISPOSED,gn=un.BYTE_SENT_STATS,fn=un.CONNECTION_STATS,vn=un.LONG_TASKS_STATS;var _n=n(122);const yn="chrome",En="safari",Sn="electron",bn="react-native",Tn={Chrome:yn,Firefox:"firefox",Safari:En,Electron:Sn},Cn="blink",xn="webkit",Rn="gecko",An={Blink:Cn,WebKit:xn,Gecko:Rn};function wn(e){return{name:Tn[e.name],version:e.version,engine:An[e.engine],engineVersion:e.engineVersion}}class In{constructor(e){this._parser=new _n.UAParser(navigator.userAgent);const{name:t,version:n,engine:i,engineVersion:r}=e?wn(e):function(e){const t=function(){const e=navigator.userAgent.match(/\\b(react[ \\t_-]*native)(?:\\/(\\S+))?/i);let t;if(e||"ReactNative"===navigator.product){let n;return e&&e.length>2&&(n=e[1],t=e[2]),n||(n="react-native"),t||(t="unknown"),{name:bn,version:t}}}();if(t)return t;const{name:n,version:i}=e.getBrowser(),{name:r,version:o}=e.getEngine();return wn({name:n,version:i,engine:r,engineVersion:o})}(this._parser);this._name=t,this._version=n,this._engine=i,this._engineVersion=r}isChrome(){return this._name===yn||this._engine===Cn}isFirefox(){return this._engine===Rn}isSafari(){return this._name===En}isElectron(){return this._name===Sn}isReactNative(){return this._name===bn}isChromiumBased(){return this._engine===Cn}isWebKitBased(){return this._engine===xn}getName(){return this._name?this._name:this._parser.getBrowser().name}getVersion(){return this._version?this._version:this._parser.getBrowser().version}getEngine(){return this._engine}getEngineVersion(){return this._engineVersion}getOS(){return this._parser.getOS().name}getOSVersion(){return this._parser.getOS().version}isVersionGreaterThan(e){if(this._version)return parseInt(this._version,10)>parseInt(e,10)}isVersionLessThan(e){if(this._version)return parseInt(this._version,10)parseInt(e,10)}isEngineVersionLessThan(e){if(this._engineVersion)return parseInt(this._engineVersion,10){const i=n[t];delete i.id,e[t]&&Object.keys(i).forEach((r=>{i[r]===e[t][r]&&delete n[t][r]}))}));let i=-1/0;return Object.keys(n).forEach((e=>{const t=n[e];t.timestamp>i&&(i=t.timestamp)})),Object.keys(n).forEach((e=>{const t=n[e];t.timestamp===i&&(t.timestamp=0)})),n.timestamp=i,n}function On(e){return{id:e.id,tracks:e.getTracks().map((e=>({id:e.id,kind:e.kind,label:e.label,enabled:e.enabled,muted:e.muted,readyState:e.readyState})))}}var kn,Nn=new Uint8Array(16);function Mn(){if(!kn&&!(kn="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return kn(Nn)}const Ln=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var Fn=[],jn=0;jn<256;++jn)Fn.push((jn+256).toString(16).substr(1));const Vn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(Fn[e[t+0]]+Fn[e[t+1]]+Fn[e[t+2]]+Fn[e[t+3]]+"-"+Fn[e[t+4]]+Fn[e[t+5]]+"-"+Fn[e[t+6]]+Fn[e[t+7]]+"-"+Fn[e[t+8]]+Fn[e[t+9]]+"-"+Fn[e[t+10]]+Fn[e[t+11]]+Fn[e[t+12]]+Fn[e[t+13]]+Fn[e[t+14]]+Fn[e[t+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&Ln.test(e)}(n))throw TypeError("Stringified UUID is invalid");return n},Un=function(e,t,n){var i=(e=e||{}).random||(e.rng||Mn)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(var r=0;r<16;++r)t[n+r]=i[r];return t}return Vn(i)},Hn="3.1",$n=6e5,Jn={SequenceNumber:"sn"},Bn=3001,qn=3002,Gn=[Bn,qn],zn=1e3;var Kn=n(483),Wn=n.n(Kn);function Xn(e){return 0===e.indexOf("[")||-1!==e.indexOf(":")?"x:x:x:x:x:x:x:x":"x.x.x.x"}function Yn(e){const t=Wn().parseCandidate(e);return"relay"!==t.type&&"ssltcp"!==t.protocol&&(t.ip=Xn(t.ip),t.address=Xn(t.address)),t.relatedAddress&&(t.relatedAddress=Xn(t.relatedAddress)),Wn().writeCandidate(t)}function Qn(e){let t,n,i,r,{endpoint:o,meetingFqn:s,onCloseCallback:a,useLegacy:d,obfuscate:c=!0,pingInterval:l=3e4}=e,h=[],u=Un(),p=0,m=!1,g=1;const f=d?`${Hn}_LEGACY`:`${Hn}_STANDARD`,v=e=>{e.push((new Date).getTime()),e.push(g++)},_=e=>{const t=Object.assign({},e);"identity"!==t.type&&t.data&&(t.data=JSON.stringify(t.data)),n&&n.readyState===WebSocket.OPEN&&m&&n.send(JSON.stringify(t))},y=function(e){_(e),h.length0===e.indexOf("a=candidate:")?`a=${Yn(e)}`:0===e.indexOf("c=")?"c=IN IP4 0.0.0.0":0===e.indexOf("a=rtcp:")?"a=rtcp:9 IN IP4 0.0.0.0":e)).join("\\r\\n").trim()}\\r\\n`));break;case"getStats":case"getstats":e[2]&&(t=e[2],Object.keys(t).forEach((e=>{const n=t[e];n&&(["ipAddress","ip","address"].forEach((e=>{n[e]&&"relay"!==n.candidateType&&(n[e]=Xn(n[e]))})),["googLocalAddress","googRemoteAddress"].forEach((e=>{let t,i,r;n[e]&&(r="["===n[e][0]?"]:":":",[i,t]=n[e].split(r),n[e]=`${Xn(i)}:${t}`)})))})))}var t,n}(i)}v(i),y({statsSessionId:u,type:"stats-entry",data:i})},y.keepAlive=function(){y({statsSessionId:u,type:"keepalive"})},y.close=function(){n&&n.close(Bn)},y.connect=function(e){let d=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e&&!t&&(t=u),t&&(u=Un(),h.forEach((e=>{e.statsSessionId=u}))),n&&n.close(),n=new WebSocket(`${o}/${s}?statsSessionId=${u}&isReconnect=${d}`,f,{headers:{"User-Agent":navigator.userAgent}}),n.onclose=function(t){if(i&&clearInterval(i),m&&(m=!1),a({code:t.code,reason:t.reason}),!Gn.includes(t.code)&&p<$n){const t=2**p*1e3+Math.floor(1e4*Math.random()),n=p+t<$n?t:$n-p;p+=n,r=setTimeout((()=>y.connect(e,!0)),n)}},n.onopen=function(){i=setInterval(y.keepAlive,l)},n.onmessage=async function(e){const{type:t,body:i}=JSON.parse(e.data);if(t===Jn.SequenceNumber){const{value:e,state:t}=i;if(h.length){const t=h[0].data[4],i=h[h.length-1].data[4];if(ei)return void(n&&n.close(qn));const r=h.findIndex((t=>t.data[4]===e));h=h.slice(r+1)}if("initial"===t){r&&clearTimeout(r),p=0,m=!0;for(let e=0;e{if(!window[`${e}RTCPeerConnection`])return;const t=window[`${e}RTCPeerConnection`],a=function(e){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a={...e},{optional:l=[]}=s;let g=!1;try{l.some((e=>!0===e.rtcStatsSFUP2P))&&(g=!0);const a=new t(e,s);if(i&&i(e))return a;const f="PC_"+c++;a.__rtcStatsId=f,e||(e={nullConfig:!0}),((e=JSON.parse(JSON.stringify(e)))&&e.iceServers||[]).forEach((e=>{delete e.credential})),e.browserType=h?"moz":"webkit",n("create",f,e),a.__dtlsTransport=null,n("constraints",f,s),a.addEventListener("icecandidate",(e=>{n("onicecandidate",f,e.candidate)})),a.addEventListener("addstream",(e=>{n("onaddstream",f,`${e.stream.id} ${e.stream.getTracks().map((e=>`${e.kind}:${e.id}`))}`)})),a.addEventListener("track",(e=>{n("ontrack",f,`${e.track.kind}:${e.track.id} ${e.streams.map((e=>`stream:${e.id}`))}`)})),a.addEventListener("removestream",(e=>{n("onremovestream",f,`${e.stream.id} ${e.stream.getTracks().map((e=>`${e.kind}:${e.id}`))}`)})),a.addEventListener("signalingstatechange",(()=>{n("onsignalingstatechange",f,a.signalingState)})),a.addEventListener("iceconnectionstatechange",(()=>{const{iceConnectionState:e}=a;n("oniceconnectionstatechange",f,e),null==d||d({type:"iceconnectionstatechange",body:{pcId:f,isP2P:g,state:e}})})),a.addEventListener("icegatheringstatechange",(()=>{n("onicegatheringstatechange",f,a.iceGatheringState)})),a.addEventListener("connectionstatechange",(()=>{const{connectionState:e}=a;n("onconnectionstatechange",f,a.connectionState),null==d||d({type:"connectionstatechange",body:{pcId:f,isP2P:g,state:e}})})),a.addEventListener("negotiationneeded",(()=>{n("onnegotiationneeded",f,void 0)})),a.addEventListener("datachannel",(e=>{n("ondatachannel",f,[e.channel.id,e.channel.label])}));let v={};const _=function(){h||p||m||u&&!o?a.getStats(null).then((e=>{const t=function(e){if(!e.entries)return e;const t={};return e.forEach(((e,n)=>{t[n]=e})),t}(e),i=JSON.parse(JSON.stringify(t));n("getstats",f,Dn(v,t)),v=i})):u&&a.getStats((e=>{const t=function(e,t){const n={};return t.result().forEach((e=>{const t={id:e.id,timestamp:e.timestamp.getTime(),type:e.type};e.names().forEach((n=>{t[n]=e.stat(n)})),n[t.id]=t})),n}(0,e),i=JSON.parse(JSON.stringify(t));n("getstats",f,Dn(v,t)),v=i}))};if(r){const e=window.setInterval((()=>{"closed"!==a.signalingState&&"closed"!==a.iceConnectionState?_():window.clearInterval(e)}),r)}return a.addEventListener("connectionstatechange",(()=>{["connected","failed"].includes(a.connectionState)&&_()})),a}catch(e){return console.error("RTCStats PeerConnection bind failed: ",e),new t(a,s)}};["createDataChannel","close"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{n(e,this.__rtcStatsId,arguments)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["addStream","removeStream"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{const t=arguments[0],i=t.getTracks().map((e=>`${e.kind}:${e.id}`)).join(",");n(e,this.__rtcStatsId,`${t.id} ${i}`)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["addTrack"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{const t=arguments[0],i=[].slice.call(arguments,1);n(e,this.__rtcStatsId,`${t.kind}:${t.id} ${i.map((e=>`stream:${e.id}`)).join(";")||"-"}`)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["removeTrack"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{const t=arguments[0].track;n(e,this.__rtcStatsId,t?`${t.kind}:${t.id}`:"null")}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["addTransceiver"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){try{const t=arguments[0];let i;i="string"==typeof t?t:`${t.kind}:${t.id}`,2===arguments.length&&"object"==typeof arguments[1]&&(i+=` ${JSON.stringify(arguments[1])}`),n(e,this.__rtcStatsId,i)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,arguments)})})),["createOffer","createAnswer"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){const t=this.__rtcStatsId,r=arguments;let o;1===arguments.length&&"object"==typeof arguments[0]?o=arguments[0]:3===arguments.length&&"object"==typeof arguments[2]&&(o=arguments[2]);try{n(e,this.__rtcStatsId,o)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,o?[o]:void 0).then((i=>{try{n(`${e}OnSuccess`,t,s?i:"")}catch(t){console.error(`RTCStats ${e} promise success bind failed: `,t)}if(!(r.length>0&&"function"==typeof r[0]))return i;r[0].apply(null,[i])}),(i=>{try{n(`${e}OnFailure`,t,i.toString())}catch(t){console.error(`RTCStats ${e} promise failure bind failed: `,t)}if(!(r.length>1&&"function"==typeof r[1]))throw i;r[1].apply(null,[i])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((e=>{const i=t.prototype[e];i&&(t.prototype[e]=function(){const t=this.__rtcStatsId,r=arguments;try{const t=s?r[0]:"";n(e,this.__rtcStatsId,t)}catch(t){console.error(`RTCStats ${e} bind failed: `,t)}return i.apply(this,[r[0]]).then((()=>{try{n(`${e}OnSuccess`,t,void 0)}catch(t){console.error(`RTCStats ${e} promise success bind failed: `,t)}this.__dtlsTransport||!e.endsWith("Description")||m||this.getSenders().forEach((e=>{!this.__dtlsTransport&&e.transport&&(this.__dtlsTransport=e.transport,e.transport.addEventListener("error",(e=>{n("ondtlserror",t,e)})),e.transport.addEventListener("statechange",(()=>{const i=e.transport.state;n("ondtlsstatechange",t,i)})))})),r.length>=2&&"function"==typeof r[1]&&r[1].apply(null,[])}),(i=>{try{n(`${e}OnFailure`,t,i.toString())}catch(t){console.error(`RTCStats ${e} promise failure bind failed: `,t)}if(!(r.length>=3&&"function"==typeof r[2]))throw i;r[2].apply(null,[i])}))})})),t.generateCertificate&&Object.defineProperty(a,"generateCertificate",{get(){return arguments.length?t.generateCertificate.apply(null,arguments):t.generateCertificate}}),window[`${e}RTCPeerConnection`]=a,window[`${e}RTCPeerConnection`].prototype=t.prototype})),a.forEach((e=>{const t=e+(e.length?"GetUserMedia":"getUserMedia");if(!navigator[t])return;const i=navigator[t].bind(navigator);navigator[t]=function(){try{n("getUserMedia",null,arguments[0])}catch(e){console.error("RTCStats getUserMedia bind failed: ",e)}const e=arguments[1],t=arguments[2];i(arguments[0],(t=>{try{n("getUserMediaOnSuccess",null,On(t))}catch(e){console.error("RTCStats getUserMediaOnSuccess bind failed: ",e)}e&&e(t)}),(e=>{try{n("getUserMediaOnFailure",null,e.name)}catch(e){console.error("RTCStats getUserMediaOnFailure bind failed: ",e)}t&&t(e)}))}.bind(navigator)})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){const e=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices),t=function(){try{n("navigator.mediaDevices.getUserMedia",null,arguments[0])}catch(e){console.error("RTCStats navigator.mediaDevices.getUserMedia bind failed: ",e)}return e.apply(navigator.mediaDevices,arguments).then((e=>{try{n("navigator.mediaDevices.getUserMediaOnSuccess",null,On(e))}catch(e){console.error("RTCStats navigator.mediaDevices.getUserMediaOnSuccess bind failed: ",e)}return e}),(e=>{try{n("navigator.mediaDevices.getUserMediaOnFailure",null,e.name)}catch(e){console.error("RTCStats navigator.mediaDevices.getUserMediaOnFailure bind failed: ",e)}return Promise.reject(e)}))};navigator.mediaDevices.getUserMedia=t.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){const e=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices),t=function(){try{n("navigator.mediaDevices.getDisplayMedia",null,arguments[0])}catch(e){console.error("RTCStats navigator.mediaDevices.getDisplayMedia bind failed: ",e)}return e.apply(navigator.mediaDevices,arguments).then((e=>{try{n("navigator.mediaDevices.getDisplayMediaOnSuccess",null,On(e))}catch(e){console.error("RTCStats navigator.mediaDevices.getDisplayMediaOnSuccess bind failed: ",e)}return e}),(e=>{try{n("navigator.mediaDevices.getDisplayMediaOnFailure",null,e.name)}catch(e){console.error("RTCStats navigator.mediaDevices.getDisplayMediaOnFailure bind failed: ",e)}return Promise.reject(e)}))};navigator.mediaDevices.getDisplayMedia=t.bind(navigator.mediaDevices)}}else Pn.warn("RTCStats unsupported browser.")}({statsEntry:this.sendStatsEntry.bind(this)},{pollInterval:n,useLegacy:t,sendSdp:i,eventCallback:e=>this.events.emit(ti,e)}),this._initialized=!0)}start(e){const{options:{config:t={},name:n=""}={},_statsCurrentId:i=""}=e,{analytics:{rtcstatsEnabled:r=!1,rtcstatsEndpoint:o="",rtcstatsUseLegacy:s=!1}={}}=t;this.reset(),r&&(this._initialized?(e.once(ce,(()=>{var r;const a={endpoint:o,meetingFqn:n,onCloseCallback:e=>this.events.emit(ei,e),useLegacy:s},d=Boolean(null===(r=e.getBreakoutRooms())||void 0===r?void 0:r.isBreakoutRoom()),c=e.myUserId(),l=e.getMeetingUniqueId();this._trace=Qn(a),this._trace.connect(d);const h={...t,endpointId:c,confName:n,displayName:i,meetingUniqueId:l,isBreakoutRoom:d};this.sendIdentity(h)})),e.once(he,(e=>{this.sendIdentity({meetingUniqueId:e})})),e.once(le,(()=>{this.reset()}))):oi.error("Calling start before RTCStats proxy module is initialized."))}sendIdentity(e){var t;null===(t=this._trace)||void 0===t||t.identity("identity",null,e)}reset(){var e;null===(e=this._trace)||void 0===e||e.close(),this._trace=null}sendStatsEntry(e,t,n){var i;null===(i=this._trace)||void 0===i||i.statsEntry(e,t,n)}};n(478);class ai extends ni{constructor(){var e,t;super(...arguments),t={},(e="_storage")in this?Object.defineProperty(this,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):this[e]=t}clear(){this._storage={}}get length(){return Object.keys(this._storage).length}getItem(e){return this._storage[e]}setItem(e,t){this._storage[e]=t}removeItem(e){delete this._storage[e]}key(e){const t=Object.keys(this._storage);if(!(t.length<=e))return t[e]}serialize(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(0===e.length)return JSON.stringify(this._storage);const t={...this._storage};return e.forEach((e=>{delete t[e]})),JSON.stringify(t)}}const di=new class extends ni{constructor(){super();try{this._storage=window.localStorage,this._localStorageDisabled=!1}catch(e){}this._storage||(console.warn("Local storage is disabled."),this._storage=new ai,this._localStorageDisabled=!0)}isLocalStorageDisabled(){return this._localStorageDisabled}setLocalStorageDisabled(e){this._localStorageDisabled=e;try{this._storage=e?new ai:window.localStorage}catch(e){}this._storage||(this._storage=new ai)}clear(){this._storage.clear(),this.emit("changed")}get length(){return this._storage.length}getItem(e){return this._storage.getItem(e)}setItem(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this._storage.setItem(e,t),n||this.emit("changed")}removeItem(e){this._storage.removeItem(e),this.emit("changed")}key(e){return this._storage.key(e)}serialize(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(this.isLocalStorageDisabled())return this._storage.serialize(e);const t=this._storage.length,n={};for(let i=0;i=14||this._getIOSVersion()>=14}isUserInteractionRequiredForUnmute(){return this.isFirefox()&&this.isVersionLessThan("68")}supportsVideoMuteOnConnInterrupted(){return this.isChromiumBased()&&this.isVersionLessThan("144")||this.isReactNative()}supportsBandwidthStatistics(){return!this.isFirefox()&&!this.isWebKitBased()}supportsCodecPreferences(){return Boolean(window.RTCRtpTransceiver&&"setCodecPreferences"in window.RTCRtpTransceiver.prototype&&window.RTCRtpReceiver&&void 0!==window.RTCRtpReceiver.getCapabilities)&&!this.isWebKitBased()}supportsDDExtHeaders(){return!this.isFirefox()}supportsDeviceChangeEvent(){return navigator.mediaDevices&&void 0!==navigator.mediaDevices.ondevicechange&&void 0!==navigator.mediaDevices.addEventListener}supportsPerformanceObserver(){return void 0!==window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes.indexOf("longtask")>-1}supportsReceiverStats(){return void 0!==window.RTCRtpReceiver&&Object.keys(RTCRtpReceiver.prototype).indexOf("getSynchronizationSources")>-1}supportsRTTStatistics(){return!this.isFirefox()}supportsScalabilityModeAPI(){return this.isChromiumBased()&&this.isEngineVersionGreaterThan(112)}supportsTrackBasedStats(){return this.isChromiumBased()&&this.isEngineVersionLessThan(112)}supportsVP9(){return this.isChromiumBased()||this.isReactNative()}usesSdpMungingForSimulcast(){return this.isChromiumBased()||this.isReactNative()||this.isWebKitBased()}usesRidsForSimulcast(){return!1}supportsGetDisplayMedia(){return void 0!==navigator.getDisplayMedia||void 0!==navigator.mediaDevices&&void 0!==navigator.mediaDevices.getDisplayMedia}supportsEncodedTransform(){return Boolean(window.RTCRtpScriptTransform)}supportsInsertableStreams(){if(void 0===window.RTCRtpSender||!window.RTCRtpSender.prototype.createEncodedStreams)return!1;const e=new ReadableStream;try{return window.postMessage(e,"*",[e]),!0}catch{return!1}}supportsAudioRed(){return Boolean(window.RTCRtpSender&&window.RTCRtpSender.getCapabilities&&window.RTCRtpSender.getCapabilities("audio").codecs.some((e=>"audio/red"===e.mimeType))&&window.RTCRtpReceiver&&window.RTCRtpReceiver.getCapabilities&&window.RTCRtpReceiver.getCapabilities("audio").codecs.some((e=>"audio/red"===e.mimeType)))}supportsVADDetection(){return this.isChromiumBased()}supportsRTX(){return!(this.isFirefox()&&this.isVersionLessThan("96"))}_getSafariVersion(){return this.isSafari()?Number.parseInt(this.getVersion(),10):-1}_getIOSVersion(){return this.isWebKitBased()?Number.parseInt(this.getOSVersion(),10):-1}};var li=n(803),hi=n.n(li);const ui=S().getLogger("modules/watchRTC/WatchRTC.ts"),pi=new class{init(e){if(function(e){var t;const{analytics:n}=e;return null!==(t=null==n?void 0:n.watchRTCEnabled)&&void 0!==t&&t}(e)){if(ci.isReactNative())return void ui.warn("Cannot initialize WatchRTC in a react native environment!");if(!function(e){const{analytics:t,disableThirdPartyRequests:n}=e;return!(null!=t&&t.disabled||n)}(e))return void ui.error("Cannot initialize WatchRTC when analytics or third party requests are disabled.");try{var t;null!=e&&null!==(t=e.watchRTCConfigParams)&&void 0!==t&&t.rtcApiKey?(hi().init({rtcApiKey:e.watchRTCConfigParams.rtcApiKey}),this.options=e.watchRTCConfigParams,ui.info("WatchRTC initialized.")):ui.error("WatchRTC is enabled but missing API key.")}catch(e){ui.error("Failed to initialize WatchRTC: ",e)}}}start(e,t){try{this.options&&(this.options.rtcRoomId=this.options.rtcRoomId?this.options.rtcRoomId:e,this.options.rtcPeerId=this.options.rtcPeerId?this.options.rtcPeerId:t,hi().setConfig(this.options),ui.info("WatchRTC setConfig."))}catch(e){ui.error("Failed to start WatchRTC session: ",e)}}},mi=(0,E.getLogger)("modules/statistics/AnalyticsAdapter.js"),gi=new class{constructor(){this.reset()}reset(){this.disposed=!1,this.analyticsHandlers=new Set,this.cache=[],this.permanentProperties={},this.conferenceName="",this.addPermanentProperties({user_agent:navigator.userAgent,browser_name:ci.getName()})}dispose(){mi.debug("Disposing of analytics adapter."),this.analyticsHandlers&&this.analyticsHandlers.size>0&&this.analyticsHandlers.forEach((e=>{"function"==typeof e.dispose&&e.dispose()})),this.setAnalyticsHandlers([]),this.disposed=!0}setAnalyticsHandlers(e){if(this.disposed)return;this.analyticsHandlers=new Set(e),this._setUserProperties();const t=this.cache;this.cache=null,t&&t.forEach((e=>this._sendEvent(e)))}_setUserProperties(){this.analyticsHandlers.forEach((e=>{try{e.setUserProperties(this.permanentProperties)}catch(e){mi.warn(`Error in setUserProperties method of one of the analytics handlers: ${e}`)}}))}addPermanentProperties(e){this.permanentProperties={...this.permanentProperties,...e},this._setUserProperties()}setConferenceName(e){this.conferenceName=e,this.addPermanentProperties({conference_name:e})}sendEvent(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.disposed)return;let n=null;"string"==typeof e?n={type:Nt,action:e,actionSubject:e,source:e,attributes:t}:"object"==typeof e&&(n=e),this._verifyRequiredFields(n)?this._sendEvent(n):mi.error(`Dropping a mis-formatted event: ${JSON.stringify(n)}`)}_verifyRequiredFields(e){if(!e)return!1;e.type||(e.type=Nt);const t=e.type;return t!==Nt&&t!==Mt&&t!==Ft&&t!==Lt?(mi.error(`Unknown event type: ${t}`),!1):t===Mt?Boolean(e.name):(e.action=e.action||e.name||e.actionSubject,e.actionSubject=e.actionSubject||e.name||e.action,e.source=e.source||e.name||e.action||e.actionSubject,e.action&&e.actionSubject&&e.source?!!(t!==Lt||(e.objectType=e.objectType||"generic-object-type",e.containerType=e.containerType||"conference","conference"!==e.containerType||e.containerId||(e.containerId=this.conferenceName),e.objectType&&e.objectId&&e.containerType&&e.containerId))||(mi.error("Required field missing (containerId, containerType, objectId or objectType)"),!1):(mi.error("Required field missing (action, actionSubject or source)"),!1))}_maybeCacheEvent(e){return!!this.cache&&(this.cache.push(e),this.cache.length>100&&this.cache.splice(0,1),!0)}_sendEvent(e){this._maybeCacheEvent(e)||this.analyticsHandlers.forEach((t=>{try{t.sendEvent(e)}catch(e){mi.warn(`Error sending analytics event: ${e}`)}}))}},fi=n(810).getLogger("modules/statistics/LocalStatsCollector.js");window.AudioContext=window.AudioContext||window.webkitAudioContext;let vi=null;function _i(e,t,n){this.stream=e,this.intervalId=null,this.intervalMilis=t,this.audioLevel=0,this.callback=n,this.source=null,this.analyser=null}function yi(e){let t=e;return e>=Number.MAX_SAFE_INTEGER&&(t=0),t+1}function Ei(e){return e.length>0?e.reduce(((e,t)=>e+t))/e.length:0}function Si(e){return e.filter((e=>e>=0))}_i.prototype.start=function(){_i.isLocalStatsSupported()&&(vi.resume(),this.analyser=vi.createAnalyser(),this.analyser.smoothingTimeConstant=.8,this.analyser.fftSize=2048,this.source=vi.createMediaStreamSource(this.stream),this.source.connect(this.analyser),this.intervalId=setInterval((()=>{const e=new Uint8Array(this.analyser.frequencyBinCount);this.analyser.getByteTimeDomainData(e);const t=function(e){let t=0;const n=e.length;for(let i=0;i.2?t-.2:i<-.4?t+.4:e,parseFloat(n.toFixed(3))}(t,this.audioLevel),this.callback(this.audioLevel)}),this.intervalMilis))},_i.prototype.stop=function(){var e,t;this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),null===(e=this.analyser)||void 0===e||e.disconnect(),this.analyser=null,null===(t=this.source)||void 0===t||t.disconnect(),this.source=null},_i.init=function(){_i.connectAudioContext()},_i.isLocalStatsSupported=function(){var e;return Boolean(null===(e=window)||void 0===e?void 0:e.AudioContext)},_i.disconnectAudioContext=async function(){vi&&(fi.info("Disconnecting audio context"),await vi.close(),vi=null)},_i.connectAudioContext=function(){_i.isLocalStatsSupported()&&(fi.info("Connecting audio context"),vi=new AudioContext,vi.suspend())};class bi{constructor(){this.average=0,this.n=0}addNext(e){"number"==typeof e&&(this.n+=1,this.average=this.average+(e-this.average)/this.n)}getAverage(){return this.average}}function Ti(e,t){return isNaN(e)||isNaN(t)?0:e-t}const Ci=(0,E.getLogger)("modules/statistics/PerformanceObserverStats.js");class xi{constructor(e,t){this.eventEmitter=e,this.longTasks=0,this.maxDuration=0,this.performanceStatsInterval=t,this.stats=new bi}getLongTasksStats(){return{avgRatePerMinute:(60*this.stats.getAverage()).toFixed(2),maxDurationMs:this.maxDuration}}startObserver(){this.longTaskEventHandler=e=>{const t=e.getEntries();for(const e of t)this.longTasks++,this.maxDuration=Math.max(this.maxDuration,e.duration).toFixed(3)},Ci.info("Creating a Performance Observer for monitoring Long Tasks"),this.observer=new PerformanceObserver(this.longTaskEventHandler),this.observer.observe({type:"longtask",buffered:!0});const e=Date.now();this.longTasksIntervalId=setInterval((()=>{const t=Date.now(),n=this._lastTimeStamp?(t-this._lastTimeStamp)/1e3:(t-e)/1e3,i=this.longTasks/n;this.stats.addNext(i),this.eventEmitter.emit(vn,this.getLongTasksStats()),this.longTasks=0,this._lastTimeStamp=Date.now()}),this.performanceStatsInterval)}stopObserver(){this.observer&&this.observer.disconnect(),this.longTaskEventHandler=null,this.longTasksIntervalId&&(clearInterval(this.longTasksIntervalId),this.longTasksIntervalId=null)}}let Ri;!function(e){e.AUDIO="audio",e.VIDEO="video"}(Ri||(Ri={}));const Ai=new class{init(e){this._runInLiteMode=Boolean(e.runInLiteMode),this._ssrcRewriting=Boolean(e.ssrcRewritingEnabled)}isRunInLiteModeEnabled(){return this._runInLiteMode&&ci.supportsInsertableStreams()}isSsrcRewritingSupported(){return this._ssrcRewriting}},wi=(0,E.getLogger)("modules/statistics/RTPStatsCollector.js");function Ii(e,t){return e>0&&t>0?Math.round(e/t*100):0}function Pi(){this.loss={},this.bitrate={download:0,upload:0},this.resolution={},this.framerate=0,this.codec=""}function Di(){this.bandwidth={},this.bitrate={},this.packetLoss=null,this.transport=[]}function Oi(e,t,n,i){this.peerconnection=e,this.currentStatsReport=null,this.previousStatsReport=null,this.audioLevelReportHistory={},this.audioLevelsIntervalId=null,this.eventEmitter=i,this.conferenceStats=new Di,this.audioLevelsIntervalMilis=t,this.speakerList=[],this.statsIntervalId=null,this.statsIntervalMilis=n,this.ssrc2stats=new Map}Pi.prototype.setLoss=function(e){this.loss=e||{}},Pi.prototype.setResolution=function(e){this.resolution=e||{}},Pi.prototype.addBitrate=function(e){this.bitrate.download+=e.download,this.bitrate.upload+=e.upload},Pi.prototype.resetBitrate=function(){this.bitrate.download=0,this.bitrate.upload=0},Pi.prototype.setFramerate=function(e){this.framerate=e||0},Pi.prototype.setCodec=function(e){this.codec=e||""},Pi.prototype.setFramesDecoded=function(e){this.framesDecoded="number"==typeof e?e:void 0},Oi.prototype.setSpeakerList=function(e){this.speakerList=e},Oi.prototype.stop=function(){this.audioLevelsIntervalId&&(clearInterval(this.audioLevelsIntervalId),this.audioLevelsIntervalId=null),this.statsIntervalId&&(clearInterval(this.statsIntervalId),this.statsIntervalId=null)},Oi.prototype.errorCallback=function(e){wi.error("Get stats error",e),this.stop()},Oi.prototype.start=function(e){e&&ci.supportsReceiverStats()&&(this.audioLevelsIntervalId=setInterval((()=>{const e=this.peerconnection.getAudioLevels(this.speakerList);for(const t in e)if(e.hasOwnProperty(t)){const n=2.5*e[t];this.eventEmitter.emit(pn,this.peerconnection,Number.parseInt(t,10),n,!1)}}),this.audioLevelsIntervalMilis));const t=()=>{this.peerconnection.getStats().then((e=>{this.currentStatsReport="function"==typeof(null==e?void 0:e.result)?e.result():e;try{this.processStatsReport()}catch(e){wi.error("Processing of RTP stats failed:",e)}this.previousStatsReport=this.currentStatsReport})).catch((e=>this.errorCallback(e)))};t(),this.statsIntervalId=setInterval(t,this.statsIntervalMilis)},Oi.prototype._processAndEmitReport=function(){const e={download:0,upload:0},t={download:0,upload:0};let n=0,i=0;const r={},o={},s={};let a=0,d=0,c=0,l=0;const h=new Map;for(const[m,g]of this.ssrc2stats){var u;const f=g.loss,v=f.isDownloadStream?"download":"upload";e[v]+=f.packetsTotal,t[v]+=f.packetsLost;const _=g.bitrate.download,y=g.bitrate.upload;n+=_,i+=y,g.resetBitrate();const E=this.peerconnection.getTrackBySSRC(m);if(!E)continue;let S,b;f.isDownloadStream&&!E.isLocal()&&E.isVideoTrack()&&"number"==typeof g.framesDecoded&&h.set(m,g.framesDecoded),E.isAudioTrack()?(a+=_,d+=y,S=g.codec):(c+=_,l+=y,b=g.codec);const T=E.getParticipantId();if(!T){Ai.isSsrcRewritingSupported()||wi.error(`No participant ID returned by ${E}`);continue}const C=null!==(u=s[T])&&void 0!==u?u:{};C[m]={audio:S,video:b},s[T]=C;const{resolution:x}=g;if(!E.isVideoTrack()||isNaN(null==x?void 0:x.height)||isNaN(null==x?void 0:x.width)||-1===x.height||-1===x.width)continue;const R=r[T]||{};if(E.isLocal()&&!ci.supportsTrackBasedStats()&&this.peerconnection.doesTrueSimulcast()){const e=this.peerconnection.getLocalVideoSSRCs(E);for(const t of e){var p;const e=null===(p=this.ssrc2stats.get(t))||void 0===p?void 0:p.resolution;null!=e&&e.height&&null!=e&&e.width&&(x.height=Math.max(x.height,e.height),x.width=Math.max(x.width,e.width))}}if(R[m]=x,r[T]=R,g.framerate>0){const e=o[T]||{};e[m]=g.framerate,o[T]=e}}this.conferenceStats.bitrate={upload:i,download:n},this.conferenceStats.bitrate.audio={upload:d,download:a},this.conferenceStats.bitrate.video={upload:l,download:c},this.conferenceStats.packetLoss={total:Ii(t.download+t.upload,e.download+e.upload),download:Ii(t.download,e.download),upload:Ii(t.upload,e.upload)};const m={};let g;Object.keys(this.audioLevelReportHistory).forEach((e=>{const{data:t,isLocal:n}=this.audioLevelReportHistory[e],i=t.reduce(((e,t)=>e+t))/t.length;if(n)g=i;else{const t=this.peerconnection.getTrackBySSRC(Number(e));if(t){const e=t.getParticipantId();e&&(m[e]=i)}}})),this.audioLevelReportHistory={},this.eventEmitter.emit(fn,this.peerconnection,{bandwidth:this.conferenceStats.bandwidth,bitrate:this.conferenceStats.bitrate,codec:s,framerate:o,framesDecoded:h,localAvgAudioLevels:g,avgAudioLevels:m,packetLoss:this.conferenceStats.packetLoss,resolution:r,transport:this.conferenceStats.transport}),this.conferenceStats.transport=[]},Oi.prototype.getNonNegativeValue=function(e){let t=e;return"number"!=typeof t&&(t=Number(t)),isNaN(t)?0:Math.max(0,t)},Oi.prototype._calculateBitrate=function(e,t,n){const i=this.getNonNegativeValue(e[n]),r=this.getNonNegativeValue(t[n]),o=Math.max(0,i-r),s=e.timestamp-t.timestamp;let a=0;return s>0&&(a=Math.round(8*o/s)),a},Oi.prototype._calculateFps=function(e,t,n){const i=e.timestamp-t.timestamp;let r=0;return i>0&&e[n]&&(r=(e[n]-t[n])/i*1e3),r},Oi.prototype.processStatsReport=function(){const e={};this.currentStatsReport.forEach((t=>{const n=this.previousStatsReport?this.previousStatsReport.get(t.id):null;if("candidate-pair"===t.type&&t.nominated&&"succeeded"===t.state){const e=t.availableIncomingBitrate,n=t.availableOutgoingBitrate;(e||n)&&(this.conferenceStats.bandwidth={download:Math.round(e/1e3),upload:Math.round(n/1e3)});const i=this.currentStatsReport.get(t.remoteCandidateId),r=this.currentStatsReport.get(t.localCandidateId);if(i&&r){const e=`${ci.isChromiumBased()?i.ip:i.address}:${i.port}`,n=`${ci.isChromiumBased()?r.ip:r.address}:${r.port}`,o=i.protocol,s=this.conferenceStats.transport;s.some((t=>t.ip===e&&t.type===o&&t.localip===n))||s.push({ip:e,type:o,localip:n,p2p:this.peerconnection.isP2P,localCandidateType:r.candidateType,remoteCandidateType:i.candidateType,networkType:r.networkType,rtt:1e3*t.currentRoundTripTime})}}else if("inbound-rtp"===t.type||"outbound-rtp"===t.type){const r=this.getNonNegativeValue(t.ssrc);if(!r)return;let o=this.ssrc2stats.get(r);o||(o=new Pi,this.ssrc2stats.set(r,o));let s=!0,a="packetsReceived";"outbound-rtp"===t.type&&(s=!1,a="packetsSent");let d,c=t[a];if((!c||c<0)&&(c=0),n){const e=this.getNonNegativeValue(n[a]),i=Math.max(0,c-e),r=this.getNonNegativeValue(t.packetsLost),d=this.getNonNegativeValue(n.packetsLost),l=Math.max(0,r-d);o.setLoss({packetsTotal:i+l,packetsLost:l,isDownloadStream:s})}if(void 0!==t.frameHeight&&void 0!==t.frameWidth){var i;const e=null===(i=t.active)||void 0===i||i;("inbound-rtp"===t.type||!ci.supportsTrackBasedStats()&&e)&&(d={height:t.frameHeight,width:t.frameWidth})}o.setResolution(d);let l=t.framesPerSecond;!l&&n&&(l=this._calculateFps(t,n,"framesSent")),o.setFramerate(Math.round(l||0)),"inbound-rtp"===t.type&&n&&o.addBitrate({download:this._calculateBitrate(t,n,"bytesReceived"),upload:0}),"inbound-rtp"===t.type&&"number"==typeof t.framesDecoded&&o.setFramesDecoded(t.framesDecoded),"inbound-rtp"!==t.type&&n&&(e[r]=this.getNonNegativeValue(t.bytesSent),o.addBitrate({download:0,upload:this._calculateBitrate(t,n,"bytesSent")}));const h=this.currentStatsReport.get(t.codecId);if(h){const e=h.mimeType.split("/")[1];e&&o.setCodec(e)}}else if(ci.supportsTrackBasedStats()&&"track"===t.type&&t.kind===Ri.VIDEO&&!t.remoteSource){const e={height:t.frameHeight,width:t.frameWidth},i=this.peerconnection.getLocalTracks(Ri.VIDEO);if(null==i||!i.length)return;const r=this.peerconnection.getSsrcByTrackId(t.trackIdentifier);if(!r)return;let o=this.ssrc2stats.get(r);o||(o=new Pi,this.ssrc2stats.set(r,o)),e.height&&e.width&&o.setResolution(e);let s=t.framesPerSecond;!s&&n&&(s=this._calculateFps(t,n,"framesSent")),o.setFramerate(s)}})),Object.keys(e).length&&this.eventEmitter.emit(gn,this.peerconnection,e),this._processAndEmitReport()};const ki=n(810).getLogger("modules/statistics/statistics.js");let Ni;function Mi(e,t){this.rtpStatsMap=new Map,this.eventEmitter=new ii,this.conference=e,this.xmpp=null==e?void 0:e.xmpp,this.options=t||{},Mi.instances.add(this),si.start(this.conference),ci.isReactNative()||pi.start(this.options.roomName,this.options.userName)}Mi.init=function(e){Mi.audioLevelsEnabled=!e.disableAudioLevels,"number"==typeof e.pcStatsInterval&&(Mi.pcStatsInterval=e.pcStatsInterval),"number"==typeof e.audioLevelsInterval&&(Mi.audioLevelsInterval=e.audioLevelsInterval),"number"==typeof e.longTasksStatsInterval&&(Mi.longTasksStatsInterval=e.longTasksStatsInterval),Mi.disableThirdPartyRequests=e.disableThirdPartyRequests,_i.init(),pi.init(e),si.init(e)},Mi.audioLevelsEnabled=!1,Mi.audioLevelsInterval=200,Mi.pcStatsInterval=1e4,Mi.disableThirdPartyRequests=!1,Mi.analytics=gi,Object.defineProperty(Mi,"instances",{get:()=>(Ni||(Ni=new Set),Ni)}),Mi.prototype.startRemoteStats=function(e){this.stopRemoteStats(e);try{const t=new Oi(e,Mi.audioLevelsInterval,Mi.pcStatsInterval,this.eventEmitter);t.start(Mi.audioLevelsEnabled),this.rtpStatsMap.set(e.id,t)}catch(e){ki.error(`Failed to start collecting remote statistics: ${e}`)}},Mi.localStats=[],Mi.startLocalStats=function(e,t){if(ci.isIosBrowser()&&e.addEventListener(bt.NO_DATA_FROM_SOURCE,(async e=>{if(e){for(const e of Mi.localStats)e.stop();await _i.disconnectAudioContext()}else{_i.connectAudioContext();for(const e of Mi.localStats)e.start()}})),!Mi.audioLevelsEnabled)return;e.addEventListener(bt.LOCAL_TRACK_STOPPED,(()=>{Mi.stopLocalStats(e)}));const n=new _i(e.getOriginalStream(),Mi.audioLevelsInterval,t);this.localStats.push(n),n.start()},Mi.prototype.addAudioLevelListener=function(e){Mi.audioLevelsEnabled&&this.eventEmitter.on(pn,e)},Mi.prototype.removeAudioLevelListener=function(e){Mi.audioLevelsEnabled&&this.eventEmitter.removeListener(pn,e)},Mi.prototype.addBeforeDisposedListener=function(e){this.eventEmitter.on(mn,e)},Mi.prototype.removeBeforeDisposedListener=function(e){this.eventEmitter.removeListener(mn,e)},Mi.prototype.addConnectionStatsListener=function(e){this.eventEmitter.on(fn,e)},Mi.prototype.removeConnectionStatsListener=function(e){this.eventEmitter.removeListener(fn,e)},Mi.prototype.addByteSentStatsListener=function(e){this.eventEmitter.on(gn,e)},Mi.prototype.removeByteSentStatsListener=function(e){this.eventEmitter.removeListener(gn,e)},Mi.prototype.addLongTasksStatsListener=function(e){this.eventEmitter.on(vn,e)},Mi.prototype.attachLongTasksStats=function(){ci.supportsPerformanceObserver()?(this.performanceObserverStats=new xi(this.eventEmitter,Mi.longTasksStatsInterval),this.conference.on(ce,(()=>this.performanceObserverStats.startObserver())),this.conference.on(le,(()=>this.performanceObserverStats.stopObserver()))):ki.warn("Performance observer for long tasks not supported by browser!")},Mi.prototype.getLongTasksStats=function(){return this.performanceObserverStats?this.performanceObserverStats.getLongTasksStats():null},Mi.prototype.removeLongTasksStatsListener=function(e){this.eventEmitter.removeListener(vn,e)},Mi.prototype.setSpeakerList=function(e){for(const t of Array.from(this.rtpStatsMap.values()))t.peerconnection.isP2P||t.setSpeakerList(e)},Mi.prototype.dispose=function(){try{this.eventEmitter.emit(mn);for(const e of this.rtpStatsMap.keys())this._stopRemoteStats(e);this.eventEmitter&&this.eventEmitter.removeAllListeners()}finally{Mi.instances.delete(this)}},Mi.stopLocalStats=function(e){if(!Mi.audioLevelsEnabled)return;const t=e.getOriginalStream();for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:{};e?(t="object"==typeof e?e:{name:e,properties:n},ki.log(JSON.stringify(t)),this.analytics.sendEvent(e,n)):ki.warn("No event or event name given.")},Mi.sendAnalytics=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.analytics.sendEvent(e,t)};var Li=n(832),Fi=n.n(Li),ji=n(987),Vi=n(514),Ui=n.n(Vi),Hi=n(609);const $i=(0,E.getLogger)("JitsiConferenceEventManager.js");function Ji(e){this.conference=e,this.xmppListeners={}}Ji.prototype.setupChatRoomListeners=function(){const e=this.conference,t=e.room;this.chatRoomForwarder=new(Fi())(t,this.conference.eventEmitter),t.addListener(Hi.XMPPEvents.ICE_RESTARTING,(t=>{t.isP2P||e.rtc.closeBridgeChannel()})),t.addListener(Hi.XMPPEvents.PARTICIPANT_FEATURES_CHANGED,((t,n)=>{const i=e.getParticipantById(St.Strophe.getResourceFromJid(t));i&&(i.setFeatures(n),e.eventEmitter.emit(Be,i))})),t.addListener(Hi.XMPPEvents.ICE_RESTART_SUCCESS,((t,n)=>{!t.isP2P&&e._setBridgeChannel(n,t.peerconnection)})),t.addListener(Hi.XMPPEvents.AUDIO_MUTED_BY_FOCUS,(t=>{Mi.sendAnalytics(ln(Ri.AUDIO)),e.mutedByFocusActor=t,e.rtc.setAudioMute(!0).then((()=>{e.isMutedByFocus=!0,e.mutedByFocusActor=null})).catch((t=>{e.mutedByFocusActor=null,$i.warn("Error while audio muting due to focus request",t)}))})),t.addListener(Hi.XMPPEvents.VIDEO_MUTED_BY_FOCUS,(t=>{Mi.sendAnalytics(ln(Ri.VIDEO)),e.mutedVideoByFocusActor=t,e.rtc.setVideoMute(!0).then((()=>{e.isVideoMutedByFocus=!0,e.mutedVideoByFocusActor=null})).catch((t=>{e.mutedVideoByFocusActor=null,$i.warn("Error while video muting due to focus request",t)}))})),this.chatRoomForwarder.forward(Hi.XMPPEvents.SUBJECT_CHANGED,Qe),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_JOINED,ce),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_JOIN_IN_PROGRESS,de),this.chatRoomForwarder.forward(Hi.XMPPEvents.MEETING_ID_SET,he),this.chatRoomForwarder.forward(Hi.XMPPEvents.CONFERENCE_TIMESTAMP_RECEIVED,oe),t.addListener(Hi.XMPPEvents.MUC_JOINED,(()=>{this.conference._onMucJoined(),this.conference.isJvbConnectionInterrupted=!1,Object.keys(t.connectionTimes).forEach((e=>{const n=sn(`conference_${e}`,{value:t.connectionTimes[e]});Mi.sendAnalytics(n)})),Object.keys(t.xmpp.connectionTimes).forEach((e=>{const n=sn(`xmpp_${e}`,{value:t.xmpp.connectionTimes[e]});Mi.sendAnalytics(n)}))})),t.addListener(Hi.XMPPEvents.RENEGOTIATION_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)})),t.addListener(Ot,(t=>{e.eventEmitter.emit(rt,t)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_JOIN_ERROR,ae,w),this.chatRoomForwarder.forward(Hi.XMPPEvents.DISPLAY_NAME_REQUIRED,ae,k),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_CONNECT_ERROR,ae,w),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_CONNECT_NOT_ALLOWED_ERROR,ae,P),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_CONNECT_MEMBERS_ONLY_ERROR,ae,D),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_MAX_USERS_ERROR,ae,A),this.chatRoomForwarder.forward(Hi.XMPPEvents.PASSWORD_REQUIRED,ae,H),this.chatRoomForwarder.forward(Hi.XMPPEvents.AUTHENTICATION_REQUIRED,ae,T),this.chatRoomForwarder.forward(Hi.XMPPEvents.BRIDGE_DOWN,ae,J),t.addListener(Hi.XMPPEvents.BRIDGE_DOWN,(()=>Mi.sendAnalytics({action:"bridge.down",actionSubject:"bridge.down",type:Nt}))),t.addListener(Hi.XMPPEvents.CONNECTION_RESTARTED,(t=>{e._onConferenceRestarted(t)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.RESERVATION_ERROR,ae,$),this.chatRoomForwarder.forward(Hi.XMPPEvents.GRACEFUL_SHUTDOWN,ae,L),t.addListener(Hi.XMPPEvents.CONNECTION_ICE_FAILED,(t=>{e._onIceConnectionFailed(t)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_DESTROYED,ae,R),this.chatRoomForwarder.forward(Hi.XMPPEvents.CHAT_ERROR_RECEIVED,se,C),this.chatRoomForwarder.forward(Hi.XMPPEvents.SETTINGS_ERROR_RECEIVED,se,x),this.chatRoomForwarder.forward(Hi.XMPPEvents.FOCUS_DISCONNECTED,ae,N),t.addListener(Hi.XMPPEvents.FOCUS_LEFT,(()=>{Mi.sendAnalytics({action:"focus.left",actionSubject:"focus.left",type:kt.TYPE_OPERATIONAL}),e.eventEmitter.emit(ae,M)})),t.addListener(Hi.XMPPEvents.SESSION_ACCEPT_TIMEOUT,(e=>{Mi.sendAnalyticsAndLog(dn(Vt,{p2p:e.isP2P}))})),t.addListener(Hi.XMPPEvents.RECORDER_STATE_CHANGED,((t,n)=>{if(n){const i=St.Strophe.getResourceFromJid(n),r=e.getParticipantById(i)||i;"off"===t.getStatus()?t.setTerminator(r):"on"===t.getStatus()&&t.setInitiator(r)}e.eventEmitter.emit(Ke,t)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.TRANSCRIPTION_STATUS_CHANGED,st),this.chatRoomForwarder.forward(Hi.XMPPEvents.VIDEO_SIP_GW_AVAILABILITY_CHANGED,ht),this.chatRoomForwarder.forward(Hi.XMPPEvents.VIDEO_SIP_GW_SESSION_STATE_CHANGED,ut),this.chatRoomForwarder.forward(Hi.XMPPEvents.PHONE_NUMBER_CHANGED,Ge),t.setParticipantPropertyListener(((t,n)=>{const i=e.getParticipantById(n);i&&i.setProperty(t.tagName.substring("jitsi_participant_".length),t.value)})),t.addListener(Hi.XMPPEvents.KICKED,e.onMemberKicked.bind(e)),t.addListener(Hi.XMPPEvents.SUSPEND_DETECTED,e.onSuspendDetected.bind(e)),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LOCK_CHANGED,ke),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_MEMBERS_ONLY_CHANGED,Ne),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_VISITORS_SUPPORTED_CHANGED,mt),t.addListener(Hi.XMPPEvents.MUC_MEMBER_JOINED,e.onMemberJoined.bind(e)),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LOBBY_MEMBER_JOINED,Pe),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LOBBY_MEMBER_UPDATED,Oe),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LOBBY_MEMBER_LEFT,De),t.addListener(Hi.XMPPEvents.MUC_MEMBER_BOT_TYPE_CHANGED,e._onMemberBotTypeChanged.bind(e)),t.addListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,e.onMemberLeft.bind(e)),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_LEFT,le),this.chatRoomForwarder.forward(Hi.XMPPEvents.MUC_DENIED_ACCESS,ae,O),t.addListener(Hi.XMPPEvents.DISPLAY_NAME_CHANGED,e.onDisplayNameChanged.bind(e)),t.addListener(Hi.XMPPEvents.LOCAL_ROLE_CHANGED,(t=>{e.onLocalRoleChanged(t)})),t.addListener(Hi.XMPPEvents.MUC_ROLE_CHANGED,e.onUserRoleChanged.bind(e)),t.addListener(Ui().IDENTITY_UPDATED,((t,n)=>{e.authEnabled=t,e.authIdentity=n,e.eventEmitter.emit(W,t,n)})),t.addListener(Hi.XMPPEvents.MESSAGE_RECEIVED,((t,n,i,r,o,s)=>{const a=St.Strophe.getResourceFromJid(t);e.eventEmitter.emit(Me,a,n,r,o,s)})),t.addListener(Hi.XMPPEvents.PRIVATE_MESSAGE_RECEIVED,((t,n,i,r)=>{const o=St.Strophe.getResourceFromJid(t);e.eventEmitter.emit(Je,o,n,r)})),t.addListener(Hi.XMPPEvents.PRESENCE_STATUS,((t,n)=>{const i=St.Strophe.getResourceFromJid(t),r=e.getParticipantById(i);r&&r._status!==n&&(r._status=n,e.eventEmitter.emit(lt,i,n))})),t.addListener(Hi.XMPPEvents.JSON_MESSAGE_RECEIVED,((t,n)=>{const i=St.Strophe.getResourceFromJid(t),r=e.getParticipantById(i);r?e.eventEmitter.emit(Ce,r,n):e.eventEmitter.emit(Ve,i,n)})),t.addPresenceListener("startmuted",((t,n)=>{if(e.myUserId()===n)return;const i=e.getParticipantById(n);if(!i||!i.isModerator())return;const r="true"===t.attributes.audio,o="true"===t.attributes.video;let s=!1;r!==e.startMutedPolicy.audio&&(e.startMutedPolicy.audio=r,s=!0),o!==e.startMutedPolicy.video&&(e.startMutedPolicy.video=o,s=!0),s&&e.eventEmitter.emit(Xe,e.startMutedPolicy)})),this.chatRoomForwarder.forward(Hi.XMPPEvents.BREAKOUT_ROOMS_MOVE_TO_ROOM,ie),this.chatRoomForwarder.forward(Hi.XMPPEvents.BREAKOUT_ROOMS_UPDATED,re),this.chatRoomForwarder.forward(Hi.XMPPEvents.ROOM_METADATA_UPDATED,Le)},Ji.prototype.setupRTCListeners=function(){const e=this.conference,t=e.rtc;t.addListener(ji.default.REMOTE_TRACK_ADDED,e.onRemoteTrackAdded.bind(e)),t.addListener(ji.default.REMOTE_TRACK_REMOVED,e.onRemoteTrackRemoved.bind(e)),t.addListener(ji.default.DOMINANT_SPEAKER_CHANGED,((t,n,i)=>{if((e.lastDominantSpeaker!==t||e.dominantSpeakerIsSilent!==i)&&e.room&&(e.lastDominantSpeaker=t,e.dominantSpeakerIsSilent=i,e.eventEmitter.emit(ye,t,n,i),e.statistics&&e.myUserId()===t&&e.xmpp.sendDominantSpeakerEvent(e.room.roomjid,i),e.lastDominantSpeaker!==t&&n&&n.length)){const i=n.slice(0);e.myUserId!==t&&i.splice(0,0,t),i.length>5&&i.splice(5,i.length-5),e.statistics&&e.statistics.setSpeakerList(i)}})),t.addListener(ji.default.DATA_CHANNEL_OPEN,(()=>{const t=window.performance.now(),n="data.channel.opened";$i.log(`(TIME) ${n}:\\t`,t),e.room.connectionTimes[n]=t,Mi.sendAnalytics(sn(n,{value:t})),e.eventEmitter.emit(ve)})),t.addListener(ji.default.DATA_CHANNEL_CLOSED,(t=>{e.eventEmitter.emit(fe,t)})),t.addListener(ji.default.VIDEO_SSRCS_REMAPPED,(e=>{for(const t of this.conference.getMediaSessions())t.processSourceMap(e,Ri.VIDEO)})),t.addListener(ji.default.AUDIO_SSRCS_REMAPPED,(e=>{for(const t of this.conference.getMediaSessions())t.processSourceMap(e,Ri.AUDIO)})),t.addListener(ji.default.ENDPOINT_MESSAGE_RECEIVED,((t,n)=>{const i=e.getParticipantById(t);i?e.eventEmitter.emit(Ce,i,n):$i.warn(`Ignored ENDPOINT_MESSAGE_RECEIVED for not existing participant: ${t}`,n)})),t.addListener(ji.default.ENDPOINT_STATS_RECEIVED,((t,n)=>{const i=e.getParticipantById(t);i?e.eventEmitter.emit(xe,i,n):$i.warn(`Ignoring ENDPOINT_STATS_RECEIVED for a non-existant participant: ${t}`)})),t.addListener(ji.default.CREATE_ANSWER_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)})),t.addListener(ji.default.CREATE_OFFER_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)})),t.addListener(ji.default.SET_LOCAL_DESCRIPTION_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)})),t.addListener(ji.default.SET_REMOTE_DESCRIPTION_FAILED,((t,n)=>{n.isP2P||e.eventEmitter.emit(ae,V,t)}))},Ji.prototype.removeXMPPListeners=function(){const e=this.conference;Object.keys(this.xmppListeners).forEach((t=>{e.xmpp.removeListener(t,this.xmppListeners[t])})),this.xmppListeners={}},Ji.prototype.setupXMPPListeners=function(){const e=this.conference;this._addConferenceXMPPListener(Hi.XMPPEvents.CALL_INCOMING,e.onIncomingCall.bind(e)),this._addConferenceXMPPListener(Hi.XMPPEvents.CALL_ACCEPTED,e.onCallAccepted.bind(e)),this._addConferenceXMPPListener(Hi.XMPPEvents.TRANSPORT_INFO,e.onTransportInfo.bind(e)),this._addConferenceXMPPListener(Hi.XMPPEvents.CALL_ENDED,e.onCallEnded.bind(e)),this._addConferenceXMPPListener(Hi.XMPPEvents.START_MUTED_FROM_FOCUS,((t,n)=>{e.options.config.ignoreStartMuted||(e.startAudioMuted=t,e.startVideoMuted=n,t&&(e.isMutedByFocus=!0),n&&(e.isVideoMutedByFocus=!0),e.getLocalTracks().forEach((t=>{switch(t.getType()){case Ri.AUDIO:e.startAudioMuted&&t.mute();break;case Ri.VIDEO:e.startVideoMuted&&t.mute()}})),e.eventEmitter.emit(Ye))})),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_CHANGED,((t,n,i)=>{const r=e.getParticipants().find((e=>e.getJid()===i));e.eventEmitter.emit(Y,{enabled:t,mediaType:n,actor:r})})),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_PARTICIPANT_APPROVED,((t,n)=>{const i=e.getParticipantById(St.Strophe.getResourceFromJid(n));i&&e.eventEmitter.emit(Q,{participant:i,mediaType:t})})),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_PARTICIPANT_REJECTED,((t,n)=>{const i=e.getParticipantById(St.Strophe.getResourceFromJid(n));i&&e.eventEmitter.emit(Z,{participant:i,mediaType:t})})),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_APPROVED,(t=>e.eventEmitter.emit(X,{mediaType:t}))),this._addConferenceXMPPListener(Hi.XMPPEvents.AV_MODERATION_REJECTED,(t=>{e.eventEmitter.emit(ee,{mediaType:t})})),this._addConferenceXMPPListener(Hi.XMPPEvents.VISITORS_MESSAGE,(t=>e.eventEmitter.emit(gt,t))),this._addConferenceXMPPListener(Hi.XMPPEvents.VISITORS_REJECTION,(()=>e.eventEmitter.emit(ft)))},Ji.prototype._addConferenceXMPPListener=function(e,t){this.xmppListeners[e]=t,this.conference.xmpp.addListener(e,t)},Ji.prototype.setupStatisticsListeners=function(){const e=this.conference;e.statistics&&(e.statistics.addAudioLevelListener(((t,n,i,r)=>{e.rtc.setAudioLevel(t,n,i,r)})),e.statistics.addBeforeDisposedListener((()=>{e.eventEmitter.emit(te)})),e.options.config.startSilent||e.statistics.addByteSentStatsListener(((t,n)=>{e.getLocalTracks(Ri.AUDIO).forEach((e=>{const i=t.getLocalSSRC(e);i&&n.hasOwnProperty(i)&&e.onByteSentStatsReceived(t,n[i])}))})))};class Bi{constructor(e,t,n,i,r,o,s,a,d){this._jid=e,this._id=St.Strophe.getResourceFromJid(e),this._conference=t,this._displayName=n,this._supportsDTMF=!1,this._tracks=[],this._role="none",this._status=o,this._hidden=i,this._statsID=r,this._properties={},this._identity=s,this._isReplacing=a,this._isReplaced=d,this._features=new Set,this._sources=new Map}_isMediaTypeMuted(e){return this.getTracks().reduce(((t,n)=>t&&(n.getType()!==e||n.isMuted())),!0)}_setSources(e,t,n,i){var r;let o=this._sources.get(e);const s={muted:t,videoType:i};null!==(r=o)&&void 0!==r&&r.size?o.set(n,s):(o=new Map,o.set(n,s),this._sources.set(e,o))}getBotType(){return this._botType}getConference(){return this._conference}getConnectionJid(){return this._connectionJid}getDisplayName(){return this._displayName}getFeatures(){return Promise.resolve(this._features)}getId(){return this._id}getIdentity(){return this._identity}getJid(){return this._jid}getProperty(e){return this._properties[e]}getRole(){return this._role}getSources(){return this._sources}getStatsID(){return this._statsID}getStatus(){return this._status}getTracks(){return this._tracks.slice()}getTracksByMediaType(e){return this.getTracks().filter((t=>t.getType()===e))}hasFeature(e){return this._features.has(e)}isAudioMuted(){return this._isMediaTypeMuted(Ri.AUDIO)}isHidden(){return this._hidden}isHiddenFromRecorder(){var e,t;return"true"===(null===(e=this._identity)||void 0===e||null===(t=e.user)||void 0===t?void 0:t["hidden-from-recorder"])}isModerator(){return"moderator"===this._role}isReplaced(){return this._isReplaced}isReplacing(){return this._isReplacing}isVideoMuted(){return this._isMediaTypeMuted(Ri.VIDEO)}setBotType(e){this._botType=e}setConnectionJid(e){this._connectionJid=e}setFeatures(e){this._features=e||new Set}setIsReplaced(e){this._isReplaced=e}setIsReplacing(e){this._isReplacing=e}setProperty(e,t){const n=this._properties[e];t!==n&&(this._properties[e]=t,this._conference.eventEmitter.emit(qe,this,e,n,t))}setRole(e){this._role=e}supportsDTMF(){return this._supportsDTMF}}let qi;!function(e){e.CONSTRAINT_FAILED="gum.constraint_failed",e.ELECTRON_DESKTOP_PICKER_ERROR="gum.electron_desktop_picker_error",e.ELECTRON_DESKTOP_PICKER_NOT_FOUND="gum.electron_desktop_picker_not_found",e.GENERAL="gum.general",e.NOT_FOUND="gum.not_found",e.PERMISSION_DENIED="gum.permission_denied",e.SCREENSHARING_GENERIC_ERROR="gum.screensharing_generic_error",e.SCREENSHARING_USER_CANCELED="gum.screensharing_user_canceled",e.TIMEOUT="gum.timeout",e.TRACK_IS_DISPOSED="track.track_is_disposed",e.TRACK_NO_STREAM_FOUND="track.no_stream_found",e.UNSUPPORTED_RESOLUTION="gum.unsupported_resolution",e.TRACK_TOO_MANY_TRACKS_IN_STREAM="track.too_many_tracks_in_stream",e.TRACK_NO_STREAM_TRACKS_FOUND="track.no_stream_tracks_found"}(qi||(qi={}));const Gi=qi.CONSTRAINT_FAILED,zi=qi.ELECTRON_DESKTOP_PICKER_ERROR,Ki=qi.ELECTRON_DESKTOP_PICKER_NOT_FOUND,Wi=qi.GENERAL,Xi=qi.NOT_FOUND,Yi=qi.PERMISSION_DENIED,Qi=qi.SCREENSHARING_GENERIC_ERROR,Zi=qi.SCREENSHARING_USER_CANCELED,er=qi.TIMEOUT,tr=qi.TRACK_IS_DISPOSED,nr=qi.TRACK_NO_STREAM_FOUND,ir=qi.UNSUPPORTED_RESOLUTION,rr=qi.TRACK_TOO_MANY_TRACKS_IN_STREAM,or=qi.TRACK_NO_STREAM_TRACKS_FOUND,sr={};function ar(e,t,n){if("object"==typeof e&&void 0!==e.name)switch(this.gum={error:e,constraints:t,devices:n&&Array.isArray(n)?n.slice(0):void 0},e.name){case"NotAllowedError":case"PermissionDeniedError":case"SecurityError":this.name=Yi,this.message=sr[this.name]+(this.gum.devices||[]).join(", ");break;case"DevicesNotFoundError":case"NotFoundError":this.name=Xi,this.message=sr[this.name]+(this.gum.devices||[]).join(", ");break;case"ConstraintNotSatisfiedError":case"OverconstrainedError":{const i=e.constraintName||e.constraint;t&&t.video&&(!n||n.indexOf("video")>-1)&&("minWidth"===i||"maxWidth"===i||"minHeight"===i||"maxHeight"===i||"width"===i||"height"===i||"deviceId"===i)?(this.name=ir,this.message=sr[this.name]+function(e,t){if(t&&t.video&&t.video.mandatory)switch(e){case"width":return t.video.mandatory.minWidth;case"height":return t.video.mandatory.minHeight;default:return t.video.mandatory[e]||""}return""}(i,t)):(this.name=Gi,this.message=sr[this.name]+e.constraintName);break}default:this.name=Wi,this.message=e.message||sr[this.name]}else{if("string"!=typeof e)throw new Error("Invalid arguments");sr[e]?(this.name=e,this.message=t||sr[e]):this.message=e}this.stack=e.stack||(new Error).stack}sr[ir]="Video resolution is not supported: ",sr[Zi]="User canceled screen sharing prompt",sr[Qi]="Unknown error from screensharing",sr[zi]="Unkown error from desktop picker",sr[Ki]="Failed to detect desktop picker",sr[Wi]="Generic getUserMedia error",sr[Yi]="User denied permission to use device(s): ",sr[Xi]="Requested device(s) was/were not found: ",sr[Gi]="Constraint could not be satisfied: ",sr[er]="Could not start media source. Timeout occured!",sr[tr]="Track has been already disposed",sr[nr]="Track does not have an associated Media Stream",ar.prototype=Object.create(Error.prototype),ar.prototype.constructor=ar;const dr=ar;let cr;!function(e){e.CONNECTION_DISCONNECTED="connection.connectionDisconnected",e.CONNECTION_ESTABLISHED="connection.connectionEstablished",e.CONNECTION_FAILED="connection.connectionFailed",e.CONNECTION_REDIRECTED="connection.redirected",e.WRONG_STATE="connection.wrongState",e.DISPLAY_NAME_REQUIRED="connection.display_name_required",e.PROPERTIES_UPDATED="connection.propertiesUpdated"}(cr||(cr={}));const lr=cr.CONNECTION_DISCONNECTED,hr=cr.CONNECTION_ESTABLISHED,ur=cr.CONNECTION_FAILED,pr=cr.CONNECTION_REDIRECTED,mr=cr.WRONG_STATE,gr=cr.DISPLAY_NAME_REQUIRED,fr=cr.PROPERTIES_UPDATED;var vr=n(32);function _r(e){return vr.parse(e)}let yr;n(352),function(e){e.CONNECTION_DROPPED_ERROR="connection.droppedError",e.OTHER_ERROR="connection.otherError",e.PASSWORD_REQUIRED="connection.passwordRequired",e.SERVER_ERROR="connection.serverError"}(yr||(yr={}));const Er=yr.CONNECTION_DROPPED_ERROR,Sr=yr.OTHER_ERROR,br=yr.PASSWORD_REQUIRED,Tr=yr.SERVER_ERROR;class Cr{constructor(){var e=this;this.promise=new Promise(((t,n)=>{this.resolve=function(){e.clearRejectTimeout(),t(...arguments)},this.reject=function(){e.clearRejectTimeout(),n(...arguments)}})),this.then=this.promise.then.bind(this.promise),this.catch=this.promise.catch.bind(this.promise)}clearRejectTimeout(){clearTimeout(this._timeout)}setRejectTimeout(e){this._timeout=setTimeout((()=>{this.reject(new Error("timeout"))}),e)}}class xr{constructor(){this.eventEmitter=new ii,this.addEventListener=this.on=this.addListener,this.removeEventListener=this.off=this.removeListener}addCancellableListener(e,t){return this.addListener(e,t),()=>this.removeListener(e,t)}addListener(e,t){return this.eventEmitter.addListener(e,t)}removeListener(e,t){return this.eventEmitter.removeListener(e,t)}emit(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:{},t="";const n=document.querySelector(\'script[src*="lib-jitsi-meet"]\');if(n){const e=n.src.lastIndexOf("/");t=`${n.src.substring(0,e)}/`}let i=`${t}lib-jitsi-meet.e2ee-worker.js`;if(t&&"/"!==t){const e=new Blob([`importScripts("${i}");`],{type:"application/javascript"});i=window.URL.createObjectURL(e)}this._worker=new Worker(i,{name:"E2EE Worker"}),this._worker.onerror=e=>Rr.error(e),this._worker.postMessage({operation:"initialize",sharedKey:e})}cleanup(e){this._worker.postMessage({operation:"cleanup",participantId:e})}cleanupAll(){this._worker.postMessage({operation:"cleanupAll"})}handleReceiver(e,t,n){if(!e[Ar])if(e[Ar]=!0,window.RTCRtpScriptTransform){const t={operation:"decode",participantId:n};e.transform=new RTCRtpScriptTransform(this._worker,t)}else{const t=e.createEncodedStreams();this._worker.postMessage({operation:"decode",readableStream:t.readable,writableStream:t.writable,participantId:n},[t.readable,t.writable])}}handleSender(e,t,n){if(!e[Ar])if(e[Ar]=!0,window.RTCRtpScriptTransform){const t={operation:"encode",participantId:n};e.transform=new RTCRtpScriptTransform(this._worker,t)}else{const t=e.createEncodedStreams();this._worker.postMessage({operation:"encode",readableStream:t.readable,writableStream:t.writable,participantId:n},[t.readable,t.writable])}}setKey(e,t,n){this._worker.postMessage({operation:"setKey",key:t,keyIndex:n,participantId:e})}}const Ir=(0,E.getLogger)("modules/e2ee/KeyHandler.js");class Pr extends xr{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),this.conference=e,this.e2eeCtx=new wr(t),this.enabled=!1,this._enabling=void 0,this.conference.on(q,this._onMediaSessionStarted.bind(this)),this.conference.on(tt,(e=>e.isLocal()&&this._onLocalTrackAdded(e))),this.conference.rtc.on(ji.default.REMOTE_TRACK_ADDED,((e,t)=>this._setupReceiverE2EEForTrack(t,e))),this.conference.on(it,this._trackMuteChanged.bind(this))}isEnabled(){return this.enabled}async setEnabled(e){this._enabling&&await this._enabling,e!==this.enabled&&(this._enabling=new Cr,this.enabled=e,e||this.e2eeCtx.cleanupAll(),this._setEnabled&&await this._setEnabled(e),this.conference.setLocalParticipantProperty("e2ee.enabled",e),this.conference._restartMediaSessions(),this._enabling.resolve())}setEncryptionKey(){throw new Error("Not implemented by subclass")}_onLocalTrackAdded(e){for(const t of this.conference.getMediaSessions())this._setupSenderE2EEForTrack(t,e)}_onMediaSessionStarted(e){const t=this.conference.getLocalTracks();for(const n of t)this._setupSenderE2EEForTrack(e,n)}_setupReceiverE2EEForTrack(e,t){if(!this.enabled)return;const n=e.findReceiverForTrack(t.track);n?this.e2eeCtx.handleReceiver(n,t.getType(),t.getParticipantId()):Ir.warn(`Could not handle E2EE for ${t}: receiver not found in: ${e}`)}_setupSenderE2EEForTrack(e,t){if(!this.enabled)return;const n=e.peerconnection,i=n&&n.findSenderForTrack(t.track);i?this.e2eeCtx.handleSender(i,t.getType(),t.getParticipantId()):Ir.warn(`Could not handle E2EE for ${t}: sender not found in ${n}`)}_trackMuteChanged(e){if(ci.doesVideoMuteByStreamRemove()&&e.isLocal()&&e.isVideoTrack()&&!e.isMuted())for(const t of this.conference.getMediaSessions())this._setupSenderE2EEForTrack(t,e)}}class Dr extends Pr{constructor(e){super(e,{sharedKey:!0})}setKey(e){this.e2eeCtx.setKey(void 0,{encryptionKey:e.encryptionKey},e.index)}}var Or=n(509),kr=n.n(Or),Nr=n(577),Mr=n(433);Mr.v1,Mr.v3;const Lr=Mr.v4;let Fr;Mr.v5,function(e){e.E2EE_SAS_KEYS_MAC_MISMATCH="e2ee.sas.keys-mac-mismatch",e.E2EE_SAS_MAC_MISMATCH="e2ee.sas.mac-mismatch",e.E2EE_SAS_MISSING_KEY="e2ee.sas.missing-key",e.E2EE_SAS_COMMITMENT_MISMATCHED="e2ee.sas.commitment-mismatched",e.E2EE_SAS_CHANNEL_VERIFICATION_FAILED="e2ee.sas.channel-verification-failed",e.E2EE_SAS_INVALID_SAS_VERIFICATION="e2ee.sas.invalid-sas-verification"}(Fr||(Fr={}));const jr=[["🐶","dog"],["🐱","cat"],["🦁","lion"],["🐎","horse"],["🦄","unicorn"],["🐷","pig"],["🐘","elephant"],["🐰","rabbit"],["🐼","panda"],["🐓","rooster"],["🐧","penguin"],["🐢","turtle"],["🐟","fish"],["🐙","octopus"],["🦋","butterfly"],["🌷","flower"],["🌳","tree"],["🌵","cactus"],["🍄","mushroom"],["🌏","globe"],["🌙","moon"],["☁️","cloud"],["🔥","fire"],["🍌","banana"],["🍎","apple"],["🍓","strawberry"],["🌽","corn"],["🍕","pizza"],["🎂","cake"],["❤️","heart"],["🙂","smiley"],["🤖","robot"],["🎩","hat"],["👓","glasses"],["🔧","spanner"],["🎅","santa"],["👍","thumbs up"],["☂️","umbrella"],["⌛","hourglass"],["⏰","clock"],["🎁","gift"],["💡","light bulb"],["📕","book"],["✏️","pencil"],["📎","paperclip"],["✂️","scissors"],["🔒","lock"],["🔑","key"],["🔨","hammer"],["☎️","telephone"],["🏁","flag"],["🚂","train"],["🚲","bicycle"],["✈️","aeroplane"],["🚀","rocket"],["🏆","trophy"],["⚽","ball"],["🎸","guitar"],["🎺","trumpet"],["🔔","bell"],["⚓️","anchor"],["🎧","headphones"],["📁","folder"],["📌","pin"]],Vr={decimal:function(e){return[1e3+(e[0]<<5|e[1]>>3),1e3+((7&e[1])<<10|e[2]<<2|e[3]>>6),1e3+((63&e[3])<<7|e[4]>>1)]},emoji:function(e){return[e[0]>>2,(3&e[0])<<4|e[1]>>4,(15&e[1])<<2|e[2]>>6,63&e[2],e[3]>>2,(3&e[3])<<4|e[4]>>4,(15&e[4])<<2|e[5]>>6].map((e=>jr[e]))}},Ur=(0,E.getLogger)("modules/e2ee/OlmAdapter.js"),Hr=5e3,$r="olm",Jr="error",Br="key-info",qr="key-info-ack",Gr="session-ack",zr="session-init",Kr="sas-start",Wr="sas-accept",Xr="sas-key",Yr="sas-mac",Qr="Jitsi-KEY_VERIFICATION_MAC",Zr="Jitsi-KEY_IDS",eo=Symbol("OlmData"),to={PARTICIPANT_E2EE_CHANNEL_READY:"olm.participant_e2ee_channel_ready",PARTICIPANT_SAS_AVAILABLE:"olm.participant_sas_available",PARTICIPANT_SAS_READY:"olm.participant_sas_ready",PARTICIPANT_KEY_UPDATED:"olm.partitipant_key_updated",PARTICIPANT_VERIFICATION_COMPLETED:"olm.participant_verification_completed"};class no extends xr{constructor(e){super(),this._conf=e,this._init=new Cr,this._mediaKey=void 0,this._mediaKeyIndex=-1,this._reqs=new Map,this._sessionInitialization=void 0,no.isSupported()?(this._bootstrapOlm(),this._conf.on(Ce,this._onEndpointMessageReceived.bind(this)),this._conf.on(le,this._onConferenceLeft.bind(this)),this._conf.on(dt,this._onParticipantLeft.bind(this)),this._conf.on(qe,this._onParticipantPropertyChanged.bind(this))):this._init.reject(new Error("Olm not supported"))}get myId(){return this._conf.myUserId()}async initSessions(){if(this._sessionInitialization)throw new Error("OlmAdapter initSessions called multiple times");{this._sessionInitialization=new Cr,await this._init;const e=[],t=this._conf.myUserId();for(const n of this._conf.getParticipants())n.hasFeature(Ia)&&t{this._reqs.delete(r)})),this._reqs.set(r,s),t.push(s),this._sendMessage(o,n)}return await Promise.allSettled(t),this._mediaKeyIndex}updateCurrentMediaKey(e){return this._mediaKey=e,this._mediaKeyIndex}clearParticipantSession(e){const t=this._getParticipantOlmData(e);t.session&&(t.session.free(),t.session=void 0)}clearAllParticipantsSessions(){for(const e of this._conf.getParticipants())this.clearParticipantSession(e)}markParticipantVerified(e,t){const n=this._getParticipantOlmData(e),i=e.getId();if(!t)return n.sasVerification=void 0,Ur.warn(`Verification failed for participant ${i}`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_CHANNEL_VERIFICATION_FAILED);if(!n.sasVerification)return Ur.warn(`Participant ${i} does not have valid sasVerification`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_INVALID_SAS_VERIFICATION);const{sas:r,sasMacSent:o}=n.sasVerification;r&&r.is_their_key_set()&&!o&&(this._sendSasMac(e),n.sasVerification.sasMacSent=!0)}async _bootstrapOlm(){Ur.debug("Initializing Olm...");try{await Olm.init(),this._olmAccount=new Olm.Account,this._olmAccount.create(),this._idKeys=_r(this._olmAccount.identity_keys()),Ur.debug(`Olm ${Olm.get_library_version().join(".")} initialized`),this._init.resolve(),this._onIdKeysReady(this._idKeys)}catch(e){Ur.error("Failed to initialize Olm",e),this._init.reject(e)}}startVerification(e){const t=e.getId(),n=this._getParticipantOlmData(e);if(!n.session)return void Ur.warn(`Tried to start verification with participant ${t} but we have no session`);if(n.sasVerification)return void Ur.warn(`There is already a verification in progress with participant ${t}`);n.sasVerification={sas:new Olm.SAS,transactionId:Lr()};const i={transactionId:n.sasVerification.transactionId};n.sasVerification.startContent=i,n.sasVerification.isInitiator=!0;const r={[Aa]:$r,olm:{type:Kr,data:i}};this._sendMessage(r,t)}_onIdKeysReady(e){Ur.debug(`Olm id key ready: ${e}`);for(const t in e)if(e.hasOwnProperty(t)){const n=e[t];this._conf.setLocalParticipantProperty(`e2ee.idKey.${t}`,n)}}_onParticipantE2EEChannelReady(e){Ur.debug(`E2EE channel with participant ${e} is ready`)}_encryptKeyInfo(e){const t={};return void 0!==this._mediaKey&&(t.key=!!this._mediaKey&&Nr.fromByteArray(this._mediaKey),t.keyIndex=this._mediaKeyIndex),e.encrypt(JSON.stringify(t))}_getParticipantOlmData(e){return e[eo]=e[eo]||{},e[eo]}async _onConferenceLeft(){Ur.debug("Conference left"),await this._init;for(const e of this._conf.getParticipants())this._onParticipantLeft(e.getId(),e);this._olmAccount&&(this._olmAccount.free(),this._olmAccount=void 0)}async _onEndpointMessageReceived(e,t){if(t[Aa]!==$r)return;if(!t.olm)return void Ur.warn("Incorrectly formatted message");await this._init;const n=t.olm,i=e.getId(),r=this._getParticipantOlmData(e);switch(n.type){case zr:if(r.session)Ur.warn(`Participant ${i} already has a session`),this._sendError(e,"Session already established");else{const e=new Olm.Session;e.create_outbound(this._olmAccount,n.data.idKey,n.data.otKey),r.session=e;const t={[Aa]:$r,olm:{type:Gr,data:{ciphertext:this._encryptKeyInfo(e),uuid:n.data.uuid}}};this._sendMessage(t,i),this._onParticipantE2EEChannelReady(i)}break;case Gr:if(r.session)Ur.warn(`Participant ${i} already has a session`),this._sendError(e,"No session found");else if(n.data.uuid===r.pendingSessionUuid){const{ciphertext:e}=n.data,t=this._reqs.get(n.data.uuid),o=new Olm.Session;o.create_inbound(this._olmAccount,e.body),this._olmAccount.remove_one_time_keys(o);const s=o.decrypt(e.type,e.body);r.session=o,r.pendingSessionUuid=void 0,this._onParticipantE2EEChannelReady(i),this._reqs.delete(n.data.uuid),t.resolve();const a=io(s);if(a.key){const e=Nr.toByteArray(a.key),t=a.keyIndex;r.lastKey=e,this.eventEmitter.emit(to.PARTICIPANT_KEY_UPDATED,i,e,t)}}else Ur.warn("Received ACK with the wrong UUID"),this._sendError(e,"Invalid UUID");break;case Jr:Ur.error(n.data.error);break;case Br:if(r.session){const{ciphertext:e}=n.data,t=io(r.session.decrypt(e.type,e.body));if(void 0!==t.key&&void 0!==t.keyIndex){const e=!!t.key&&Nr.toByteArray(t.key),o=t.keyIndex;Et()(r.lastKey,e)||(r.lastKey=e,this.eventEmitter.emit(to.PARTICIPANT_KEY_UPDATED,i,e,o));const s={[Aa]:$r,olm:{type:qr,data:{ciphertext:this._encryptKeyInfo(r.session),uuid:n.data.uuid}}};this._sendMessage(s,i)}}else Ur.debug(`Received key info message from ${i} but we have no session for them!`),this._sendError(e,"No session found while processing key-info");break;case qr:if(r.session){const{ciphertext:e}=n.data,t=io(r.session.decrypt(e.type,e.body));if(void 0!==t.key&&void 0!==t.keyIndex){const e=!!t.key&&Nr.toByteArray(t.key),n=t.keyIndex;Et()(r.lastKey,e)||(r.lastKey=e,this.eventEmitter.emit(to.PARTICIPANT_KEY_UPDATED,i,e,n))}const o=this._reqs.get(n.data.uuid);this._reqs.delete(n.data.uuid),o.resolve()}else Ur.debug(`Received key info ack message from ${i} but we have no session for them!`),this._sendError(e,"No session found while processing key-info-ack");break;case Kr:{var o;if(!r.session)return Ur.debug(`Received sas init message from ${i} but we have no session for them!`),void this._sendError(e,"No session found while processing sas-init");if(null!==(o=r.sasVerification)&&void 0!==o&&o.sas)return Ur.warn(`SAS already created for participant ${i}`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_INVALID_SAS_VERIFICATION);const{transactionId:t}=n.data,s=new Olm.SAS;r.sasVerification={sas:s,transactionId:t,isInitiator:!1};const a=r.sasVerification.sas.get_pubkey(),d=this._computeCommitment(a,n.data),c={[Aa]:$r,olm:{type:Wr,data:{transactionId:t,commitment:d}}};this._sendMessage(c,i);break}case Wr:{if(!r.session)return Ur.debug(`Received sas accept message from ${i} but we have no session for them!`),void this._sendError(e,"No session found while processing sas-accept");const{commitment:t,transactionId:o}=n.data;if(!r.sasVerification)return Ur.warn(`SAS_ACCEPT Participant ${i} does not have valid sasVerification`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_INVALID_SAS_VERIFICATION);if(r.sasVerification.sasCommitment)return Ur.debug(`Already received sas commitment message from ${i}!`),void this._sendError(e,"Already received sas commitment message from ${pId}!");r.sasVerification.sasCommitment=t;const s=r.sasVerification.sas.get_pubkey(),a={[Aa]:$r,olm:{type:Xr,data:{key:s,transactionId:o}}};this._sendMessage(a,i),r.sasVerification.keySent=!0;break}case Xr:{if(!r.session)return Ur.debug(`Received sas key message from ${i} but we have no session for them!`),void this._sendError(e,"No session found while processing sas-key");if(!r.sasVerification)return Ur.warn(`SAS_KEY Participant ${i} does not have valid sasVerification`),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_INVALID_SAS_VERIFICATION);const{isInitiator:t,sas:o,sasCommitment:s,startContent:a,keySent:d}=r.sasVerification;if(o.is_their_key_set())return void Ur.warn("SAS already has their key!");const{key:c,transactionId:l}=n.data;if(s&&s!==this._computeCommitment(c,a))return this._sendError(e,"OlmAdapter commitments mismatched"),this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_COMMITMENT_MISMATCHED),void r.sasVerification.free();o.set_their_key(c);const h=o.get_pubkey(),u=`${this.myId}|${h}`,p=`${i}|${c}`,m=t?`${u}|${p}`:`${p}|${u}`,g=function(e){const t={};for(const n in Vr)Vr.hasOwnProperty(n)&&(t[n]=Vr[n](e));return t}(o.generate_bytes(m,6));if(this.eventEmitter.emit(to.PARTICIPANT_SAS_READY,i,g),d)return;const f={[Aa]:$r,olm:{type:Xr,data:{key:h,transactionId:l}}};this._sendMessage(f,i),r.sasVerification.keySent=!0;break}case Yr:{if(!r.session)return Ur.debug(`Received sas mac message from ${i} but we have no session for them!`),void this._sendError(e,"No session found while processing sas-mac");const{keys:t,mac:o,transactionId:s}=n.data;if(!o||!t)return void Ur.warn("Invalid SAS MAC message");if(!r.sasVerification)return void Ur.warn(`SAS_MAC Participant ${i} does not have valid sasVerification`);const a=r.sasVerification.sas,d=`${Qr}${i}${this.myId}${s}`;if(a.calculate_mac(Object.keys(o).sort().join(","),d+Zr)!==t)return Ur.error("SAS verification error: keys MAC mismatch"),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_KEYS_MAC_MISMATCH);if(!r.ed25519)return Ur.warn("SAS verification error: Missing ed25519 key"),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_MISSING_KEY);for(const[e,t]of Object.entries(o))if(t!==a.calculate_mac(r.ed25519,d+e))return Ur.error("SAS verification error: MAC mismatch"),void this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!1,Fr.E2EE_SAS_MAC_MISMATCH);Ur.info(`SAS MAC verified for participant ${i}`),this.eventEmitter.emit(to.PARTICIPANT_VERIFICATION_COMPLETED,i,!0);break}}}_onParticipantLeft(e,t){Ur.debug(`Participant ${e} left`),this.clearParticipantSession(t)}async _onParticipantPropertyChanged(e,t,n,i){const r=e.getId(),o=this._getParticipantOlmData(e);switch(t){case"e2ee.enabled":if(i&&this._conf.isE2EEEnabled()){const t=this._conf.myUserId();if((await e.getFeatures()).has(Ia)&&t{this._reqs.delete(t),o.pendingSessionUuid=void 0})),this._reqs.set(t,n);const i={[Aa]:$r,olm:{type:Br,data:{ciphertext:this._encryptKeyInfo(o.session),uuid:t}}};this._sendMessage(i,r)}}break;case"e2ee.idKey.ed25519":o.ed25519=i,this.eventEmitter.emit(to.PARTICIPANT_SAS_AVAILABLE,r)}}_sendError(e,t){const n=e.getId(),i={[Aa]:$r,olm:{type:Jr,data:{error:t}}};this._sendMessage(i,n)}_sendMessage(e,t){this._conf.sendMessage(e,t)}_sendSessionInit(e){const t=e.getId(),n=this._getParticipantOlmData(e);if(n.session)return Ur.warn(`Tried to send session-init to ${t} but we already have a session`),Promise.reject();if(void 0!==n.pendingSessionUuid)return Ur.warn(`Tried to send session-init to ${t} but we already have a pending session`),Promise.reject();this._olmAccount.generate_one_time_keys(1);const i=_r(this._olmAccount.one_time_keys()),r=Object.values(i.curve25519)[0];if(!r)return Promise.reject(new Error("No one-time-keys generated"));this._olmAccount.mark_keys_as_published();const o=Lr(),s={[Aa]:$r,olm:{type:zr,data:{idKey:this._idKeys.curve25519,otKey:r,uuid:o}}},a=new Cr;return a.setRejectTimeout(Hr),a.catch((()=>{this._reqs.delete(o),n.pendingSessionUuid=void 0})),this._reqs.set(o,a),this._sendMessage(s,t),n.pendingSessionUuid=o,a}_sendSasMac(e){const t=e.getId(),n=this._getParticipantOlmData(e),{sas:i,transactionId:r}=n.sasVerification,o={},s=[],a=`${Qr}${this.myId}${t}${r}`,d=`ed25519:${t}`;o[d]=i.calculate_mac(this._idKeys.ed25519,a+d),s.push(d);const c=i.calculate_mac(s.sort().join(","),a+Zr),l={[Aa]:$r,olm:{type:Yr,data:{keys:c,mac:o,transactionId:r}}};this._sendMessage(l,t)}_computeCommitment(e,t){const n=new Olm.Utility,i=n.sha256(e+JSON.stringify(t));return n.free(),i}}function io(e){try{return _r(e)}catch(e){return{}}}no.events=to;const ro=(0,E.getLogger)("modules/e2ee/ManagedKeyHandler.js");class oo extends Pr{constructor(e){super(e),this._key=void 0,this._conferenceJoined=!1,this._olmAdapter=new no(e),this._rotateKey=kr()(this._rotateKeyImpl,5e3),this._ratchetKey=kr()(this._ratchetKeyImpl,5e3),this._olmAdapter.on(no.events.PARTICIPANT_KEY_UPDATED,this._onParticipantKeyUpdated.bind(this)),this._olmAdapter.on(no.events.PARTICIPANT_SAS_READY,this._onParticipantSasReady.bind(this)),this._olmAdapter.on(no.events.PARTICIPANT_SAS_AVAILABLE,this._onParticipantSasAvailable.bind(this)),this._olmAdapter.on(no.events.PARTICIPANT_VERIFICATION_COMPLETED,this._onParticipantVerificationCompleted.bind(this)),this.conference.on(qe,this._onParticipantPropertyChanged.bind(this)),this.conference.on(at,this._onParticipantJoined.bind(this)),this.conference.on(dt,this._onParticipantLeft.bind(this)),this.conference.on(ce,(()=>{this._conferenceJoined=!0}))}get sasVerification(){return this._olmAdapter}async _setEnabled(e){e?await this._olmAdapter.initSessions():this._olmAdapter.clearAllParticipantsSessions(),this._key=!!e&&this._generateKey();const t=await this._olmAdapter.updateKey(this._key);this.e2eeCtx.setKey(this.conference.myUserId(),this._key,t)}async _onParticipantPropertyChanged(e,t,n,i){switch(t){case"e2ee.idKey":ro.debug(`Participant ${e.getId()} updated their id key: ${i}`);break;case"e2ee.enabled":!i&&this.enabled&&this._olmAdapter.clearParticipantSession(e)}}_onParticipantJoined(){this._conferenceJoined&&this.enabled&&this._ratchetKey()}_onParticipantLeft(e){this.e2eeCtx.cleanup(e),this.enabled&&this._rotateKey()}async _rotateKeyImpl(){ro.debug("Rotating key"),this._key=this._generateKey();const e=await this._olmAdapter.updateKey(this._key);this.e2eeCtx.setKey(this.conference.myUserId(),this._key,e)}async _ratchetKeyImpl(){ro.debug("Ratchetting key");const e=await async function(e){return crypto.subtle.importKey("raw",e,"HKDF",!1,["deriveBits","deriveKey"])}(this._key),t=await async function(e){const t=new TextEncoder;return crypto.subtle.deriveBits({name:"HKDF",salt:t.encode("JFrameRatchetKey"),hash:"SHA-256",info:new ArrayBuffer},e,256)}(e);this._key=new Uint8Array(t);const n=this._olmAdapter.updateCurrentMediaKey(this._key);this.e2eeCtx.setKey(this.conference.myUserId(),this._key,n)}_onParticipantKeyUpdated(e,t,n){ro.debug(`Participant ${e} updated their key`),this.e2eeCtx.setKey(e,t,n)}_onParticipantSasReady(e,t){this.conference.eventEmitter.emit(Te,e,t)}_onParticipantSasAvailable(e){this.conference.eventEmitter.emit(Se,e)}_onParticipantVerificationCompleted(e,t,n){this.conference.eventEmitter.emit(be,e,t,n)}_generateKey(){return window.crypto.getRandomValues(new Uint8Array(32))}}class so{constructor(e){const{e2ee:t={}}=e.options.config;this._externallyManaged=t.externallyManagedKey,this._externallyManaged?this._keyHandler=new Dr(e):this._keyHandler=new oo(e)}static isSupported(e){const{e2ee:t={}}=e;return!(!t.externallyManagedKey&&!no.isSupported())&&!(e.testing&&e.testing.disableE2EE)&&(ci.supportsInsertableStreams()||e.enableEncodedTransformSupport&&ci.supportsEncodedTransform())}isEnabled(){return this._keyHandler.isEnabled()}async setEnabled(e){await this._keyHandler.setEnabled(e)}setEncryptionKey(e){this._keyHandler.setKey(e)}startVerification(e){var t;null===(t=this._keyHandler.sasVerification)||void 0===t||t.startVerification(e)}markParticipantVerified(e,t){var n;null===(n=this._keyHandler.sasVerification)||void 0===n||n.markParticipantVerified(e,t)}}var ao=n(399),co=n.n(ao);function lo(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var n,i,r,o,s,a,d,c,l=new Array(80),h=1732584193,u=-271733879,p=-1732584194,m=271733878,g=-1009589776;for(n=0;n>16)+(t>>16)+(n>>16)<<16|65535&n}function mo(e,t){return e<>>32-t}function go(e){for(var t=[],n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<24-n%32;return t}function fo(e){for(var t,n,i="",r=0;r<4*e.length;r+=3)for(t=(e[r>>2]>>8*(3-r%4)&255)<<16|(e[r+1>>2]>>8*(3-(r+1)%4)&255)<<8|e[r+2>>2]>>8*(3-(r+2)%4)&255,n=0;n<4;n++)8*r+6*n>32*e.length?i+="=":i+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-n)&63);return i}const vo=function(e){return fo(lo(go(e),8*e.length))},_o=["category","type","lang","name"],yo=["category","type","lang"];function Eo(e,t){let n=0;return yo.some((i=>0!==(n=e[i]>t[i]?1:e[i]query>feature").each(((e,n)=>t.add(n.getAttribute("var")))),_t()(e).find(">query>identity").each(((e,t)=>n.add({type:t.getAttribute("type"),name:t.getAttribute("name"),category:t.getAttribute("category")}))),{features:t,identities:n}}class bo extends xr{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"http://jitsi.org/jitsimeet";if(super(),this.node=t,this.disco=e.disco,!this.disco)throw new Error("Missing strophe-plugins (disco plugin is required)!");this.version="",this.rooms=new Set,this.externalFeatures=new Set;const n=e.emuc;n.addListener(Hi.XMPPEvents.EMUC_ROOM_ADDED,(e=>this._addChatRoom(e))),n.addListener(Hi.XMPPEvents.EMUC_ROOM_REMOVED,(e=>this._removeChatRoom(e))),Object.keys(n.rooms).forEach((e=>{this._addChatRoom(n.rooms[e])})),St.Strophe.addNamespace("CAPS","http://jabber.org/protocol/caps"),this.disco.addFeature(St.Strophe.NS.CAPS)}addFeature(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.disco.addFeature(e),this._generateVersion(),n&&!this.externalFeatures.has(e)&&(this.externalFeatures.add(e),this.rooms.forEach((e=>this._updateRoomWithExternalFeatures(e)))),t&&this.submit()}removeFeature(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.disco.removeFeature(e),this._generateVersion(),n&&this.externalFeatures.has(e)&&(this.externalFeatures.delete(e),this.rooms.forEach((e=>this._updateRoomWithExternalFeatures(e)))),t&&this.submit()}submit(){this.rooms.forEach((e=>e.sendPresence()))}_updateRoomWithExternalFeatures(e){if(0===this.externalFeatures.size)e.removeFromPresence("features");else{const t=[];this.externalFeatures.forEach((e=>{t.push({tagName:"feature",attributes:{var:e}})})),e.addOrReplaceInPresence("features",{children:t})}}getFeaturesAndIdentities(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5e3;return this._getDiscoInfo(e,t,n)}_getDiscoInfo(e,t,n){return new Promise(((i,r)=>this.disco.info(e,t,(e=>{i(So(e))}),r,n)))}_addChatRoom(e){this.rooms.add(e),this._fixChatRoomPresenceMap(e),this._updateRoomWithExternalFeatures(e)}_removeChatRoom(e){this.rooms.delete(e)}_fixChatRoomPresenceMap(e){e.addOrReplaceInPresence("c",{attributes:{xmlns:St.Strophe.NS.CAPS,hash:"sha-1",node:this.node,ver:this.version}})}_notifyVersionChanged(){this.rooms.forEach((e=>this._fixChatRoomPresenceMap(e)))}_generateVersion(){this.version=function(e,t){const n=e.sort(Eo).reduce(((e,t)=>`${_o.reduce(((e,n,i)=>e+(0===i?"":"/")+(t[n]?t[n]:"")),"")}<`),""),i=t.sort().reduce(((e,t)=>`${e+t}<`),"");return vo(n+i)}(this.disco._identities,this.disco._features),this._notifyVersionChanged()}}n(617);const To="NETWORK_INFO_CHANGED",Co=(0,E.getLogger)("modules/connectivity/NetworkInfo.js"),xo=new class extends xr{constructor(){super(),this._current={isOnline:!0}}updateNetworkInfo(e){let{isOnline:t}=e;Co.debug("updateNetworkInfo",{isOnline:t}),this._current={isOnline:!0===t},this.eventEmitter.emit(To,this._current)}isOnline(){return!0===this._current.isOnline}};function Ro(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2;return Math.floor(Math.random()*(1e3*Math.pow(n,e)-t)+t)}const Ao=(0,E.getLogger)("modules/xmpp/ResumeTask.js");class wo{constructor(e){this._stropheConn=e,this._resumeRetryN=0,this._retryDelay=void 0}get retryDelay(){return this._retryDelay}schedule(){this._cancelResume(),this._resumeRetryN+=1,this._networkOnlineListener=xo.addCancellableListener(To,(e=>{let{isOnline:t}=e;t?this._scheduleResume():this._cancelResume()})),xo.isOnline()&&this._scheduleResume()}_scheduleResume(){this._resumeTimeout||(this._resumeRetryN=Math.min(3,this._resumeRetryN),this._retryDelay=Ro(this._resumeRetryN,1500*this._resumeRetryN,3),Ao.info(`Will try to resume the XMPP connection in ${this.retryDelay}ms`),this._resumeTimeout=setTimeout((()=>this._resumeConnection()),this.retryDelay))}_cancelResume(){this._resumeTimeout&&(Ao.info("Canceling connection resume task"),clearTimeout(this._resumeTimeout),this._resumeTimeout=void 0,this._retryDelay=void 0)}_resumeConnection(){const{streamManagement:e}=this._stropheConn,t=e.getResumeToken();if(!t)return;Ao.info("Trying to resume the XMPP connection");const n=new URL(this._stropheConn.service);let{search:i}=n;const r=/(previd=)([\\w-]+)/,o=i.match(r);o&&-1===o.indexOf(t)?i=i.replace(r,`$1${t}`):o||(i+=-1===i.indexOf("?")?`?previd=${t}`:`&previd=${t}`),n.search=i,this._stropheConn.service=n.toString(),e.resume()}cancel(){this._cancelResume(),this._resumeRetryN=0,this._networkOnlineListener&&(this._networkOnlineListener(),this._networkOnlineListener=null)}}class Io{constructor(){this._lastSuccess=null,this._lastFailedMessage=null}startTracking(e,t){var n=this;const i=t.rawInput;t.rawInput=function(){for(var r=arguments.length,o=new Array(r),s=0;s0&&void 0!==arguments[0]?arguments[0]:class{};return class extends e{constructor(){super(...arguments),this.connection=null}init(e){this.connection=e}}}const Do=Po(),Oo=Po(xr),ko=(0,E.getLogger)("modules/xmpp/strophe.ping.js");class No extends Do{constructor(e){let{getTimeSinceLastServerResponse:t,onPingThresholdExceeded:n,pingOptions:i={}}=e;super(),this.failedPings=0,this._onPingThresholdExceeded=n,this._getTimeSinceLastServerResponse=t,this.pingInterval="number"==typeof i.interval?i.interval:1e4,this.pingTimeout="number"==typeof i.timeout?i.timeout:5e3,this.pingThreshold="number"==typeof i.threshold?i.threshold:2,this.pingTimestampsToKeep=Math.round(12e4/this.pingInterval),this.pingExecIntervals=new Array(this.pingTimestampsToKeep)}init(e){super.init(e),St.Strophe.addNamespace("PING","urn:xmpp:ping")}ping(e,t,n,i){this._addPingExecutionTimestamp();const r=(0,St.$iq)({type:"get",to:e});r.c("ping",{xmlns:St.Strophe.NS.PING}),this.connection.sendIQ2(r,{timeout:i}).then(t,n)}startInterval(e){clearInterval(this.intervalId),this.intervalId=window.setInterval((()=>{const t=Date.now();if(this._getTimeSinceLastServerResponse(){this._lastServerCheck=this._getTimeSinceLastServerResponse()+Date.now(),this.failedPings=0}),(e=>{this.failedPings+=1;const t="Ping "+(e?"error":"timeout");this.failedPings>=this.pingThreshold?(ko.error(t,e),this._onPingThresholdExceeded&&this._onPingThresholdExceeded()):ko.warn(t,e)}),this.pingTimeout)}),this.pingInterval),ko.info(`XMPP pings will be sent every ${this.pingInterval} ms`)}stopInterval(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null,this.failedPings=0,ko.info("Ping interval cleared"))}_addPingExecutionTimestamp(){this.pingExecIntervals.push((new Date).getTime()),this.pingExecIntervals.length>this.pingTimestampsToKeep&&this.pingExecIntervals.shift()}getPingSuspendTime(){const e=this.pingExecIntervals.slice();e.push((new Date).getTime());let t=0,n=e[0];return e.forEach((e=>{const i=e-n;i>t&&(t=i),n=e})),t-=this.pingInterval,Math.max(t,0)}}const Mo=(0,E.getLogger)("modules/xmpp/XmppConnection.js");class Lo extends xr{static get Events(){return{CONN_STATUS_CHANGED:"CONN_STATUS_CHANGED",CONN_SHARD_CHANGED:"CONN_SHARD_CHANGED"}}static get Status(){return St.Strophe.Status}constructor(e){let{enableWebsocketResume:t,websocketKeepAlive:n,websocketKeepAliveUrl:i,serviceUrl:r,shard:o,xmppPing:s}=e;super(),this._options={enableWebsocketResume:void 0===t||t,pingOptions:s,shard:o,websocketKeepAlive:void 0===n?6e4:Number(n),websocketKeepAliveUrl:i},this._stropheConn=new St.Strophe.Connection(r),this._usesWebsocket=r.startsWith("ws:")||r.startsWith("wss:"),this._stropheConn.maxRetries=3,this._rawInputTracker=new Io,this._rawInputTracker.startTracking(this,this._stropheConn),this._resumeTask=new wo(this._stropheConn),this._deferredIQs=[],this.addConnectionPlugin("ping",new No({getTimeSinceLastServerResponse:()=>this.getTimeSinceLastSuccess(),onPingThresholdExceeded:()=>this._onPingErrorThresholdExceeded(),pingOptions:s})),this._oneSuccessfulConnect=!1}get connected(){const e=this._stropheConn&&this._stropheConn._proto&&this._stropheConn._proto.socket;return(this._status===St.Strophe.Status.CONNECTED||this._status===St.Strophe.Status.ATTACHED)&&(!this.isUsingWebSocket||e&&e.readyState===WebSocket.OPEN)}get disco(){return this._stropheConn.disco}get disconnecting(){return!0===this._stropheConn.disconnecting}get domain(){return this._stropheConn.domain}get isUsingWebSocket(){return this._usesWebsocket}get jid(){return this._stropheConn.jid}get lastResponseHeaders(){return this._stropheConn._proto&&this._stropheConn._proto.lastResponseHeaders}get logger(){return this._stropheConn.logger}get options(){return this._stropheConn.options}get pingDomain(){var e;return(null===(e=this._options.pingOptions)||void 0===e?void 0:e.domain)||this.domain}get service(){return this._stropheConn.service}set shard(e){this._options.shard=e,this._oneSuccessfulConnect&&this._maybeStartWSKeepAlive()}get status(){return this._status}addConnectionPlugin(e,t){this[e]=t,t.init(this)}addHandler(){return this._stropheConn.addHandler(...arguments)}deleteHandler(){this._stropheConn.deleteHandler(...arguments)}attach(e,t,n,i){for(var r=arguments.length,o=new Array(r>4?r-4:0),s=4;s3?i-3:0),o=3;o2?r-2:0),s=2;s0){this._wsKeepAlive||Mo.info(`WebSocket keep alive interval: ${e}ms`),clearTimeout(this._wsKeepAlive);const t=e+60*Math.random()*1e3;Mo.debug(`Scheduling next WebSocket keep-alive in ${t}ms`),this._wsKeepAlive=setTimeout((()=>this._keepAliveAndCheckShard().then((()=>this._maybeStartWSKeepAlive()))),t)}}_keepAliveAndCheckShard(){const{shard:e,websocketKeepAliveUrl:t}=this._options,n=t||this.service.replace("wss://","https://").replace("ws://","http://");return fetch(n).then((t=>{if(!e)return;const n=t.headers.get("x-jitsi-shard");n!==e&&(Mo.error(`Detected that shard changed from ${e} to ${n}`),this.eventEmitter.emit(Lo.Events.CONN_SHARD_CHANGED))})).catch((e=>{Mo.error(`Websocket Keep alive failed for url: ${n}`,{error:e})}))}_processDeferredIQs(){for(const e of this._deferredIQs)if(e.iq){clearTimeout(e.timeout);const t=Date.now()-e.start;this.sendIQ(e.iq,(t=>e.resolve(t)),(t=>e.reject(t)),t)}this._deferredIQs=[]}send(e){var t,n,i;if(!this.connected)throw Mo.error(`Trying to send stanza while not connected. Status:${this._status} Proto:${this.isUsingWebSocket?null===(t=this._stropheConn)||void 0===t||null===(n=t._proto)||void 0===n||null===(i=n.socket)||void 0===i?void 0:i.readyState:"bosh"}`),new Error("Not connected");this._stropheConn.send(e)}sendIQ(e,t,n,i){if(this.connected)return this._stropheConn.sendIQ(e,t,n,i);n("Not connected")}sendIQ2(e,t){let{timeout:n}=t;return new Promise(((t,i)=>{if(this.connected)this.sendIQ(e,(e=>t(e)),(e=>i(e)),n);else{const r={iq:e,resolve:t,reject:i,start:Date.now(),timeout:setTimeout((()=>{r.iq=void 0,i(void 0)}),n)};this._deferredIQs.push(r)}}))}_onPingErrorThresholdExceeded(){this.isUsingWebSocket&&(Mo.warn("Ping error threshold exceeded - killing the WebSocket"),this.closeWebsocket())}sendPresence(e,t,n,i){this.connected?this._stropheConn.sendPresence(e,t,n,i):n("Not connected")}sendUnavailableBeacon(){if(!navigator.sendBeacon||this._stropheConn.disconnecting||!this._stropheConn.connected)return!1;this._stropheConn._changeConnectStatus(St.Strophe.Status.DISCONNECTING),this._stropheConn.disconnecting=!0;const e=this._stropheConn._proto._buildBody().attrs({type:"terminate"}),t=(0,St.$pres)({xmlns:St.Strophe.NS.CLIENT,type:"unavailable"});e.cnode(t.tree());const n=navigator.sendBeacon(-1===this.service.indexOf("https://")?`https:${this.service}`:this.service,St.Strophe.serialize(e.tree()));return Mo.info(`Successfully send unavailable beacon ${n}`),this._stropheConn._proto._abortAllRequests(),this._stropheConn._doDisconnect(),!0}_tryResumingConnection(){const{streamManagement:e}=this._stropheConn;return!(!e||!e.getResumeToken()||(this._resumeTask.schedule(),0))}}var Fo=n(667),jo=n.n(Fo);const Vo=(0,E.getLogger)("modules/settings/Settings.js");let Uo,Ho;const $o={_storage:di,init(e){this._storage=e||di},get callStatsUserName(){return Uo||(Uo=this._storage.getItem("callStatsUserName"),Uo||(Uo=function(){const e=jo().generateUsername();return Vo.log("generated stats id",e),e}(),this._storage.setItem("callStatsUserName",Uo))),Uo},get machineId(){if(!Ho){const e=this._storage.getItem("billingId");Ho=e||this._storage.getItem("jitsiMeetId"),e?this._storage.setItem("jitsiMeetId",e):Ho||(Ho=function(){const e=Jo()+Jo()+Jo()+Jo();return Vo.log("generated id",e),e}(),this._storage.setItem("jitsiMeetId",Ho))}return Ho},get sessionId(){return this._storage.getItem("sessionId")},set sessionId(e){e?this._storage.setItem("sessionId",e):this._storage.removeItem("sessionId")}};function Jo(){return`${Math.random().toString(16)}000000000`.substr(2,8)}const Bo=n(514),{XMPPEvents:qo}=n(609),Go=(0,E.getLogger)("modules/xmpp/moderator.js");function zo(e){let t=1;return function(n){if(n)return void(t=1);const i=Math.pow(2,t-1);return t+=1,Math.min(i*e,12e4)}}class Ko extends xr{constructor(e){var t,n;function i(e){if(e.data&&e.data.sessionId){if(e.origin!==window.location.origin)return void Go.warn(`Ignoring sessionId from different origin: ${e.origin}`);$o.sessionId=e.data.sessionId}}super(),this.getNextTimeout=zo(1e3),this.getNextErrorTimeout=zo(1e3),this.options=e.options,this.sipGatewayEnabled=!1,this.xmpp=e,this.connection=e.connection,this.targetJid=null===(t=this.options.hosts)||void 0===t?void 0:t.focus,this.targetJid||(this.targetJid=`focus.${null===(n=this.options.hosts)||void 0===n?void 0:n.domain}`),this.targetUrl=this.options.conferenceRequestUrl,this.mode=this.targetUrl?"http":"xmpp",Go.info(`Using ${this.mode} for conference requests.`),this.focusUserJids=new Set,this.options.focusUserJid&&this.focusUserJids.add(this.options.focusUserJid),window.addEventListener?window.addEventListener("message",i,!1):window.attachEvent("onmessage",i)}isFocusJid(e){if(!e)return!1;for(const t of this.focusUserJids)if(0===e.indexOf(`${t}/`))return!0;return!1}isSipGatewayEnabled(){return this.sipGatewayEnabled}_createConferenceRequest(e){var t,n;const{sessionId:i}=$o,r=this.options,o={};void 0!==r.startAudioMuted&&(o.startAudioMuted=r.startAudioMuted),void 0!==r.startVideoMuted&&(o.startVideoMuted=r.startVideoMuted),null!==(t=null==r||null===(n=r.analytics)||void 0===n?void 0:n.rtcstatsEnabled)&&void 0!==t&&t||(o.rtcstatsEnabled=!1);const s={properties:o,machineUid:$o.machineId,room:e};return i&&(s.sessionId=i),r.iAmRecorder||r.iAmSipGateway||(s.properties["visitors-version"]=1,this.options.preferVisitor&&(s.properties.visitor=!0)),s}_createConferenceIq(e){const t=this._createConferenceRequest(e),n=(0,St.$iq)({to:this.targetJid,type:"set"});n.c("conference",{xmlns:"http://jitsi.org/protocol/focus",room:e,"machine-uid":t.machineUid}),t.sessionId&&n.attrs({"session-id":t.sessionId});for(const e in t.properties)t.properties.hasOwnProperty(e)&&n.c("property",{name:e,value:t.properties[e]}).up();return n}_parseConferenceIq(e){const t={properties:{}};return t.focusJid=_t()(e).find("conference").attr("focusjid"),t.sessionId=_t()(e).find("conference").attr("session-id"),t.identity=_t()(e).find(">conference").attr("identity"),t.ready="true"===_t()(e).find("conference").attr("ready"),t.vnode=_t()(e).find("conference").attr("vnode"),_t()(e).find(">conference>property[name=\'authentication\'][value=\'true\']").length>0&&(t.properties.authentication="true"),_t()(e).find(">conference>property[name=\'externalAuth\'][value=\'true\']").length>0&&(t.properties.externalAuth="true"),_t()(e).find(">conference>property[name=\'sipGatewayEnabled\'][value=\'true\']").length>0&&(t.properties.sipGatewayEnabled="true"),t}sendConferenceRequest(e){return new Promise((t=>{"xmpp"===this.mode?(Go.info(`Sending conference request over XMPP to ${this.targetJid}`),this.connection.sendIQ(this._createConferenceIq(e),(n=>this._handleIqSuccess(e,n,t)),(n=>this._handleIqError(e,n,t))),this.connection.flush()):(Go.info(`Sending conference request over HTTP to ${this.targetUrl}`),fetch(this.targetUrl,{method:"POST",body:JSON.stringify(this._createConferenceRequest(e)),headers:{"Content-Type":"application/json"}}).then((n=>{n.ok?n.json().then((n=>{this._handleSuccess(e,n,t)})):n.text().then((i=>{Go.warn(`Received HTTP ${n.status} ${n.statusText}. Body: ${i}`);const r=400===n.status&&i.indexOf("400 invalid-session")>0,o=403===n.status;this._handleError(e,r,o,t)})).catch((t=>{Go.warn(`Error: ${t}`),this._handleError(e)}))})).catch((t=>{Go.warn(`Error: ${t}`),this._handleError(e)})))}))}_handleSuccess(e,t,n){this.getNextErrorTimeout(!0),t.focusJid?(Go.info(`Adding focus JID: ${t.focusJid}`),this.focusUserJids.add(t.focusJid)):Go.warn("Conference request response contained no focusJid.");const i="true"===t.properties.authentication;if(Go.info(`Authentication enabled: ${i}`),t.sessionId&&(Go.info(`Received sessionId: ${t.sessionId}`),$o.sessionId=t.sessionId),this.eventEmitter.emit(Bo.IDENTITY_UPDATED,i,t.identity),this.sipGatewayEnabled=t.properties.sipGatewayEnabled,Go.info(`Sip gateway enabled: ${this.sipGatewayEnabled}`),t.ready){if(this.getNextTimeout(!0),t.vnode&&!this.options.iAmRecorder&&!this.options.iAmSipGateway)return Go.warn(`Redirected to: ${t.vnode} with focusJid ${t.focusJid}`),void this.xmpp.eventEmitter.emit(pr,t.vnode,t.focusJid);Go.info("Conference-request successful, ready to join the MUC."),n()}else{const t=this.getNextTimeout();Go.info(`Not ready yet, will retry in ${t} ms.`),window.setTimeout((()=>this.sendConferenceRequest(e).then(n)),t)}}_handleError(e,t,n,i){if(t&&(Go.info("Session expired! - removing"),$o.sessionId=void 0),n)return Go.warn("Unauthorized to start the conference"),void this.eventEmitter.emit(qo.AUTHENTICATION_REQUIRED);const r=this.getNextErrorTimeout();t&&r<6e4?(Go.info(`Invalid session, will retry after ${r} ms.`),this.getNextTimeout(!0),window.setTimeout((()=>this.sendConferenceRequest(e).then(i)),r)):(Go.error("Failed to get a successful response, giving up."),this.eventEmitter.emit(qo.FOCUS_DISCONNECTED))}_handleIqError(e,t,n){const i=_t()(t).find(">error>reservation-error");if(i.length){const e=i.attr("error-code"),n=_t()(t).find(">error>text");let r;return n&&(r=n.text()),void this.eventEmitter.emit(qo.RESERVATION_ERROR,e,r)}const r=Boolean(_t()(t).find(">error>session-invalid").length||_t()(t).find(">error>not-acceptable").length),o=_t()(t).find(">error>not-authorized").length>0;this._handleError(e,r,o,n)}_handleIqSuccess(e,t,n){const i=this._parseConferenceIq(t);this._handleSuccess(e,i,n)}authenticate(e){return new Promise(((t,n)=>{this.connection.sendIQ(this._createConferenceIq(e),(e=>{const n=_t()(e).find("conference").attr("session-id");n?(Go.info(`Received sessionId: ${n}`),$o.sessionId=n):Go.warn("Response did not contain a session-id"),t()}),(e=>n({error:_t()(e).find("iq>error :first").prop("tagName"),message:_t()(e).find("iq>error>text").text()})))}))}logout(e){const t=(0,St.$iq)({to:this.targetJid,type:"set"}),{sessionId:n}=$o;n?(t.c("logout",{xmlns:"http://jitsi.org/protocol/focus","session-id":n}),this.connection.sendIQ(t,(t=>{Go.info("Log out OK",t),$o.sessionId=void 0,e()}),(e=>{Go.error("Logout error",e)}))):e()}}let Wo;!function(e){e.ON="on",e.OFF="off"}(Wo||(Wo={}));const Xo=Wo.ON,Yo=Wo.OFF;var Qo=n(408);const Zo=(0,E.getLogger)("modules/xmpp/AVModeration.js");class es{constructor(e){this._xmpp=e.xmpp,this._mainRoom=e,this._moderationEnabledByType={[Ri.AUDIO]:!1,[Ri.VIDEO]:!1},this._whitelistAudio=[],this._whitelistVideo=[],this._onMessage=this._onMessage.bind(this),this._xmpp.addListener(Hi.XMPPEvents.AV_MODERATION_RECEIVED,this._onMessage)}dispose(){this._xmpp.removeListener(Hi.XMPPEvents.AV_MODERATION_RECEIVED,this._onMessage)}isSupported(){return Boolean(this._xmpp.avModerationComponentAddress)}enable(e,t){if(!this.isSupported()||!this._mainRoom.isModerator())return void Zo.error(`Cannot enable:${e} AV moderation supported:${this.isSupported()},\\n moderator:${this._mainRoom.isModerator()}`);if(e===this._moderationEnabledByType[t])return void Zo.warn(`Moderation already in state:${e} for mediaType:${t}`);const n=(0,St.$msg)({to:this._xmpp.avModerationComponentAddress});n.c("av_moderation",{enable:e,mediaType:t}).up(),this._xmpp.connection.send(n)}approve(e,t){if(!this.isSupported()||!this._mainRoom.isModerator())return void Zo.error(`Cannot approve in AV moderation supported:${this.isSupported()},\\n moderator:${this._mainRoom.isModerator()}`);const n=(0,St.$msg)({to:this._xmpp.avModerationComponentAddress});n.c("av_moderation",{mediaType:e,jidToWhitelist:t}).up(),this._xmpp.connection.send(n)}reject(e,t){if(!this.isSupported()||!this._mainRoom.isModerator())return void Zo.error(`Cannot reject in AV moderation supported:${this.isSupported()},\\n moderator:${this._mainRoom.isModerator()}`);const n=(0,St.$msg)({to:this._xmpp.avModerationComponentAddress});n.c("av_moderation",{mediaType:e,jidToBlacklist:t}).up(),this._xmpp.connection.send(n)}_onMessage(e){const{removed:t,mediaType:n,enabled:i,approved:r,actor:o,whitelists:s}=e;if(s){const e=n===Ri.AUDIO?this._whitelistAudio:this._whitelistVideo,i=Array.isArray(s[n])?s[n]:[];t?e.filter((e=>!i.includes(e))).forEach((e=>this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_PARTICIPANT_REJECTED,n,e))):i.filter((t=>!e.includes(t))).forEach((e=>this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_PARTICIPANT_APPROVED,n,e))),n===Ri.AUDIO?this._whitelistAudio=i:this._whitelistVideo=i}else void 0!==i&&this._moderationEnabledByType[n]!==i?(this._moderationEnabledByType[n]=i,this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_CHANGED,i,n,o)):t?this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_REJECTED,n):r&&this._xmpp.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_APPROVED,n)}}const ts="features/breakout-rooms",ns={ADD:`${ts}/add`,MOVE_TO_ROOM:`${ts}/move-to-room`,REMOVE:`${ts}/remove`,RENAME:`${ts}/rename`},is=`${ts}/move-to-room`,rs=`${ts}/update`,os=(0,E.getLogger)("modules/xmpp/BreakoutRooms.js");class ss{constructor(e){this.room=e,this._handleMessages=this._handleMessages.bind(this),this.room.xmpp.addListener(Hi.XMPPEvents.BREAKOUT_ROOMS_EVENT,this._handleMessages),this._rooms={}}dispose(){this.room.xmpp.removeListener(Hi.XMPPEvents.BREAKOUT_ROOMS_EVENT,this._handleMessages)}createBreakoutRoom(e){if(!this.isSupported()||!this.room.isModerator())return void os.error(`Cannot create breakout room - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const t={type:ns.ADD,subject:e};this._sendMessage(t)}removeBreakoutRoom(e){if(!this.isSupported()||!this.room.isModerator())return void os.error(`Cannot remove breakout room - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const t={type:ns.REMOVE,breakoutRoomJid:e};this._sendMessage(t)}renameBreakoutRoom(e,t){if(!this.isSupported()||!this.room.isModerator())return void os.error(`Cannot rename breakout room - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const n={type:ns.RENAME,breakoutRoomJid:e,subject:t};this._sendMessage(n)}sendParticipantToRoom(e,t){if(!this.isSupported()||!this.room.isModerator())return void os.error(`Cannot send participant to room - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const n={type:ns.MOVE_TO_ROOM,participantJid:e,roomJid:t};this._sendMessage(n)}isFeatureSupported(e){return Boolean((this.room.xmpp.breakoutRoomsFeatures||{})[e])}isSupported(){return Boolean(this.getComponentAddress())}getComponentAddress(){return this.room.xmpp.breakoutRoomsComponentAddress}_setIsBreakoutRoom(e){this._isBreakoutRoom=e}isBreakoutRoom(){return void 0!==this._isBreakoutRoom?this._isBreakoutRoom:St.Strophe.getDomainFromJid(this.room.myroomjid)===this.getComponentAddress()}_setMainRoomJid(e){this._mainRoomJid=e}getMainRoomJid(){return this._mainRoomJid}_handleMessages(e){switch(e.event){case is:this.room.eventEmitter.emit(Hi.XMPPEvents.BREAKOUT_ROOMS_MOVE_TO_ROOM,e.roomJid);break;case rs:{const t=this._filterUpdatePayload(e);this._rooms=t.rooms,this.room.eventEmitter.emit(Hi.XMPPEvents.BREAKOUT_ROOMS_UPDATED,t);break}}}_filterUpdatePayload(e){const t=this.room.options.hiddenDomain,{rooms:n}=e,i={};return Object.entries(n).forEach((e=>{let[n,r]=e;const{participants:o={}}=r,s={};Object.entries(o).forEach((e=>{let[n,i]=e;St.Strophe.getDomainFromJid(i.jid)!==t&&(s[n]=i)})),i[n]={...r,participants:s}})),{...e,rooms:i}}_sendMessage(e){const t=(0,St.$msg)({to:this.getComponentAddress()});t.c("breakout_rooms",e).up(),this.room.xmpp.connection.send(t)}}const as=(0,E.getLogger)("modules/xmpp/Lobby.js"),ds="email";class cs{constructor(e){this.xmpp=e.xmpp,this.mainRoom=e;const t=this._maybeJoinLobbyRoom.bind(this);this.mainRoom.addEventListener(Hi.XMPPEvents.LOCAL_ROLE_CHANGED,t),this.mainRoom.addEventListener(Hi.XMPPEvents.MUC_MEMBERS_ONLY_CHANGED,t),this.mainRoom.addEventListener(Hi.XMPPEvents.ROOM_CONNECT_MEMBERS_ONLY_ERROR,(e=>{this.lobbyRoomJid=e}))}isSupported(){return this.xmpp.lobbySupported}enable(){return this.isSupported()?this.mainRoom.initialDiscoRoomInfoReceived?this.mainRoom.membersOnlyEnabled?Promise.resolve():new Promise(((e,t)=>{this.mainRoom.setMembersOnly(!0,e,t)})):new Promise(((e,t)=>{let n=[];const i=()=>{n.forEach((e=>e())),n=[]};n.push(this.mainRoom.addCancellableListener(Hi.XMPPEvents.ROOM_DISCO_INFO_UPDATED,(()=>{i(),this.mainRoom.membersOnlyEnabled?e():this.mainRoom.setMembersOnly(!0,e,t)}))),n.push(this.mainRoom.addCancellableListener(Hi.XMPPEvents.ROOM_DISCO_INFO_FAILED,(e=>{i(),t(e)})))})):Promise.reject(new Error("Lobby not supported!"))}disable(){this.isSupported()&&this.mainRoom.isModerator()&&this.lobbyRoom&&this.mainRoom.membersOnlyEnabled&&this.mainRoom.setMembersOnly(!1)}sendMessage(e){this.lobbyRoom&&this.lobbyRoom.sendMessage(JSON.stringify(e),"json-message")}sendPrivateMessage(e,t){this.lobbyRoom&&this.lobbyRoom.sendPrivateMessage(e,JSON.stringify(t),"json-message")}getLocalId(){if(this.lobbyRoom)return St.Strophe.getResourceFromJid(this.lobbyRoom.myroomjid)}addMessageListener(e){if(this.lobbyRoom){const t=(t,n)=>{e(n,St.Strophe.getResourceFromJid(t))};return this.lobbyRoom.on(Hi.XMPPEvents.JSON_MESSAGE_RECEIVED,t),t}}removeMessageHandler(e){this.lobbyRoom&&this.lobbyRoom.off(Hi.XMPPEvents.JSON_MESSAGE_RECEIVED,e)}leave(){return this.lobbyRoom?this.lobbyRoom.leave().then((()=>{this.lobbyRoom=void 0,as.info("Lobby room left!")})).catch((()=>{})):Promise.reject(new Error("The lobby has already been left"))}setLobbyRoomJid(e){this.lobbyRoomJid=e}_maybeJoinLobbyRoom(){this.isSupported()&&this.mainRoom.joined&&this.mainRoom.isModerator()&&this.mainRoom.membersOnlyEnabled&&!this.lobbyRoom&&this.join().then((()=>as.info("Joined lobby room"))).catch((e=>as.error("Failed joining lobby",e)))}join(e,t){const n=this.mainRoom.joined&&this.mainRoom.isModerator();if(!this.lobbyRoomJid)return Promise.reject(new Error("Missing lobbyRoomJid, cannot join lobby room."));const i=St.Strophe.getNodeFromJid(this.lobbyRoomJid),r=St.Strophe.getDomainFromJid(this.lobbyRoomJid);return this.lobbyRoom=this.xmpp.createRoom(i,{customDomain:r,disableDiscoInfo:!0,disableFocus:!0,enableLobby:!1}),e&&this.lobbyRoom.addOrReplaceInPresence("nick",{attributes:{xmlns:"http://jabber.org/protocol/nick"},value:e}),n?(this.lobbyRoom.addPresenceListener(ds,((e,t)=>{this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_LOBBY_MEMBER_UPDATED,t,{email:e.value})})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_MEMBER_JOINED,((e,t,n,i,r,o,s,a,d)=>{if(!Object.values(this.mainRoom.members).find((e=>e.jid===d))){for(const e of Object.values(this.mainRoom.getBreakoutRooms()._rooms))if(Object.values(e.participants).find((e=>e.jid===d)))return;this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_LOBBY_MEMBER_JOINED,St.Strophe.getResourceFromJid(e),t,s?s.avatar:void 0)}})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,(e=>{this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_LOBBY_MEMBER_LEFT,St.Strophe.getResourceFromJid(e))})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_DESTROYED,(()=>{Object.keys(this.lobbyRoom.members).forEach((e=>this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_LOBBY_MEMBER_LEFT,St.Strophe.getResourceFromJid(e)))),this.lobbyRoom.clean(),this.lobbyRoom=void 0,as.info("Lobby room left(destroyed)!")}))):(this.lobbyRoom.addEventListener(Hi.XMPPEvents.KICKED,(e=>{if(e)return this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_DENIED_ACCESS),void this.lobbyRoom.clean()})),this.mainRoom.addEventListener(Hi.XMPPEvents.INVITE_MESSAGE_RECEIVED,((e,t,n,i)=>{as.debug(`Received approval to join ${e} ${t} ${n}`),e===this.mainRoom.roomjid&&this.mainRoom.join(i)})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_DESTROYED,((e,t)=>{var n;null===(n=this.lobbyRoom)||void 0===n||n.clean(),this.lobbyRoom=void 0,as.info("Lobby room left(destroyed)!"),t?this.mainRoom.join():this.mainRoom.eventEmitter.emit(Hi.XMPPEvents.MUC_DESTROYED,e)})),this.mainRoom.addEventListener(Hi.XMPPEvents.MUC_JOINED,(()=>{this.leave().catch((()=>{}))}))),new Promise(((e,i)=>{this.lobbyRoom.addEventListener(Hi.XMPPEvents.MUC_JOINED,(()=>{e(),t&&!n&&this.lobbyRoom.addOrReplaceInPresence(ds,{value:t})&&this.lobbyRoom.sendPresence()})),this.lobbyRoom.addEventListener(Hi.XMPPEvents.ROOM_JOIN_ERROR,i),this.lobbyRoom.addEventListener(Hi.XMPPEvents.ROOM_CONNECT_NOT_ALLOWED_ERROR,i),this.lobbyRoom.addEventListener(Hi.XMPPEvents.ROOM_CONNECT_ERROR,i),this.lobbyRoom.join()}))}denyAccess(e){if(!this.isSupported()||!this.mainRoom.isModerator())return;const t=Object.keys(this.lobbyRoom.members).find((t=>St.Strophe.getResourceFromJid(t)===e));t?this.lobbyRoom.kick(t):as.error(`Not found member for ${e} in lobby room.`)}approveAccess(e){if(!this.isSupported()||!this.mainRoom.isModerator())return;let t=this.mainRoom.roomjid;this.mainRoom.getBreakoutRooms().isBreakoutRoom()&&(t=this.mainRoom.getBreakoutRooms().getMainRoomJid());const n=[];let i=e;if(Array.isArray(e)||(i=[e]),i.forEach((e=>{const t=Object.keys(this.lobbyRoom.members).find((t=>St.Strophe.getResourceFromJid(t)===e));t?n.push(this.lobbyRoom.members[t].jid):as.error(`Not found member for ${t} in lobby room.`)})),n.length>0){const e=(0,St.$msg)({to:t}).c("x",{xmlns:"http://jabber.org/protocol/muc#user"});n.forEach((t=>{e.c("invite",{to:t}).up()})),this.xmpp.connection.sendIQ(e,(()=>{}),(e=>{as.error(`Error sending invite for ${n}`,e)}))}}}const ls=(0,E.getLogger)("modules/xmpp/RoomMetadata.ts");class hs{constructor(e){this.room=e,this._handleMessages=this._handleMessages.bind(this),this.room.xmpp.addListener(Hi.XMPPEvents.ROOM_METADATA_EVENT,this._handleMessages),this._metadata={}}dispose(){this.room.xmpp.removeListener(Hi.XMPPEvents.ROOM_METADATA_EVENT,this._handleMessages)}setMetadata(e,t){if(!this.isSupported()||!this.room.isModerator())return void ls.error(`Cannot set room metadata - supported:${this.isSupported()},\\n moderator:${this.room.isModerator()}`);const n={key:e,data:t};this._sendMessage(n)}getMetadata(){return this._metadata}isSupported(){return Boolean(this.getComponentAddress())}getComponentAddress(){return this.room.xmpp.roomMetadataComponentAddress}_handleMessages(e){const{metadata:t}=e;t&&!Et()(this._metadata,t)&&(this._metadata=t,this.room.eventEmitter.emit(Hi.XMPPEvents.ROOM_METADATA_UPDATED,t))}_sendMessage(e){e[Aa]="room_metadata";const t=(0,St.$msg)({to:this.getComponentAddress()});t.c("room_metadata",{room:this.room.roomjid,xmlns:"http://jitsi.org/jitmeet"},JSON.stringify(e)).up(),this.room.xmpp.connection.send(t)}}const us=(0,E.getLogger)("modules/xmpp/ChatRoom.js"),ps={packet2JSON(e,t){for(const n of Array.from(e.children)){const e={attributes:{},children:[],tagName:n.tagName};for(const t of Array.from(n.attributes))e.attributes[t.name]=t.value;const i=St.Strophe.getText(n);i&&(e.value=St.Strophe.xmlunescape(i)),t.push(e),this.packet2JSON(n,e.children)}},json2packet(e,t){for(let n=0;n"user"===e.tagName));if(i){n.user={};const e=["id","name","avatar"];t&&e.push("hidden-from-recorder");for(const t of e){const e=i.children.find((e=>e.tagName===t));e&&(n.user[t]=e.value)}}const r=e.children.find((e=>"group"===e.tagName));return r&&(n.group=r.value),n}class vs extends xr{constructor(e,t,n,i,r){super(),this.xmpp=i,this.connection=e,this.roomjid=St.Strophe.getBareJidFromJid(t),this.myroomjid=t,this.password=n,this.replaceParticipant=!1,us.info(`Joining MUC as ${this.myroomjid}`),this.members={},this.presMap={},this.presHandlers={},this._removeConnListeners=[],this.joined=!1,this.inProgressEmitted=!1,this.role=null,this.focusMucJid=null,this.noBridgeAvailable=!1,this.options=r||{},this.eventsForwarder=new(Fi())(this.xmpp.moderator,this.eventEmitter),this.eventsForwarder.forward(Ui().IDENTITY_UPDATED,Ui().IDENTITY_UPDATED),this.eventsForwarder.forward(Hi.XMPPEvents.AUTHENTICATION_REQUIRED,Hi.XMPPEvents.AUTHENTICATION_REQUIRED),this.eventsForwarder.forward(Hi.XMPPEvents.FOCUS_DISCONNECTED,Hi.XMPPEvents.FOCUS_DISCONNECTED),this.eventsForwarder.forward(Hi.XMPPEvents.RESERVATION_ERROR,Hi.XMPPEvents.RESERVATION_ERROR),(void 0===this.options.enableLobby||this.options.enableLobby)&&(this.lobby=new cs(this)),this.avModeration=new es(this),this.breakoutRooms=new ss(this),this.roomMetadata=new hs(this),this.initPresenceMap(r),this.lastPresences={},this.phoneNumber=null,this.phonePin=null,this.connectionTimes={},this.participantPropertyListener=null,this.locked=!1,this.transcriptionStatus=Yo,this.initialDiscoRoomInfoReceived=!1}initPresenceMap(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.presMap.to=this.myroomjid,this.presMap.xns="http://jabber.org/protocol/muc",this.presMap.nodes=[],e.statsId&&this.presMap.nodes.push({tagName:"stats-id",value:e.statsId}),this.presenceUpdateTime=Date.now()}join(e,t){return this.password=e,this.replaceParticipant=t,new Promise((e=>{this.options.disableFocus&&us.info(`Conference focus disabled for ${this.roomjid}`),(this.options.disableFocus?Promise.resolve():this.xmpp.moderator.sendConferenceRequest(this.roomjid)).then((()=>{this.sendPresence(!0),this._removeConnListeners.push(this.connection.addCancellableListener(Lo.Events.CONN_STATUS_CHANGED,this.onConnStatusChanged.bind(this))),e()}))}))}sendPresence(e){const t=this.presMap.to;if(!this.connection||!this.connection.connected||!t||!this.joined&&!e)return;const n=(0,St.$pres)({to:t});e&&(this.replaceParticipant&&n.c("flip_device").up(),n.c("x",{xmlns:this.presMap.xns}),this.password&&n.c("password").t(this.password).up(),this.xmpp.moderator.targetUrl&&n.c("billingid").t($o.machineId).up(),n.up()),ps.json2packet(this.presMap.nodes,n),this.presenceSyncTime=Date.now(),this.connection.send(n),e&&this.connection.flush()}doLeave(e){us.log("do leave",this.myroomjid);const t=(0,St.$pres)({to:this.myroomjid,type:"unavailable"});e&&t.c("status").t(e).up(),this.presMap.length=0,!this.connection.isUsingWebSocket&&this.connection.flush(),this.connection.send(t),this.connection.flush()}discoRoomInfo(){const e=(0,St.$iq)({type:"get",to:this.roomjid}).c("query",{xmlns:St.Strophe.NS.DISCO_INFO});this.connection.sendIQ(e,(e=>{const t=1===_t()(e).find(\'>query>feature[var="muc_passwordprotected"]\').length;t!==this.locked&&(this.eventEmitter.emit(Hi.XMPPEvents.MUC_LOCK_CHANGED,t),this.locked=t);const n=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_meetingId"]>value\');n.length?this.setMeetingId(n.text()):us.warn("No meeting ID from backend");const i=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_created_timestamp"]>value\');i.length?this.eventEmitter.emit(Hi.XMPPEvents.CONFERENCE_TIMESTAMP_RECEIVED,i.text()):us.warn("No conference duration from backend");const r=1===_t()(e).find(\'>query>feature[var="muc_membersonly"]\').length,o=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_lobbyroom"]>value\');this.lobby&&this.lobby.setLobbyRoomJid(o&&o.length?o.text():void 0);const s=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_isbreakout"]>value\'),a=Boolean(null==s?void 0:s.text());this.breakoutRooms._setIsBreakoutRoom(a);const d=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_breakout_main_room"]>value\');null!=d&&d.length&&this.breakoutRooms._setMainRoomJid(d.text()),r!==this.membersOnlyEnabled&&(this.membersOnlyEnabled=r,this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBERS_ONLY_CHANGED,r));const c="1"===_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_visitorsEnabled"]>value\').text();c!==this.visitorsSupported&&(this.visitorsSupported=c,this.eventEmitter.emit(Hi.XMPPEvents.MUC_VISITORS_SUPPORTED_CHANGED,c));const l=_t()(e).find(\'>query>x[type="result"]>field[var="muc#roominfo_jitsimetadata"]>value\'),h=null==l?void 0:l.text();if(h)try{this.roomMetadata._handleMessages(_r(h))}catch(e){us.warn("Failed to set room metadata",e)}this.initialDiscoRoomInfoReceived=!0,this.eventEmitter.emit(Hi.XMPPEvents.ROOM_DISCO_INFO_UPDATED)}),(e=>{us.error("Error getting room info: ",e),this.eventEmitter.emit(Hi.XMPPEvents.ROOM_DISCO_INFO_FAILED,e)}),1e4)}setMeetingId(e){this.meetingId!==e&&(this.meetingId&&us.warn(`Meeting Id changed from:${this.meetingId} to:${e}`),this.meetingId=e,this.eventEmitter.emit(Hi.XMPPEvents.MEETING_ID_SET,e))}createNonAnonymousRoom(){if(this.options.disableDiscoInfo)return;const e=(0,St.$iq)({type:"get",to:this.roomjid}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}).c("x",{xmlns:"jabber:x:data",type:"submit"});this.connection.sendIQ(e,(e=>{if(!_t()(e).find(\'>query>x[xmlns="jabber:x:data"]>field[var="muc#roomconfig_whois"]\').length)return void us.error("non-anonymous rooms not supported");const t=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});t.c("x",{xmlns:"jabber:x:data",type:"submit"}),t.c("field",{var:"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up(),t.c("field",{var:"muc#roomconfig_whois"}).c("value").t("anyone").up().up(),this.connection.sendIQ(t)}),(e=>{us.error("Error getting room configuration form: ",e)}))}onConnStatusChanged(e){e===Lo.Status.CONNECTED&&this.presenceUpdateTime>this.presenceSyncTime&&this.sendPresence()}onPresence(e){const t=e.getAttribute("from"),n={},i=e.getElementsByTagName("status")[0];i&&(n.status=i.textContent||"");let r=!1,o=!1;const s=e.getElementsByTagNameNS("http://jabber.org/protocol/muc#user","x")[0],a=s&&s.getElementsByTagName("item")[0];n.isReplaceParticipant=e.getElementsByTagName("flip_device").length,n.affiliation=a&&a.getAttribute("affiliation"),n.role=a&&a.getAttribute("role");const d=a&&a.getAttribute("jid");n.jid=d,n.isFocus=this.xmpp.moderator.isFocusJid(d),n.isHiddenDomain=d&&d.indexOf("@")>0&&this.options.hiddenDomain===d.substring(d.indexOf("@")+1,d.indexOf("/")),this.eventEmitter.emit(Hi.XMPPEvents.PRESENCE_RECEIVED,{fromHiddenDomain:n.isHiddenDomain,presence:e});const c=e.querySelector("x");c&&c.remove();const l=[];ps.packet2JSON(e,l),this.lastPresences[t]=l;for(let e=0;e=this.presenceSyncTime&&this.sendPresence(),this.eventEmitter.emit(Hi.XMPPEvents.MUC_JOINED),!this.options.disableDiscoInfo&&this.discoRoomInfo()}}else if(void 0===d)us.info("Ignoring member with undefined JID");else if(void 0===this.members[t])this.members[t]=n,us.log("entered",t,n),r=void 0!==n.status,o=void 0!==n.version,n.isFocus?this._initFocus(t,n.features):(this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBER_JOINED,t,n.nick,n.role,n.isHiddenDomain,n.statsID,n.status,n.identity,n.botType,n.jid,n.features,n.isReplaceParticipant),r=!1);else{const e=this.members[t];e.role!==n.role&&(e.role=n.role,this.eventEmitter.emit(Hi.XMPPEvents.MUC_ROLE_CHANGED,t,n.role)),e.affiliation!==n.affiliation&&(e.affiliation=n.affiliation),e.botType!==n.botType&&(e.botType=n.botType,this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBER_BOT_TYPE_CHANGED,t,n.botType)),n.isFocus&&(e.isFocus=!0,this._initFocus(t,n.features)),n.displayName&&(e.displayName=n.displayName),e.status!==n.status&&(r=!0,e.status=n.status),e.version!==n.version&&(o=!0,e.version=n.version),Et()(e.features,n.features)||(e.features=n.features,this.eventEmitter.emit(Hi.XMPPEvents.PARTICIPANT_FEATURES_CHANGED,t,n.features))}for(let e=0;e{n(e,St.Strophe.getResourceFromJid(t),t)}))}catch(t){us.error(`Error processing:${e.tagName} node.`,t)}}sendMessage(e,t){const n=(0,St.$msg)({to:this.roomjid,type:"groupchat"});"body"===t?n.c(t,{},e):n.c(t,{xmlns:"http://jitsi.org/jitmeet"},e),this.connection.send(n),this.eventEmitter.emit(Hi.XMPPEvents.SENDING_CHAT_MESSAGE,e)}sendPrivateMessage(e,t,n){const i=(0,St.$msg)({to:`${this.roomjid}/${e}`,type:"chat"});"body"===n?i.c(n,t).up():i.c(n,{xmlns:"http://jitsi.org/jitmeet"},t).up(),this.connection.send(i),this.eventEmitter.emit(Hi.XMPPEvents.SENDING_PRIVATE_CHAT_MESSAGE,t)}setSubject(e){const t=(0,St.$msg)({to:this.roomjid,type:"groupchat"});t.c("subject",e),this.connection.send(t)}onPresenceUnavailable(e,t){if(_t()(e).find(\'>ignore[xmlns="http://jitsi.org/jitmeet/"]\').length)return!0;const n=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>destroy\');if(n.length){let t;const i=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>destroy>reason\');return i.length&&(t=i.text()),this.eventEmitter.emit(Hi.XMPPEvents.MUC_DESTROYED,t,n.attr("jid")),this.connection.emuc.doLeave(this.roomjid),!0}const i=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="110"]\').length,r=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="307"]\').length,o=Object.keys(this.members),s=_t()(e).find("flip_device").length;if(r){const n=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>item>actor\');let r,o;n.length&&(r=n.attr("nick"));const a=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>item>reason\');a.length&&(o=a.text()),this.eventEmitter.emit(Hi.XMPPEvents.KICKED,i,r,St.Strophe.getResourceFromJid(t),o,s)}if(i)o.forEach((e=>{const t=this.members[e];delete this.members[e],delete this.lastPresences[e],t.isFocus||this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBER_LEFT,e)})),this.connection.emuc.doLeave(this.roomjid),r||this.eventEmitter.emit(Hi.XMPPEvents.MUC_LEFT);else{const n=_t()(e).find(">status"),i=this.members[t];let r;n.length&&(r=n.text()),delete this.members[t],delete this.lastPresences[t],this.eventEmitter.emit(Hi.XMPPEvents.MUC_MEMBER_LEFT,t,r),null!=i&&i.isFocus&&(us.info("Focus has left the room - leaving conference"),this.eventEmitter.emit(Hi.XMPPEvents.FOCUS_LEFT))}}onMessage(e,t){const n=e.getAttribute("type");if("error"===n){const t=_t()(e).find(">settings-error>text").text();if(t.length)return this.eventEmitter.emit(Hi.XMPPEvents.SETTINGS_ERROR_RECEIVED,t),!0;const n=_t()(e).find(">error>text").text();return this.eventEmitter.emit(Hi.XMPPEvents.CHAT_ERROR_RECEIVED,n),!0}const i=_t()(e).find(">body").text(),r=_t()(e).find(">subject");if(r.length){const e=r.text();(e||""===e)&&(this.eventEmitter.emit(Hi.XMPPEvents.SUBJECT_CHANGED,e),us.log(`Subject is changed to ${e}`))}let o=_t()(e).find(">delay").attr("stamp");if(!o&&(o=_t()(e).find(\'>[xmlns="jabber:x:delay"]\').attr("stamp"),o)){const e=o.match(/(\\d{4})(\\d{2})(\\d{2}T\\d{2}:\\d{2}:\\d{2})/);o=`${e[1]}-${e[2]}-${e[3]}Z`}if(t===this.roomjid){let n;if(_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="104"]\').length)this.discoRoomInfo();else if((n=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>invite\'))&&n.length){const r=_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>password\');let o;r&&r.length&&(o=r.text()),this.eventEmitter.emit(Hi.XMPPEvents.INVITE_MESSAGE_RECEIVED,t,n.attr("from"),i,o)}}const s=_t()(e).find(">json-message").text();if(s){const e=this.xmpp.tryParseJSONAndVerify(s);if(e&&void 0===o)return void this.eventEmitter.emit(Hi.XMPPEvents.JSON_MESSAGE_RECEIVED,t,e)}if(i)if("chat"===n)this.eventEmitter.emit(Hi.XMPPEvents.PRIVATE_MESSAGE_RECEIVED,t,i,this.myroomjid,o);else if("groupchat"===n){const n=_t()(e).find(">nick");let r;n.length>0&&(r=n.text()),this.eventEmitter.emit(Hi.XMPPEvents.MESSAGE_RECEIVED,t,i,this.myroomjid,o,r,Boolean(r))}}onPresenceError(e,t){let n;if(_t()(e).find(\'>error[type="auth"]>not-authorized[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]\').length)us.log("on password required",t),this.eventEmitter.emit(Hi.XMPPEvents.PASSWORD_REQUIRED);else if(_t()(e).find(\'>error[type="cancel"]>not-allowed[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]\').length)if(St.Strophe.getDomainFromJid(e.getAttribute("to"))===this.xmpp.options.hosts.anonymousdomain)this.eventEmitter.emit(Hi.XMPPEvents.ROOM_JOIN_ERROR);else{us.warn("onPresError ",e);const t=_t()(e).find(\'>error[type="cancel"]>text[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]\'),n=t.length&&t.text();if("Room creation is restricted"===n&&(this._roomCreationRetries||(this._roomCreationRetries=0),this._roomCreationRetries++,this._roomCreationRetries<=3)){const e=Ro(this._roomCreationRetries,500,1.5);return void setTimeout((()=>this.join(this.password,this.replaceParticipant)),e)}this.eventEmitter.emit(Hi.XMPPEvents.ROOM_CONNECT_NOT_ALLOWED_ERROR,n)}else if(_t()(e).find(">error>service-unavailable").length)us.warn("Maximum users limit for the room has been reached",e),this.eventEmitter.emit(Hi.XMPPEvents.ROOM_MAX_USERS_ERROR);else if(_t()(e).find(\'>error[type="auth"]>registration-required[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]\').length){const t=_t()(e).find(\'>error[type="auth"]>lobbyroom\');let n;t.length&&(n=t.text());const i=_t()(e).find(\'>error[type="auth"]>waiting-for-host\').length>0;this.eventEmitter.emit(Hi.XMPPEvents.ROOM_CONNECT_MEMBERS_ONLY_ERROR,n,i)}else if((n=_t()(e).find(\'>error[type="modify"]>displayname-required[xmlns="http://jitsi.org/jitmeet"]\')).length){var i;us.warn("display name required ",e),this.eventEmitter.emit(Hi.XMPPEvents.DISPLAY_NAME_REQUIRED,null===(i=n[0].attributes.lobby)||void 0===i?void 0:i.value)}else us.warn("onPresError ",e),this.eventEmitter.emit(Hi.XMPPEvents.ROOM_CONNECT_ERROR)}setAffiliation(e,t){const n=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#admin"}).c("item",{affiliation:t,jid:St.Strophe.getBareJidFromJid(e)}).c("reason").t(`Your affiliation has been changed to \'${t}\'.`).up().up().up();this.connection.sendIQ(n,(n=>us.log("Set affiliation of participant with jid: ",e,"to",t,n)),(e=>us.log("Set affiliation of participant error: ",e)))}kick(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"You have been kicked.";const n=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#admin"}).c("item",{nick:St.Strophe.getResourceFromJid(e),role:"none"}).c("reason").t(t).up().up().up();this.connection.sendIQ(n,(t=>us.log("Kick participant with jid: ",e,t)),(e=>us.log("Kick participant error: ",e)))}lockRoom(e,t,n,i){this.connection.sendIQ((0,St.$iq)({to:this.roomjid,type:"get"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}),(r=>{if(_t()(r).find(\'>query>x[xmlns="jabber:x:data"]>field[var="muc#roomconfig_roomsecret"]\').length){const i=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});i.c("x",{xmlns:"jabber:x:data",type:"submit"}),i.c("field",{var:"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up(),i.c("field",{var:"muc#roomconfig_roomsecret"}).c("value").t(e).up().up(),i.c("field",{var:"muc#roomconfig_passwordprotectedroom"}).c("value").t(null===e||0===e.length?"0":"1").up().up(),this.membersOnlyEnabled&&i.c("field",{var:"muc#roomconfig_membersonly"}).c("value").t("true").up().up(),i.c("field",{var:"muc#roomconfig_whois"}).c("value").t("anyone").up().up(),this.connection.sendIQ(i,(()=>{this.password=e,t()}),n)}else i()}),n)}setMembersOnly(e,t,n){if(e&&Object.values(this.members).filter((e=>!e.isFocus)).length){const e=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#admin"});Object.values(this.members).forEach((t=>{t.jid&&!gs.includes(t.affiliation)&&e.c("item",{affiliation:"member",jid:St.Strophe.getBareJidFromJid(t.jid)}).up()})),this.xmpp.connection.sendIQ(e.up())}const i=n||(()=>{});this.xmpp.connection.sendIQ((0,St.$iq)({to:this.roomjid,type:"get"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}),(n=>{if(_t()(n).find(\'>query>x[xmlns="jabber:x:data"]>field[var="muc#roomconfig_membersonly"]\').length){const n=(0,St.$iq)({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});n.c("x",{xmlns:"jabber:x:data",type:"submit"}),n.c("field",{var:"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up(),n.c("field",{var:"muc#roomconfig_membersonly"}).c("value").t(e?"true":"false").up().up(),this.locked&&n.c("field",{var:"muc#roomconfig_passwordprotectedroom"}).c("value").t("1").up().up(),this.xmpp.connection.sendIQ(n,t,i)}else i(new Error("Setting members only room not supported!"))}),i)}addToPresence(e,t){return this.addOrReplaceInPresence(e,t)}addOrReplaceInPresence(e,t){t.tagName=e;const n=this.presMap.nodes.filter((t=>e===t.tagName));return!(1===n.length&&Et()(n[0],t)||(this.removeFromPresence(e),this.presMap.nodes.push(t),this.presenceUpdateTime=Date.now(),0))}getFromPresence(e){return this.presMap.nodes.find((t=>e===t.tagName))}removeFromPresence(e){const t=this.presMap.nodes.filter((t=>e!==t.tagName));this.presMap.nodes=t,this.presenceUpdateTime=Date.now()}addPresenceListener(e,t){if("function"!=typeof t)throw new Error(\'"handler" is not a function\');let n=this.presHandlers[e];n||(this.presHandlers[e]=n=[]),-1===n.indexOf(t)?n.push(t):us.warn(`Trying to add the same handler more than once for: ${e}`)}removePresenceListener(e,t){const n=this.presHandlers[e],i=n?n.indexOf(t):-1;-1!==i?n.splice(i,1):us.warn(`Handler for: ${e} was not registered`)}isFocus(e){const t=this.members[e];return t?t.isFocus:null}isModerator(){return"moderator"===this.role}getMediaPresenceInfo(e,t){const n=this.lastPresences[`${this.roomjid}/${e}`];if(!n)return null;const i={muted:!0,videoType:t===Ri.VIDEO?Qo.VideoType.CAMERA:void 0};let r=null;if(t===Ri.AUDIO)r=ms(n,"audiomuted");else{if(t!==Ri.VIDEO)return us.error(`Unsupported media type: ${t}`),null;{r=ms(n,"videomuted");const e=ms(n,"jitsi_participant_codecType"),t=ms(n,"videoType");t.length>0&&(i.videoType=t[0].value),e.length>0&&(i.codecType=e[0].value)}}return r.length>0&&(i.muted="true"===r[0].value),i}getMemberRole(e){return this.members[e]?this.members[e].role:null}getLastPresence(e){return this.lastPresences[`${this.roomjid}/${e}`]}dial(e){return this.connection.rayo.dial(e,"fromnumber",St.Strophe.getBareJidFromJid(this.myroomjid),this.password,this.focusMucJid)}hangup(){return this.connection.rayo.hangup()}getLobby(){return this.lobby}getAVModeration(){return this.avModeration}getBreakoutRooms(){return this.breakoutRooms}getMetadataHandler(){return this.roomMetadata}getPhoneNumber(){return this.phoneNumber}getPhonePin(){return this.phonePin}getMeetingId(){return this.meetingId}muteParticipant(e,t,n){us.info("set mute",t,e);const i=(0,St.$iq)({to:this.focusMucJid,type:"set"}).c("mute",{xmlns:`http://jitsi.org/jitmeet/${n}`,jid:e}).t(t.toString()).up();this.connection.sendIQ(i,(e=>us.log("set mute",e)),(e=>us.log("set mute error",e)))}onMute(e){if(e.getAttribute("from")!==this.focusMucJid)return void us.warn("Ignored mute from non focus peer");const t=_t()(e).find("mute");t.length&&"true"===t.text()?this.eventEmitter.emit(Hi.XMPPEvents.AUDIO_MUTED_BY_FOCUS,t.attr("actor")):us.warn("Ignoring a mute request which does not explicitly specify a positive mute command.")}onMuteVideo(e){if(e.getAttribute("from")!==this.focusMucJid)return void us.warn("Ignored mute from non focus peer");const t=_t()(e).find("mute");t.length&&"true"===t.text()?this.eventEmitter.emit(Hi.XMPPEvents.VIDEO_MUTED_BY_FOCUS,t.attr("actor")):us.warn("Ignoring a mute request which does not explicitly specify a positive mute command.")}clean(){this._removeConnListeners.forEach((e=>e())),this._removeConnListeners=[],this.eventsForwarder.removeListeners(Ui().IDENTITY_UPDATED,Hi.XMPPEvents.AUTHENTICATION_REQUIRED,Hi.XMPPEvents.FOCUS_DISCONNECTED,Hi.XMPPEvents.RESERVATION_ERROR),this.joined=!1,this.inProgressEmitted=!1}leave(e){var t,n=this;this.avModeration.dispose(),this.breakoutRooms.dispose(),this.roomMetadata.dispose();const i=[];return(null===(t=this.lobby)||void 0===t?void 0:t.lobbyRoom)&&i.push(this.lobby.leave()),i.push(new Promise(((t,i)=>{let r=-1;const o=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n.eventEmitter.removeListener(Hi.XMPPEvents.MUC_LEFT,o),clearTimeout(r),n.clean(),e?(n.connection.emuc.doLeave(n.roomjid),i(new Error("The timeout for the confirmation about leaving the room expired."))):t()};this.joined?(r=setTimeout((()=>o(!0)),5e3),this.eventEmitter.on(Hi.XMPPEvents.MUC_LEFT,o),this.doLeave(e)):(this.connection.emuc.doLeave(this.roomjid),this.clean(),t())}))),Promise.allSettled(i)}end(){if(this.breakoutRooms.isBreakoutRoom())return void us.warn("Cannot end conference: this is a breakout room.");const e=(0,St.$msg)({to:this.xmpp.endConferenceComponentAddress});e.c("end_conference").up(),this.xmpp.connection.send(e)}}const _s=(0,E.getLogger)("modules/xmpp/strophe.emuc.js");class ys extends Oo{constructor(e){super(),this.xmpp=e,this.rooms={}}init(e){super.init(e),this.connection.addHandler(this.onPresence.bind(this),null,"presence",null,null,null,null),this.connection.addHandler(this.onPresenceUnavailable.bind(this),null,"presence","unavailable",null),this.connection.addHandler(this.onPresenceError.bind(this),null,"presence","error",null),this.connection.addHandler(this.onMessage.bind(this),null,"message",null,null),this.connection.addHandler(this.onMute.bind(this),"http://jitsi.org/jitmeet/audio","iq","set",null,null),this.connection.addHandler(this.onMuteVideo.bind(this),"http://jitsi.org/jitmeet/video","iq","set",null,null),this.connection.addHandler(this.onVisitors.bind(this),"jitsi:visitors","iq","set",null,null)}createRoom(e,t,n){const i=St.Strophe.getBareJidFromJid(e);if(this.isRoomCreated(i)){const e="You are already in the room!";throw _s.error(e),new Error(e)}return this.rooms[i]=new vs(this.connection,e,t,this.xmpp,n),this.eventEmitter.emit(Hi.XMPPEvents.EMUC_ROOM_ADDED,this.rooms[i]),this.rooms[i]}isRoomCreated(e){return e in this.rooms}doLeave(e){this.eventEmitter.emit(Hi.XMPPEvents.EMUC_ROOM_REMOVED,this.rooms[e]),delete this.rooms[e]}onPresence(e){const t=e.getAttribute("from");if(e.getAttribute("type"))return!0;const n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(_t()(e).find(\'>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="201"]\').length&&n.createNonAnonymousRoom(),n.onPresence(e),!0)}onPresenceUnavailable(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onPresenceUnavailable(e,t),!0)}onPresenceError(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onPresenceError(e,t),!0)}onMessage(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onMessage(e,t),!0)}onMute(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onMute(e),!0)}onMuteVideo(e){const t=e.getAttribute("from"),n=this.rooms[St.Strophe.getBareJidFromJid(t)];return!n||(n.onMuteVideo(e),!0)}onVisitors(e){const t=e.getAttribute("from");if(!this.rooms[St.Strophe.getBareJidFromJid(t)])return!0;const n=_t()(e).find(\'>visitors[xmlns="jitsi:visitors"]\'),i=_t()(e).find("promotion-response");return n.length&&i.length&&("true"===String(i.attr("allow")).toLowerCase()?(_s.info("Promotion request accepted. Redirected to main room."),this.xmpp.eventEmitter.emit(pr,void 0,n.attr("focusjid"),i.attr("username"))):(_s.info("Promotion request rejected."),this.xmpp.eventEmitter.emit(Hi.XMPPEvents.VISITORS_REJECTION))),!0}}var Es=n(138),Ss=n.n(Es);const bs=(0,E.getLogger)("modules/xmpp/JingleHelperFunctions.js");function Ts(e,t){const n=(0,St.$build)("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",ssrc:t.s,name:t.n});return t.m&&n.c("parameter",{name:"msid",value:t.m}).up(),n.c("ssrc-info",{xmlns:"http://jitsi.org/jitmeet",owner:e}).up(),n.node}function Cs(e){const t=(0,St.$build)("ssrc-group",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",semantics:(n=e[0],"f"===n?"FID":"s"===n?"SIM":null)});var n;for(let n=1;n1&&n[1],h=(null==n?void 0:n.length)>2&&n[2],u=(null==n?void 0:n.length)>3&&n[3];if(null!=c&&c.length)for(let n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.options=e,this.obtainStream=this._createObtainStreamMethod(),this.obtainStream||ws.info("Desktop sharing disabled")},_createObtainStreamMethod(){return ci.isElectron()?this.obtainScreenOnElectron:ci.isReactNative()&&ci.supportsGetDisplayMedia()?this.obtainScreenFromGetDisplayMediaRN:ci.supportsGetDisplayMedia()?this.obtainScreenFromGetDisplayMedia:(ws.log("Screen sharing not supported on ",ci.getName()),null)},_getAudioConstraints(){const{audioQuality:e}=this.options;return null==e||!e.stereo||{autoGainControl:!1,channelCount:2,echoCancellation:!1,noiseSuppression:!1}},isSupported(){return null!==this.obtainStream},obtainScreenOnElectron(e,t){var n=this;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(window.JitsiMeetScreenObtainer&&window.JitsiMeetScreenObtainer.openDesktopPicker){const{desktopSharingFrameRate:r,desktopSharingResolution:o,desktopSharingSources:s}=this.options;window.JitsiMeetScreenObtainer.openDesktopPicker({desktopSharingSources:i.desktopSharingSources||s||["screen","window"]},(function(i,s){if(i){var a,d,c,l,h,u,p,m;let g=!1;if(arguments.length>2&&void 0!==arguments[2]&&arguments[2]){g={};const e=n._getAudioConstraints();"boolean"!=typeof e&&(g={optional:e}),"screen"===s&&(g.mandatory={chromeMediaSource:"desktop"})}const f={audio:g,video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:i,minFrameRate:null!==(a=null==r?void 0:r.min)&&void 0!==a?a:5,maxFrameRate:null!==(d=null==r?void 0:r.max)&&void 0!==d?d:5,minWidth:null==o||null===(c=o.width)||void 0===c?void 0:c.min,minHeight:null==o||null===(l=o.height)||void 0===l?void 0:l.min,maxWidth:null!==(h=null==o||null===(u=o.width)||void 0===u?void 0:u.max)&&void 0!==h?h:window.screen.width,maxHeight:null!==(p=null==o||null===(m=o.height)||void 0===m?void 0:m.max)&&void 0!==p?p:window.screen.height}}};navigator.mediaDevices.getUserMedia(f).then((t=>{n.setContentHint(t),e({stream:t,sourceId:i,sourceType:s})})).catch((e=>t(e)))}else t(new dr(Zi))}),(e=>t(new dr(zi,e))))}else t(new dr(Ki))},obtainScreenFromGetDisplayMedia(e,t){let n;n=navigator.getDisplayMedia?navigator.getDisplayMedia.bind(navigator):navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);const i=this._getAudioConstraints();let r={};const o={},{desktopSharingFrameRate:s,screenShareSettings:a}=this.options;"object"==typeof s&&(r.frameRate=s),r.frameRate&&delete r.frameRate.min,ci.isChromiumBased()&&(ci.isEngineVersionGreaterThan(93)&&(o.preferCurrentTab=(null==a?void 0:a.desktopPreferCurrentTab)||!1),ci.isEngineVersionGreaterThan(104)&&(o.systemAudio=(null==a?void 0:a.desktopSystemAudio)||"include"),ci.isEngineVersionGreaterThan(106)&&(o.surfaceSwitching=(null==a?void 0:a.desktopSurfaceSwitching)||"include"),ci.isEngineVersionGreaterThan(106)&&(null==a?void 0:a.desktopDisplaySurface)&&(r.displaySurface=null==a?void 0:a.desktopDisplaySurface),ci.isEngineVersionGreaterThan(111)&&(o.selfBrowserSurface=(null==a?void 0:a.desktopSelfBrowserSurface)||"exclude"),(null==s?void 0:s.max)>5||(r.height=99999,r.width=99999)),ci.isSafari()&&null!=a&&a.desktopDisplaySurface&&(r.displaySurface=null==a?void 0:a.desktopDisplaySurface),0===Object.keys(r).length&&(r=!0);const d={video:r,audio:i,...o,cursor:"always"};ws.info("Using getDisplayMedia for screen sharing",d),n(d).then((t=>{if(this.setContentHint(t),ci.isChromiumBased()){const e=t.getVideoTracks()[0];let n=5;"number"==typeof(null==s?void 0:s.min)&&s.min>0&&(n=s.min);const i={frameRate:{min:n}};try{e.applyConstraints(i)}catch(e){ws.warn(`Min fps=${n} constraint could not be applied on the desktop track,${e.message}`)}}e({stream:t,sourceId:t.id})})).catch((e=>{const n={errorName:e&&e.name,errorMsg:e&&e.message,errorStack:e&&e.stack};ws.error("getDisplayMedia error",JSON.stringify(d),JSON.stringify(n)),n.errorMsg&&-1!==n.errorMsg.indexOf("denied by system")?t(new dr(Yi)):t(new dr(Zi))}))},obtainScreenFromGetDisplayMediaRN(e,t){ws.info("Using getDisplayMedia for screen sharing"),navigator.mediaDevices.getDisplayMedia({video:!0}).then((t=>{this.setContentHint(t),e({stream:t,sourceId:t.id})})).catch((()=>{t(new dr(Zi))}))},setContentHint(e){const{desktopSharingFrameRate:t}=this.options,n=e.getVideoTracks()[0];"contentHint"in n?n.contentHint=(null==t?void 0:t.max)>5?"motion":"detail":ws.warn("MediaStreamTrack contentHint attribute not supported")},setDesktopSharingFrameRate(e){ws.info(`Setting the desktop capture rate to ${e}`),this.options.desktopSharingFrameRate={min:5,max:e}}};var Ps=n(310);let Ds;!function(e){e.AV1="av1",e.H264="h264",e.OPUS="opus",e.RED="red",e.ULPFEC="ulpfec",e.VP8="vp8",e.VP9="vp9"}(Ds||(Ds={}));const Os=(0,E.getLogger)("modules/sdp/SDPUtil.js"),ks={filterSpecialChars:e=>e?e.replace(/[\\\\\\/\\{,\\}\\+]/g,""):e,iceparams(e,t){let n,i,r=null;return(i=ks.findLine(e,"a=ice-ufrag:",t))&&(n=ks.findLine(e,"a=ice-pwd:",t))&&(r={ufrag:ks.parseICEUfrag(i),pwd:ks.parseICEPwd(n)}),r},parseICEUfrag:e=>e.substring(12),buildICEUfrag:e=>`a=ice-ufrag:${e}`,parseICEPwd:e=>e.substring(10),buildICEPwd:e=>`a=ice-pwd:${e}`,parseMID:e=>e.substring(6),parseMSIDAttribute(e){const t=e.find((e=>e.indexOf(" msid:")>0));if(!t)return;const n=t.substring(t.indexOf(" msid:")+6);return ks.filterSpecialChars(n)},parseMLine(e){const t={},n=e.substring(2).split(" ");return t.media=n.shift(),t.port=n.shift(),t.proto=n.shift(),""===n[n.length-1]&&n.pop(),t.fmt=n,t},buildMLine:e=>`m=${e.media} ${e.port} ${e.proto} ${e.fmt.join(" ")}`,parseRTPMap(e){const t={};let n=e.substring(9).split(" ");return t.id=n.shift(),n=n[0].split("/"),t.name=n.shift(),t.clockrate=n.shift(),t.channels=n.length?n.shift():"1",t},parseSCTPMap(e){const t=e.substring(10).split(" ");return[t[0],t[1],t.length>2?t[2]:null]},parseSCTPPort:e=>e.substring(12),buildRTPMap(e){let t=`a=rtpmap:${e.getAttribute("id")} ${e.getAttribute("name")}/${e.getAttribute("clockrate")}`;return e.getAttribute("channels")&&"1"!==e.getAttribute("channels")&&(t+=`/${e.getAttribute("channels")}`),t},parseCrypto(e){const t={},n=e.substring(9).split(" ");return t.tag=n.shift(),t["crypto-suite"]=n.shift(),t["key-params"]=n.shift(),n.length&&(t["session-params"]=n.join(" ")),t},parseFingerprint(e){const t={},n=e.substring(14).split(" ");return t.hash=n.shift(),t.fingerprint=n.shift(),t},parseFmtp(e){const t=[];let n=e.split(" ");n.shift(),n=n.join(" ").split(";");for(let e=0;ee.indexOf(" name:")>0));return null==t?void 0:t.substring(t.indexOf(" name:")+6)},parseVideoTypeLine(e){const t=" videoType:",n=e.find((e=>e.indexOf(t)>0));return null==n?void 0:n.substring(n.indexOf(t)+t.length)},parseRTCPFB(e){const t=e.substr(10).split(" "),n={};return n.pt=t.shift(),n.type=t.shift(),n.params=t,n},parseExtmap(e){const t=e.substr(9).split(" "),n={};return n.value=t.shift(),-1===n.value.indexOf("/")?n.direction="both":(n.direction=n.value.substr(n.value.indexOf("/")+1),n.value=n.value.substr(0,n.value.indexOf("/"))),n.uri=t.shift(),n.params=t,n},findLine(e,t,n){let i=e.split("\\r\\n");for(let e=0;ee.id)).filter(((e,t,n)=>n.indexOf(e)===t)).length,n=e.ssrcGroups&&e.ssrcGroups.length||0;if(t>1&&0===n)return;let i=null;if(1===t)i=e.ssrcs[0].id;else if(2===t){const t=e.ssrcGroups.find((e=>"FID"===e.semantics));t&&(i=t.ssrcs.split(" ")[0])}else if(t>=3){const t=e.ssrcGroups.find((e=>"SIM"===e.semantics));t&&(i=t.ssrcs.split(" ")[0])}return i},generateSsrc:()=>co().randomInt(1,4294967295),getSsrcAttribute(e,t,n){for(let i=0;ie.ssrcs.split(" ").map((e=>parseInt(e,10))),getMedia:(e,t)=>e.media.find((e=>e.type===t)),getUfrag(e){const t=e.split("\\n").filter((e=>e.startsWith("a=ice-ufrag:")));if(t.length>0)return t[0].substr("a=ice-ufrag:".length)},preferCodec(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!t)return;const i=e.rtp.filter((e=>e.codec&&e.codec.toLowerCase()===t.toLowerCase())).map((e=>e.payload));if(i){if(n&&t===Ds.H264){const t=i.filter((t=>{const n=e.fmtp.find((e=>e.payload===t));return!!n&&n.config.includes("packetization-mode=0")}));for(const e of t.reverse()){const t=i.findIndex((t=>t===e));t>=0&&(i.splice(t,1),i.unshift(e))}}const r=e.payloads.toString().split(" ").map((e=>parseInt(e,10)));for(const e of i.reverse()){const t=r.indexOf(e);r.splice(t,1),r.unshift(e)}e.payloads=r.join(" ")}else Os.error(`No matching RTP payload type found for ${t}, failed to set preferred codecs`)},stripCodec(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!t)return;const i=new Map;let r=[];for(const o of e.rtp)o.codec&&o.codec.toLowerCase()===t.toLowerCase()&&(n?i.set(o.payload,o.codec):r.push(o.payload));if(n&&(r=e.fmtp.filter((e=>{const t=i.get(e.payload);return!!t&&(t.toLowerCase()===Ds.VP9?!e.config.includes("profile-id=0"):!e.config.includes("profile-level-id=42"))})).map((e=>e.payload))),r.length>0){const t=r.map((e=>`apt=${e}`)),n=e.fmtp.filter((e=>-1!==t.indexOf(e.config)));r.push(...n.map((e=>e.payload)));const i=e.payloads.toString().split(" ").map(Number).filter((e=>-1===r.indexOf(e)));0===i.length?(e.port=0,e.direction=As.INACTIVE,e.payloads="*"):e.payloads=i.join(" "),e.rtp=e.rtp.filter((e=>-1!==i.indexOf(e.payload))),e.fmtp=e.fmtp.filter((e=>-1!==i.indexOf(e.payload))),e.rtcpFb&&(e.rtcpFb=e.rtcpFb.filter((e=>-1!==i.indexOf(e.payload))))}}},Ns=ks;function Ms(e){const t=e.split("\\r\\nm=");for(let e=1,n=t.length;et.type===e)));i.mid=t,i.direction=As.RECVONLY,i.msid=void 0,i.ssrcs=void 0,i.ssrcGroups=void 0,n.media=n.media.concat(i),n.groups.forEach((e=>{if("BUNDLE"===e.type){const n=e.mids.split(" ");n.push(t),e.mids=n.join(" ")}})),this.raw=Ps.write(n)},Ms.prototype.getMediaSsrcMap=function(){const e={};for(let t=0;t{const t=e.substring(7).split(" ")[0];n.ssrcs[t]||(n.ssrcs[t]={ssrc:t,lines:[]}),n.ssrcs[t].lines.push(e)})),Ns.findLines(this.media[t],"a=ssrc-group:").forEach((e=>{const t=e.indexOf(" "),i=e.substr(0,t).substr(13),r=e.substr(14+i.length).split(" ");r.length&&n.ssrcGroups.push({semantics:i,ssrcs:r})}))}return e},Ms.prototype.containsSSRC=function(e){const t=this.getMediaSsrcMap();let n=!1;return Object.keys(t).forEach((i=>{n||t[i].ssrcs[e]&&(n=!0)})),n},Ms.prototype.toJingle=function(e,t){Ns.findLines(this.session,"a=group:").forEach((t=>{const n=t.split(" "),i=n.shift().substr(8);e.c("group",{xmlns:"urn:xmpp:jingle:apps:grouping:0",semantics:i});for(let t=0;t{const n=t.indexOf(" "),i=t.substr(0,n).substr(13),r=t.substr(14+i.length).split(" ");r.length&&(e.c("ssrc-group",{semantics:i,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),r.forEach((t=>e.c("source",{ssrc:t}).up())),e.up())}))}const t=Ns.findLines(this.media[n],"a=rid:");if(t.length&&ci.usesRidsForSimulcast()){const i=t.map((e=>e.split(":")[1])).map((e=>e.split(" ")[0]));i.forEach((t=>{e.c("source",{rid:t,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),e.up()})),Ns.findLine(this.media[n],"a=simulcast:")&&(e.c("rid-group",{semantics:"SIM",xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),i.forEach((t=>{e.c("source",{rid:t}).up()})),e.up())}Ns.findLine(this.media[n],"a=rtcp-mux")&&e.c("rtcp-mux").up(),this.rtcpFbToJingle(n,e,"*");const o=Ns.findLines(this.media[n],"a=extmap:",this.session);for(let t=0;t2?t.attrs({streams:e[2]}):t.attrs({streams:0}),t.up()}Ns.findLines(this.media[e],"a=fingerprint:",this.session).forEach((n=>{const i=Ns.parseFingerprint(n);i.xmlns="urn:xmpp:jingle:apps:dtls:0",t.c("fingerprint").t(i.fingerprint),delete i.fingerprint;const r=Ns.findLine(this.media[e],"a=setup:",this.session);r&&(i.setup=r.substr(8)),t.attrs(i),t.up()}));const r=Ns.iceparams(this.media[e],this.session);r&&(r.xmlns="urn:xmpp:jingle:transports:ice-udp:1",t.attrs(r),Ns.findLines(this.media[e],"a=candidate:",this.session).forEach((e=>{const n=Ns.candidateToJingle(e);this.failICE&&(n.ip="1.1.1.1");const i=n&&"string"==typeof n.protocol?n.protocol.toLowerCase():"";this.removeTcpCandidates&&("tcp"===i||"ssltcp"===i)||this.removeUdpCandidates&&"udp"===i||t.c("candidate",n).up()}))),t.up()},Ms.prototype.rtcpFbToJingle=function(e,t,n){Ns.findLines(this.media[e],`a=rtcp-fb:${n}`).forEach((e=>{const n=Ns.parseRTCPFB(e);"trr-int"===n.type?(t.c("rtcp-fb-trr-int",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",value:n.params[0]}),t.up()):(t.c("rtcp-fb",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",type:n.type}),n.params.length>0&&t.attrs({subtype:n.params[0]}),t.up())}))},Ms.prototype.rtcpFbFromJingle=function(e,t){let n="";const i=e.find(\'>rtcp-fb-trr-int[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]\');return i.length&&(n+="a=rtcp-fb:* trr-int ",i.attr("value")?n+=i.attr("value"):n+="0",n+="\\r\\n"),e.find(\'>rtcp-fb[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]\').each(((e,i)=>{n+=`a=rtcp-fb:${t} ${i.getAttribute("type")}`,i.hasAttribute("subtype")&&(n+=` ${i.getAttribute("subtype")}`),n+="\\r\\n"})),n},Ms.prototype.fromJingle=function(e){const t=Date.now();this.raw=`v=0\\r\\no=- ${t} 2 IN IP4 0.0.0.0\\r\\ns=-\\r\\nt=0 0\\r\\n`;const n=_t()(e).find(\'>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]\');n.length&&n.each(((e,t)=>{const n=_t()(t).find(">content").map(((e,t)=>t.getAttribute("name"))).get();n.length>0&&(this.raw+=`a=group:${t.getAttribute("semantics")||t.getAttribute("type")} ${n.join(" ")}\\r\\n`)})),this.session=this.raw,e.find(">content").each(((e,t)=>{const n=this.jingle2media(_t()(t));this.media.push(n)})),this.raw=this.session+this.media.join("")},Ms.prototype.jingle2media=function(e){const t=e.find(">description"),n=e.find(\'>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]\');let i="";const r=n.find(\'>sctpmap[xmlns="urn:xmpp:jingle:transports:dtls-sctp:1"]\'),o={media:t.attr("media"),port:"9"};switch("rejected"===e.attr("senders")&&(o.port="0"),n.find(\'>fingerprint[xmlns="urn:xmpp:jingle:apps:dtls:0"]\').length?o.proto=r.length?"UDP/DTLS/SCTP":"UDP/TLS/RTP/SAVPF":o.proto="UDP/TLS/RTP/SAVPF",r.length?(i+=`m=application ${o.port} UDP/DTLS/SCTP webrtc-datachannel\\r\\n`,i+=`a=sctp-port:${r.attr("number")}\\r\\n`,i+="a=max-message-size:262144\\r\\n"):(o.fmt=t.find(">payload-type").map(((e,t)=>t.getAttribute("id"))).get(),i+=`${Ns.buildMLine(o)}\\r\\n`),i+="c=IN IP4 0.0.0.0\\r\\n",r.length||(i+="a=rtcp:1 IN IP4 0.0.0.0\\r\\n"),n.length&&(n.attr("ufrag")&&(i+=`${Ns.buildICEUfrag(n.attr("ufrag"))}\\r\\n`),n.attr("pwd")&&(i+=`${Ns.buildICEPwd(n.attr("pwd"))}\\r\\n`),n.find(\'>fingerprint[xmlns="urn:xmpp:jingle:apps:dtls:0"]\').each(((e,t)=>{i+=`a=fingerprint:${t.getAttribute("hash")}`,i+=` ${_t()(t).text()}`,i+="\\r\\n",t.hasAttribute("setup")&&(i+=`a=setup:${t.getAttribute("setup")}\\r\\n`)}))),n.find(">candidate").each(((e,t)=>{let n=t.getAttribute("protocol");n="string"==typeof n?n.toLowerCase():"",this.removeTcpCandidates&&("tcp"===n||"ssltcp"===n)||this.removeUdpCandidates&&"udp"===n||(this.failICE&&t.setAttribute("ip","1.1.1.1"),i+=Ns.candidateFromJingle(t))})),e.attr("senders")){case"initiator":i+=`a=${As.SENDONLY}\\r\\n`;break;case"responder":i+=`a=${As.RECVONLY}\\r\\n`;break;case"none":i+=`a=${As.INACTIVE}\\r\\n`;break;case"both":i+=`a=${As.SENDRECV}\\r\\n`}i+=`a=mid:${e.attr("name")}\\r\\n`,t.find(">rtcp-mux").length&&(i+="a=rtcp-mux\\r\\n"),t.find(">payload-type").each(((e,t)=>{i+=`${Ns.buildRTPMap(t)}\\r\\n`,_t()(t).find(">parameter").length&&(i+=`a=fmtp:${t.getAttribute("id")} `,i+=_t()(t).find(">parameter").map(((e,t)=>{const n=t.getAttribute("name");return(n?`${n}=`:"")+t.getAttribute("value")})).get().join(";"),i+="\\r\\n"),i+=this.rtcpFbFromJingle(_t()(t),t.getAttribute("id"))})),i+=this.rtcpFbFromJingle(t,"*"),t.find(\'>rtp-hdrext[xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"]\').each(((e,t)=>{i+=`a=extmap:${t.getAttribute("id")} ${t.getAttribute("uri")}\\r\\n`})),t.find(\'>extmap-allow-mixed[xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"]\').length>0&&(i+="a=extmap-allow-mixed\\r\\n"),t.find(\'>ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each(((e,t)=>{const n=t.getAttribute("semantics"),r=_t()(t).find(">source").map(((e,t)=>t.getAttribute("ssrc"))).get();r.length&&(i+=`a=ssrc-group:${n} ${r.join(" ")}\\r\\n`)}));let s="",a="";return t.find(\'>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each(((e,t)=>{const n=t.getAttribute("ssrc");let i=!0,r="";_t()(t).find(">parameter").each(((e,t)=>{var o;const s=t.getAttribute("name");let a=t.getAttribute("value");a=Ns.filterSpecialChars(a),r+=`a=ssrc:${n} ${s}`,a&&a.length&&(r+=`:${a}`),r+="\\r\\n",null!==(o=a)&&void 0!==o&&o.includes("mixedmslabel")&&(i=!1)})),i?s+=r:a+=r})),i+=a+s,i},Fs.prototype.getNewMedia=function(){const e=this.mySDP.getMediaSsrcMap(),t=this.otherSDP.getMediaSsrcMap(),n={};return Object.keys(t).forEach((i=>{const r=e[i],o=t[i];r||!o?(Object.keys(o.ssrcs).forEach((e=>{(-1===Object.keys(r.ssrcs).indexOf(e)||o.ssrcs[e].lines&&r.ssrcs[e].lines&&void 0!==r.ssrcs[e].lines.find((e=>-1!==e.indexOf("msid")))!=(void 0!==o.ssrcs[e].lines.find((e=>-1!==e.indexOf("msid")))))&&(n[i]||(n[i]={mediaindex:o.mediaindex,mid:o.mid,ssrcs:{},ssrcGroups:[]}),n[i].ssrcs[e]=o.ssrcs[e])})),o.ssrcGroups.forEach((e=>{let t=!1;for(let n=0;n{n=!0;const r=t[i];e.c("content",{name:r.mid}),e.c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:r.mid}),Object.keys(r.ssrcs).forEach((t=>{const n=r.ssrcs[t],i=n.lines,o=Ns.parseSourceNameLine(i),s=Ns.parseVideoTypeLine(i);e.c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),e.attrs({name:o,videoType:s,ssrc:n.ssrc});const a=Ns.parseMSIDAttribute(i);a&&(e.c("parameter"),e.attrs({name:"msid"}),e.attrs({value:a}),e.up()),e.up()})),r.ssrcGroups.forEach((t=>{t.ssrcs.length&&(e.c("ssrc-group",{semantics:t.semantics,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}),t.ssrcs.forEach((t=>{e.c("source",{ssrc:t}).up()})),e.up())})),e.up(),e.up()})),n};var Vs,Us="function"==typeof queueMicrotask&&queueMicrotask,Hs="function"==typeof setImmediate&&setImmediate,$s="object"==typeof process&&"function"==typeof process.nextTick;Vs=Us?queueMicrotask:Hs?setImmediate:$s?process.nextTick:function(e){setTimeout(e,0)};const Js=(Bs=Vs,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;ie(...n)))});var Bs;class qs{constructor(){this.head=this.tail=null,this.length=0}removeLink(e){return e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=e.next=null,this.length-=1,e}empty(){for(;this.head;)this.shift();return this}insertAfter(e,t){t.prev=e,t.next=e.next,e.next?e.next.prev=t:this.tail=t,e.next=t,this.length+=1}insertBefore(e,t){t.prev=e.prev,t.next=e,e.prev?e.prev.next=t:this.head=t,e.prev=t,this.length+=1}unshift(e){this.head?this.insertBefore(this.head,e):Gs(this,e)}push(e){this.tail?this.insertAfter(this.tail,e):Gs(this,e)}shift(){return this.head&&this.removeLink(this.head)}pop(){return this.tail&&this.removeLink(this.tail)}toArray(){return[...this]}*[Symbol.iterator](){for(var e=this.head;e;)yield e.data,e=e.next}remove(e){for(var t=this.head;t;){var{next:n}=t;e(t)&&this.removeLink(t),t=n}return this}}function Gs(e,t){e.length=1,e.head=e.tail=t}function zs(e,t){return e.then((e=>{Ks(t,null,e)}),(e=>{Ks(t,e&&e.message?e:new Error(e))}))}function Ks(e,t,n){try{e(t,n)}catch(e){Js((e=>{throw e}),e)}}function Ws(e){return"AsyncFunction"===e[Symbol.toStringTag]}const Xs=function(e){if("function"!=typeof e)throw new Error("expected a function");return Ws(e)?Ws(t=e)?function(){for(var e=arguments.length,n=new Array(e),i=0;ie!==t))):s[e]=[]:Object.keys(s).forEach((e=>s[e]=[]))}function d(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;ie(...n)))}var c=!1;function l(e,t,n,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");var r,o;function s(e){if(e)return n?o(e):r();for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s{c=!1,g.process()}))),n||!i)return new Promise(((e,t)=>{r=e,o=t}))}function h(e){return function(t){r-=1;for(var n=arguments.length,i=new Array(n>1?n-1:0),s=1;s0&&o.splice(h,1),l.callback(t,...i),null!=t&&d("error",t,l.data)}r<=g.concurrency-g.buffer&&d("unsaturated"),g.idle()&&d("drain"),g.process()}}function u(e){return!(0!==e.length||!g.idle()||(Js((()=>d("drain"))),0))}const p=e=>t=>{if(!t)return new Promise(((t,n)=>{!function(e,i){const r=function(){a(e,r),((e,i)=>{if(e)return n(e);t(i)})(...arguments)};s[e].push(r)}(e)}));a(e),function(e,t){s[e].push(t)}(e,t)};var m=!1,g={_tasks:new qs,_createTaskItem:(e,t)=>({data:e,callback:t}),*[Symbol.iterator](){yield*g._tasks[Symbol.iterator]()},concurrency:t,payload:n,buffer:t/4,started:!1,paused:!1,push(e,t){if(Array.isArray(e)){if(u(e))return;return e.map((e=>l(e,!1,!1,t)))}return l(e,!1,!1,t)},pushAsync(e,t){if(Array.isArray(e)){if(u(e))return;return e.map((e=>l(e,!1,!0,t)))}return l(e,!1,!0,t)},kill(){a(),g._tasks.empty()},unshift(e,t){if(Array.isArray(e)){if(u(e))return;return e.map((e=>l(e,!0,!1,t)))}return l(e,!0,!1,t)},unshiftAsync(e,t){if(Array.isArray(e)){if(u(e))return;return e.map((e=>l(e,!0,!0,t)))}return l(e,!0,!0,t)},remove(e){g._tasks.remove(e)},process(){if(!m){for(m=!0;!g.paused&&rg._tasks.length,running:()=>r,workersList:()=>o,idle:()=>g._tasks.length+r===0,pause(){g.paused=!0},resume(){!1!==g.paused&&(g.paused=!1,Js(g.process))}};return Object.defineProperties(g,{saturated:{writable:!1,value:p("saturated")},unsaturated:{writable:!1,value:p("unsaturated")},empty:{writable:!1,value:p("empty")},drain:{writable:!1,value:p("drain")},error:{writable:!1,value:p("error")}}),g}const Qs=(0,E.getLogger)("modules/util/AsyncQueue.js");class Zs extends Error{constructor(e){super(e),this.name="ClearedQueueError"}}class ea{constructor(){var e,t;this._queue=(e=this._processQueueTasks.bind(this),1,t=Xs(e),Ys(((e,n)=>{t(e[0],n)}),1,1)),this._stopped=!1,this._taskCallbacks=new Map}clear(){for(const e of this._taskCallbacks.values())try{null==e||e(new Zs("The queue has been cleared"))}catch(e){Qs.error("Error in callback while clearing the queue:",e)}this._queue.kill()}_processQueueTasks(e,t){try{e(t)}catch(e){Qs.error(`Task failed: ${null==e?void 0:e.stack}`),t(e)}finally{this._taskCallbacks.delete(e)}}pause(){this._queue.pause()}push(e,t){this._stopped?t&&t(new Error("The queue has been stopped")):(this._taskCallbacks.set(e,t),this._queue.push(e,t))}resume(){this._queue.resume()}shutdown(){this._stopped=!0}}let ta;!function(e){e.PENDING="pending",e.ACTIVE="active",e.ENDED="ended"}(ta||(ta={}));const na=ta.PENDING,ia=ta.ACTIVE,ra=ta.ENDED,oa=(0,E.getLogger)("modules/xmpp/JingleSession.js");class sa extends xr{constructor(e,t,n,i,r,o,s){super(),this.sid=e,this.localJid=t,this.remoteJid=n,this.connection=i,this.mediaConstraints=r,this.pcConfig=o,this.isInitiator=s,this.usedrip=!0,this.dripContainer=[],this.room=null,this._signalingLayer=null,this.state=null,this.rtc=null}get initiatorJid(){return this.isInitiator?this.localJid:this.remoteJid}get responderJid(){return this.isInitiator?this.remoteJid:this.localJid}initialize(e,t,n,i){if(null!==this.state){const e=`attempt to initiate on session ${this.sid}\\n in state ${this.state}`;throw oa.error(e),new Error(e)}this.room=e,this.rtc=t,this._signalingLayer=n,this.state=na,this.doInitialize(i)}doInitialize(e){}addIceCandidates(e){}getState(){return this.state}addSources(e){}removeSources(e){}terminate(e,t,n){}acceptOffer(e,t,n){}}var aa;!function(e){e.REMOTE_SOURCE_CONSTRAINTS_CHANGED="media_session.REMOTE_SOURCE_CONSTRAINTS_CHANGED"}(aa||(aa={}));const da=aa,ca=(0,E.getLogger)("modules/xmpp/JingleSessionPC.js"),la=1e4;function ha(e,t,n,i){e.c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",ssrc:n,name:t.source}).c("parameter",{name:"msid",value:i}).up().c("ssrc-info",{xmlns:"http://jitsi.org/jitmeet",owner:t.owner}).up().up()}class ua extends sa{static parseVideoSenders(e){const t=e.find(\'>content[name="video"]\');if(t.length){const e=t[0].getAttribute("senders");if("both"===e||"initiator"===e||"responder"===e||"none"===e)return e}return null}static parseSourceMaxFrameHeight(e){const t=[],n=e.find(\'>content[name="video"]>source-frame-height\');let i,r;return n.length?(n.each(((e,n)=>{r=n.getAttribute("sourceName"),i=n.getAttribute("maxHeight"),t.push({maxHeight:i,sourceName:r})})),t):null}constructor(e,t,n,i,r,o,s,a){super(e,t,n,i,r,o,a),this._bridgeSessionId=null,this._cachedOldLocalSdp=void 0,this._cachedNewLocalSdp=void 0,this._iceCheckingStartedTimestamp=null,this._gatheringStartedTimestamp=null,this._sourceReceiverConstraints=void 0,this._localSendReceiveVideoActive=!0,this._remoteSendReceiveVideoActive=!0,this._gatheringReported=!1,this.lasticecandidate=!1,this.closed=!1,this.isP2P=s,this.remoteRecvMaxFrameHeight=void 0,this.numRemoteVideoSources=0,this.numRemoteAudioSources=0,this.remoteSourceMaxFrameHeights=void 0,this.modificationQueue=new ea,this.modificationQueue.pause(),this.wasConnected=!1,this.establishmentDuration=void 0,this._xmppListeners=[],this._xmppListeners.push(i.addCancellableListener(Lo.Events.CONN_STATUS_CHANGED,this.onXmppStatusChanged.bind(this))),this._removeSenderVideoConstraintsChangeListener=void 0}_assertNotEnded(){return this.state!==ra}doInitialize(e){this.failICE=Boolean(e.failICE),this.lasticecandidate=!1,this.options=e,this.isReconnect=!1,this.wasstable=!1,this.webrtcIceUdpDisable=Boolean(e.webrtcIceUdpDisable),this.webrtcIceTcpDisable=Boolean(e.webrtcIceTcpDisable);const t={disableRtx:e.disableRtx};if(e.gatherStats&&(t.maxstats=300),t.capScreenshareBitrate=!1,t.codecSettings=e.codecSettings,t.enableInsertableStreams=e.enableInsertableStreams,e.videoQuality){const n=Object.entries(e.videoQuality).map((e=>(e[0]=e[0].toLowerCase(),e)));t.videoQuality=Object.fromEntries(n)}var n;t.forceTurnRelay=e.forceTurnRelay,t.audioQuality=e.audioQuality,t.disableSimulcast=!!this.isP2P||e.disableSimulcast,this.isP2P||(t.capScreenshareBitrate=!((null===(n=e.desktopSharingFrameRate)||void 0===n?void 0:n.max)>5)),e.startSilent&&(t.startSilent=!0),this.peerconnection=this.rtc.createPeerConnection(this._signalingLayer,this.pcConfig,this.isP2P,t),this.peerconnection.onicecandidate=e=>{if(!e)return;const t=e.candidate,n=window.performance.now();if(t){null===this._gatheringStartedTimestamp&&(this._gatheringStartedTimestamp=n);let e=t.protocol;if("string"==typeof e)if(e=e.toLowerCase(),"tcp"===e||"ssltcp"===e){if(this.webrtcIceTcpDisable)return}else if("udp"===e&&this.webrtcIceUdpDisable)return}else this._gatheringReported||(Mi.sendAnalytics(Qt,{phase:"gathering",value:n-this._gatheringStartedTimestamp,p2p:this.isP2P,initiator:this.isInitiator}),this._gatheringReported=!0);this.isP2P&&this.sendIceCandidate(t)},this.peerconnection.onsignalingstatechange=()=>{"stable"===this.peerconnection.signalingState?this.wasstable=!0:"closed"!==this.peerconnection.signalingState&&"closed"!==this.peerconnection.connectionState||this.room.eventEmitter.emit(Hi.XMPPEvents.SUSPEND_DETECTED,this)},this.peerconnection.oniceconnectionstatechange=()=>{const e=window.performance.now();let t=!1;switch(this.isP2P||(this.room.connectionTimes[`ice.state.${this.peerconnection.iceConnectionState}`]=e),ca.log(`(TIME) ICE ${this.peerconnection.iceConnectionState} ${this.isP2P?"P2P":"JVB"}:\\t`,e),Mi.sendAnalytics(en,{p2p:this.isP2P,state:this.peerconnection.iceConnectionState,signaling_state:this.peerconnection.signalingState,reconnect:this.isReconnect,value:e}),this.room.eventEmitter.emit(Hi.XMPPEvents.ICE_CONNECTION_STATE_CHANGED,this,this.peerconnection.iceConnectionState),this.peerconnection.iceConnectionState){case"checking":this._iceCheckingStartedTimestamp=e;break;case"connected":if("stable"===this.peerconnection.signalingState){t=!0;const e=!this.options.enableIceRestart&&this.room.supportsRestartByTerminate();(this.isReconnect||e)&&this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_RESTORED,this)}if(!this.wasConnected&&(this.wasstable||t||this.isInitiator&&(ci.isChromiumBased()||ci.isReactNative()))){Mi.sendAnalytics(Qt,{phase:"checking",value:e-this._iceCheckingStartedTimestamp,p2p:this.isP2P,initiator:this.isInitiator});const t=Math.min(this._iceCheckingStartedTimestamp,this._gatheringStartedTimestamp);this.establishmentDuration=e-t,Mi.sendAnalytics(Qt,{phase:"establishment",value:this.establishmentDuration,p2p:this.isP2P,initiator:this.isInitiator}),this.wasConnected=!0,this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_ESTABLISHED,this)}this.isReconnect=!1;break;case"disconnected":this.isReconnect=!0,this.wasstable&&this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_INTERRUPTED,this);break;case"failed":this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_ICE_FAILED,this)}},this.peerconnection.onconnectionstatechange=()=>{const e=this.peerconnection.iceConnectionState;"failed"===this.peerconnection.connectionState&&"disconnected"===e&&this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_ICE_FAILED,this)},this.peerconnection.onnegotiationneeded=()=>{const e=this.peerconnection.signalingState,t=this.peerconnection.remoteDescription;if(!this.isP2P&&"stable"===e&&t&&"string"==typeof t.sdp){ca.info(`${this} onnegotiationneeded fired on ${this.peerconnection}`);const e=e=>{this._renegotiate().then((()=>this.peerconnection.configureAudioSenderEncodings())).then((()=>e()),(t=>e(t)))};this.modificationQueue.push(e,(e=>{e?ca.error(`${this} onnegotiationneeded error`,e):ca.debug(`${this} onnegotiationneeded executed - OK`)}))}}}getRemoteRecvMaxFrameHeight(){if(this.isP2P)return this.remoteRecvMaxFrameHeight}getRemoteSourcesRecvMaxFrameHeight(){if(this.isP2P)return this.remoteSourceMaxFrameHeights}sendIceCandidate(e){const t=new Ms(this.peerconnection.localDescription.sdp);if(e&&e.candidate.length&&!this.lasticecandidate){const n=Ns.iceparams(t.media[e.sdpMLineIndex],t.session),i=Ns.candidateToJingle(e.candidate);if(!n||!i)return void ca.error("failed to get ice && jcand");n.xmlns="urn:xmpp:jingle:transports:ice-udp:1",this.usedrip?(0===this.dripContainer.length&&setTimeout((()=>{0!==this.dripContainer.length&&(this.sendIceCandidates(this.dripContainer),this.dripContainer=[])}),150),this.dripContainer.push(e)):this.sendIceCandidates([e])}else ca.log(`${this} sendIceCandidate: last candidate`),this.lasticecandidate=!0}sendIceCandidates(e){if(!this._assertNotEnded("sendIceCandidates"))return;ca.log(`${this} sendIceCandidates ${JSON.stringify(e)}`);const t=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-info",initiator:this.initiatorJid,sid:this.sid}),n=new Ms(this.peerconnection.localDescription.sdp);for(let i=0;ie.sdpMLineIndex===i)),o=Ns.parseMLine(n.media[i].split("\\r\\n")[0]);if(r.length>0){const e=Ns.iceparams(n.media[i],n.session);e.xmlns="urn:xmpp:jingle:transports:ice-udp:1",t.c("content",{creator:this.initiatorJid===this.localJid?"initiator":"responder",name:r[0].sdpMid?r[0].sdpMid:o.media}).c("transport",e);for(let e=0;econtent>transport>candidate").each(((e,n)=>{let i=Ns.candidateFromJingle(n);i=i.replace("\\r\\n","").replace("a=","");const r=new RTCIceCandidate({sdpMLineIndex:0,sdpMid:"",candidate:i});t.push(r)})),t.length?(ca.debug(`${this} Queued add (${t.length}) ICE candidates task`),this.modificationQueue.push((e=>{for(const e of t)this.peerconnection.addIceCandidate(e).then((()=>ca.debug(`${this} addIceCandidate ok!`)),(e=>ca.error(`${this} addIceCandidate failed!`,e)));e(),ca.debug(`${this} ICE candidates task finished`)}))):ca.error(`${this} No ICE candidates to add ?`,e[0]&&e[0].outerHTML)}readSsrcInfo(e){_t()(e).find(\'>description>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each(((e,t)=>{const n=Number(t.getAttribute("ssrc"));let i;t.hasAttribute("name")&&(i=t.getAttribute("name")),this.isP2P?this._signalingLayer.setSSRCOwner(n,St.Strophe.getResourceFromJid(this.remoteJid),i):_t()(t).find(\'>ssrc-info[xmlns="http://jitsi.org/jitmeet"]\').each(((e,t)=>{const r=t.getAttribute("owner");var o;null!=r&&r.length&&(isNaN(n)||n<0?ca.warn(`${this} Invalid SSRC ${n} value received for ${r}`):this._signalingLayer.setSSRCOwner(n,(o=r,St.Strophe.getResourceFromJid(o)||o),i))}))}))}acceptOffer(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];this.setOfferAnswerCycle(e,(()=>{this.sendSessionAccept((()=>{ca.debug(`${this} Resuming the modification queue after session is established!`),this.modificationQueue.resume(),t(),this.room.eventEmitter.emit(Hi.XMPPEvents.SESSION_ACCEPT,this);const e=i.filter((e=>e.getType()===Ri.VIDEO));e.length&&e.splice(0,1),e.length&&this.addTracks(e)}),(e=>{n(e),this.room.eventEmitter.emit(Hi.XMPPEvents.SESSION_ACCEPT_ERROR,this,e)}))}),n,i)}invite(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(!this.isInitiator)throw new Error("Trying to invite from the responder session");ca.debug(`${this} Executing invite task`);const t=[];for(const n of e)t.push(this.peerconnection.addTrack(n,this.isInitiator));Promise.all(t).then((()=>this.peerconnection.createOffer(this.mediaConstraints))).then((e=>this.peerconnection.setLocalDescription(e))).then((()=>{this.peerconnection.processLocalSdpForTransceiverInfo(e),this.sendSessionInitiate(this.peerconnection.localDescription.sdp)})).then((()=>{ca.debug(`${this} invite executed - OK`)})).catch((e=>{ca.error(`${this} invite error`,e)}))}sendSessionInitiate(e){let t=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-initiate",initiator:this.initiatorJid,sid:this.sid});new Ms(e).toJingle(t,this.isInitiator?"initiator":"responder"),t=t.tree(),ca.debug(`${this} Session-initiate: `,t),this.connection.sendIQ(t,(()=>{ca.info(`${this} Got RESULT for "session-initiate"`)}),(e=>{ca.error(`${this} "session-initiate" error`,e)}),la)}setAnswer(e){if(!this.isInitiator)throw new Error("Trying to set an answer on the responder session");ca.debug(`${this} Executing setAnswer task`);const t=this._processNewJingleOfferIq(e),n=new Ms(this.peerconnection.localDescription.sdp),i=new RTCSessionDescription({type:"answer",sdp:t.raw});this.peerconnection.setRemoteDescription(i).then((()=>{if(this.state===na){this.state=ia,ca.debug(`${this} Resuming the modification queue after session is established!`),this.modificationQueue.resume();const e=new Ms(this.peerconnection.localDescription.sdp);this.sendContentModify(),this.notifyMySSRCUpdate(n,e)}})).then((()=>{ca.debug(`${this} setAnswer task done`)})).catch((e=>{ca.error(`${this} setAnswer task failed: ${e}`)}))}setOfferAnswerCycle(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];ca.debug(`${this} Executing setOfferAnswerCycle task`);const r=[],o=i.filter((e=>e.getType()===Ri.AUDIO)),s=i.filter((e=>e.getType()===Ri.VIDEO));let a=i;s.length>1&&(a=[...o,s[0]]);for(const e of a)r.push(this.peerconnection.addTrack(e,this.isInitiator));const d=this._processNewJingleOfferIq(e),c=_t()(e).find(\'>bridge-session[xmlns="http://jitsi.org/protocol/focus"]\').attr("id");c!==this._bridgeSessionId&&(this._bridgeSessionId=c),Promise.all(r).then((()=>this._renegotiate(d.raw))).then((()=>{this.peerconnection.processLocalSdpForTransceiverInfo(a),this.state===na&&(this.state=ia,!this.isP2P||this._localSendReceiveVideoActive&&!this._sourceReceiverConstraints||this.sendContentModify())})).then((()=>{ca.debug(`${this} setOfferAnswerCycle task done`),t()})).catch((e=>{ca.error(`${this} setOfferAnswerCycle task failed: ${e}`),n(e)}))}setVideoCodecs(e){if(this._assertNotEnded()){ca.info(`${this} setVideoCodecs: ${e}`),this.peerconnection.setVideoCodecs(e);const t=e=>{this._renegotiate().then((()=>this.peerconnection.configureVideoSenderEncodings())).then((()=>(ca.debug(`${this} setVideoCodecs task is done`),e())),(t=>(ca.error(`${this} setVideoCodecs task failed: ${t}`),e(t))))};ca.debug(`${this} Queued setVideoCodecs task`),this.modificationQueue.push(t)}}replaceTransport(e,t,n){if(this.options.enableForcedReload){const e=new Ms(this.peerconnection.localDescription.sdp);return this.sendTransportAccept(e,t,n),void this.room.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_RESTARTED,this)}this.room.eventEmitter.emit(Hi.XMPPEvents.ICE_RESTARTING,this);const i=e.clone();e.find(">content[name=\'data\']").attr("senders","rejected"),e.find(">content>description>source").remove(),e.find(">content>description>ssrc-group").remove();const r=e.find(">content>transport>fingerprint");r.attr("hash","sha-1"),r.text("00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"),ca.debug(`${this} Queued ICE restart task`),this.modificationQueue.push((r=>{this.setOfferAnswerCycle(e,(()=>{this.setOfferAnswerCycle(i,(()=>{const e=new Ms(this.peerconnection.localDescription.sdp);"number"==typeof this.options.channelLastN&&this.options.channelLastN>=0&&(e.initialLastN=this.options.channelLastN),this.sendTransportAccept(e,t,n),this.room.eventEmitter.emit(Hi.XMPPEvents.ICE_RESTART_SUCCESS,this,i),r()}),(e=>r(e)))}),(e=>r(e)))}),(e=>{if(e){if(e instanceof Zs)return ca.debug(`${this} ICE restart task aborted: session terminated`),void t();ca.error(`${this} ICE restart task failed: ${e}`),n(e)}else ca.debug(`${this} ICE restart task done`),t()}))}sendSessionAccept(e,t){const n=new Ms(this.peerconnection.localDescription.sdp),i=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:this.initiatorJid,responder:this.responderJid,sid:this.sid});this.webrtcIceTcpDisable&&(n.removeTcpCandidates=!0),this.webrtcIceUdpDisable&&(n.removeUdpCandidates=!0),this.failICE&&(n.failICE=!0),"number"==typeof this.options.channelLastN&&this.options.channelLastN>=0&&(n.initialLastN=this.options.channelLastN),n.toJingle(i,this.initiatorJid===this.localJid?"initiator":"responder"),ca.info(`${this} Sending session-accept`),ca.debug(i.tree()),this.connection.sendIQ(i,e,this.newJingleErrorHandler(i,(e=>{t(e),this.room.eventEmitter.emit(Hi.XMPPEvents.SESSION_ACCEPT_TIMEOUT,this)})),la)}sendContentModify(){const e=this._localSendReceiveVideoActive?"both":"none",t=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"content-modify",initiator:this.initiatorJid,sid:this.sid}).c("content",{name:Ri.VIDEO,senders:e});void 0!==this._sourceReceiverConstraints&&this._sourceReceiverConstraints.forEach(((e,n)=>{t.c("source-frame-height",{xmlns:"http://jitsi.org/jitmeet/video"}).attrs({sourceName:n,maxHeight:e}),t.up(),ca.info(`${this} sending content-modify for source-name: ${n}, maxHeight: ${e}`)})),ca.debug(t.tree()),this.connection.sendIQ(t,null,this.newJingleErrorHandler(t),la)}setReceiverVideoConstraint(e){ca.info(`${this} setReceiverVideoConstraint - constraints: ${JSON.stringify(e)}`),this._sourceReceiverConstraints=e,this.isP2P&&this.state===ia&&this.sendContentModify()}sendTransportAccept(e,t,n){const i=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-accept",initiator:this.initiatorJid,sid:this.sid});e.media.forEach(((t,n)=>{const r=Ns.parseMLine(t.split("\\r\\n")[0]);i.c("content",{creator:this.initiatorJid===this.localJid?"initiator":"responder",name:r.media}),e.transportToJingle(n,i),i.up()})),ca.info(`${this} Sending transport-accept`),ca.debug(i.tree()),this.connection.sendIQ(i,t,this.newJingleErrorHandler(i,n),la)}sendTransportReject(e,t){const n=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-reject",initiator:this.initiatorJid,sid:this.sid});ca.info(`${this} Sending \'transport-reject\'`),ca.debug(n.tree()),this.connection.sendIQ(n,e,this.newJingleErrorHandler(n,t),la)}setSenderVideoConstraint(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(this._assertNotEnded()){ca.info(`${this} setSenderVideoConstraint: ${e}, sourceName: ${t}`);const n=t?this.rtc.getLocalVideoTracks().find((e=>e.getSourceName()===t)):this.rtc.getLocalVideoTrack();return this.peerconnection.setSenderVideoConstraints(e,n)}return Promise.resolve()}terminate(e,t,n){if(this.state!==ra){if(!n||Boolean(n.sendSessionTerminate)){const i=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-terminate",initiator:this.initiatorJid,sid:this.sid}).c("reason").c(n&&n.reason||"success").up();n&&n.reasonDescription?i.c("text").t(n.reasonDescription).up().up():i.up(),this._bridgeSessionId&&i.c("bridge-session",{xmlns:"http://jitsi.org/protocol/focus",id:this._bridgeSessionId,restart:n&&!0===n.requestRestart}).up(),ca.info(`${this} Sending session-terminate`),ca.debug(i.tree()),this.connection.sendIQ(i,e,this.newJingleErrorHandler(i,t),la)}else ca.info(`${this} Skipped sending session-terminate`);this.connection.jingle.terminate(this.sid)}}onTerminated(e,t){ca.info(`${this} Session terminated`,e,t),this._xmppListeners.forEach((e=>e())),this._xmppListeners=[],this._removeSenderVideoConstraintsChangeListener&&this._removeSenderVideoConstraintsChangeListener(),Ai.isSsrcRewritingSupported()&&this.peerconnection&&this.peerconnection.getRemoteTracks().forEach((e=>{this.room.eventEmitter.emit(bt.TRACK_REMOVED,e)})),this.close()}onXmppStatusChanged(e){e===Lo.Status.CONNECTED&&this._cachedOldLocalSdp&&(ca.info(`${this} Sending SSRC update on reconnect`),this.notifyMySSRCUpdate(this._cachedOldLocalSdp,this._cachedNewLocalSdp))}_parseSsrcInfoFromSourceAdd(e,t){const n=[],i=this;return _t()(e).each(((e,r)=>{const o=_t()(r).attr("name");let s="";_t()(r).find(\'ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each((function(){const e=this.getAttribute("semantics"),t=_t()(this).find(">source").map((function(){return this.getAttribute("ssrc")})).get();t.length&&(s+=`a=ssrc-group:${e} ${t.join(" ")}\\r\\n`)})),_t()(r).find(\'source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each((function(){const e=_t()(this).attr("ssrc");t.containsSSRC(e)?!i.isP2P&&ca.warn(`${i} Source-add request for existing SSRC: ${e}`):_t()(this).find(">parameter").each((function(){s+=`a=ssrc:${e} ${_t()(this).attr("name")}`,_t()(this).attr("value")&&_t()(this).attr("value").length&&(s+=`:${_t()(this).attr("value")}`),s+="\\r\\n"}))}));let a=!1;t.media.forEach(((e,t)=>{Ns.findLine(e,`a=mid:${o}`)&&(n[t]||(n[t]=""),n[t]+=s,a=!0)})),!a&&this.isP2P&&(n[o]=s)})),n}addRemoteStream(e){this._addOrRemoveRemoteStream(!0,e)}removeRemoteStream(e){this._addOrRemoveRemoteStream(!1,e)}processSourceMap(e,t){if(!Ai.isSsrcRewritingSupported())return;const n=[];for(const i of e.mappedSources){const{owner:e,source:r,ssrc:o}=i;if(this.peerconnection.addRemoteSsrc(o,r)){n.push(i),ca.debug(`New SSRC signaled ${o}: owner=${e}, source-name=${r}`);const t=this.peerconnection.remoteSources.get(r);if(t){this._signalingLayer.removeSSRCOwners([t]);const e=this.peerconnection.getTrackBySSRC(t);e&&(e.setSourceName(void 0),e.setOwner(void 0),e._setVideoType(void 0))}}else{ca.debug(`Existing SSRC re-mapped ${o}: new owner=${e}, source-name=${r}`);const n=this.peerconnection.getTrackBySSRC(o);this._signalingLayer.setSSRCOwner(o,e,r),n.setSourceName(r),n.setOwner(e);const i=this._signalingLayer.getPeerMediaInfo(e,t,r);i&&(n._setVideoType(i.videoType),this.peerconnection._sourceMutedChanged(r,i.muted))}}if(n.length){let e=(0,St.$build)("content",{xmlns:"urn:xmpp:jingle:1",name:t}).c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:t});for(const i of n){const{rtx:n,ssrc:r,source:o}=i;let s;if(t===Ri.VIDEO){const t=++this.numRemoteVideoSources;s=`remote-video-${t} remote-video-${t}`,"-1"!==n&&(ha(e,i,n,s),e.c("ssrc-group",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",semantics:"FID"}).c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",ssrc:r}).up().c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0",ssrc:n}).up().up())}else{const e=++this.numRemoteAudioSources;s=`remote-audio-${e} remote-audio-${e}`}ha(e,i,r,s),this.peerconnection.remoteSources.set(o,r)}e=e.up(),this._addOrRemoveRemoteStream(!0,e.node)}}removeRemoteStreamsOnLeave(e){ca.debug(`${this} Queued removeRemoteStreamsOnLeave task for participant ${e}`),this.modificationQueue.push((t=>{const n=this.peerconnection.getRemoteSourceInfoByParticipant(e);if(n.length){const e=this._processRemoteRemoveSource(n);this._renegotiate(e.raw).then((()=>t()),(e=>t(e)))}else t()}),(e=>{e?ca.error(`${this} removeRemoteStreamsOnLeave error:`,e):ca.info(`${this} removeRemoteStreamsOnLeave done!`)}))}_addOrRemoveRemoteStream(e,t){const n=e?"addRemoteStream":"removeRemoteStream";e&&this.readSsrcInfo(t),ca.debug(`${this} Queued ${n} task`),this.modificationQueue.push((i=>{if(!this.peerconnection.localDescription||!this.peerconnection.localDescription.sdp){const e=`${n} - localDescription not ready yet`;return ca.error(e),void i(e)}ca.log(`${this} Processing ${n}`);const r=new Ms(this.peerconnection.remoteDescription.sdp),o=e?this._parseSsrcInfoFromSourceAdd(t,r):this._parseSsrcInfoFromSourceRemove(t,r),s=e?this._processRemoteAddSource(o):this._processRemoteRemoveSource(o);this._renegotiate(s.raw).then((()=>{ca.log(`${this} ${n} - OK`),i()}),(e=>{ca.error(`${this} ${n} failed:`,e),i(e)}))}))}_processNewJingleOfferIq(e){const t=new Ms("");return this.webrtcIceTcpDisable&&(t.removeTcpCandidates=!0),this.webrtcIceUdpDisable&&(t.removeUdpCandidates=!0),this.failICE&&(t.failICE=!0),t.fromJingle(e),this.readSsrcInfo(_t()(e).find(">content")),t}_processRemoteRemoveSource(e){var t;const n=new Ms(this.peerconnection.peerconnection.remoteDescription.sdp);let i;return e.forEach((e=>{let t;(e=e.split("\\r\\n")).pop(),i=e.map((e=>{var t;return Number(null===(t=e.split("a=ssrc:")[1])||void 0===t?void 0:t.split(" ")[0])})),e.forEach((e=>{if(t=n.media.findIndex((t=>t.includes(e))),t>-1)if(n.media[t]=n.media[t].replace(`${e}\\r\\n`,""),this.isP2P){var i;const e=null===(i=Ns.parseMLine(n.media[t].split("\\r\\n")[0]))||void 0===i?void 0:i.media,r=this.peerconnection.getDesiredMediaDirection(e,!1);[As.SENDRECV,As.SENDONLY].forEach((e=>{n.media[t]=n.media[t].replace(`a=${e}`,`a=${r}`)}))}else{n.media[t]=n.media[t].replace(`a=${As.SENDONLY}`,`a=${As.INACTIVE}`);const{media:e,port:i}=Ns.parseMLine(n.media[t].split("\\r\\n")[0]);n.media[t]=n.media[t].replace(`m=${e} ${i}`,`m=${e} 0`)}}))})),(null===(t=i)||void 0===t?void 0:t.length)&&this._signalingLayer.removeSSRCOwners(i),n.raw=n.session+n.media.join(""),n}_processRemoteAddSource(e){let t=new Ms(this.peerconnection.remoteDescription.sdp);return e.length>t.media.length&&this.isP2P&&(t.addMlineForNewLocalSource(Ri.VIDEO),t=new Ms(t.raw)),e.forEach(((e,n)=>{if(t.media[n]+=e,this.isP2P){var i;const e=null===(i=Ns.parseMLine(t.media[n].split("\\r\\n")[0]))||void 0===i?void 0:i.media,r=this.peerconnection.getDesiredMediaDirection(e,!0);[As.RECVONLY,As.INACTIVE].forEach((e=>{t.media[n]=t.media[n].replace(`a=${e}`,`a=${r}`)}))}})),t.raw=t.session+t.media.join(""),t}_renegotiate(e){if("closed"===this.peerconnection.signalingState){const e=new Error("Attempted to renegotiate in state closed");return this.room.eventEmitter.emit(Hi.XMPPEvents.RENEGOTIATION_FAILED,e,this),Promise.reject(e)}const t=e||this.peerconnection.remoteDescription.sdp;if(!t){const e=new Error(`Can not renegotiate without remote description, current state: ${this.state}`);return this.room.eventEmitter.emit(Hi.XMPPEvents.RENEGOTIATION_FAILED,e,this),Promise.reject(e)}const n=new RTCSessionDescription({type:"offer",sdp:t}),i=this.peerconnection.localDescription.sdp;return ca.debug(`${this} Renegotiate: setting remote description`),this.peerconnection.setRemoteDescription(n).then((()=>(ca.debug(`${this} Renegotiate: creating answer`),this.peerconnection.createAnswer(this.mediaConstraints)))).then((e=>(ca.debug(`${this} Renegotiate: setting local description`),this.peerconnection.setLocalDescription(e)))).then((()=>{i&&this.notifyMySSRCUpdate(new Ms(i),new Ms(this.peerconnection.localDescription.sdp))}))}addTracks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(null!=e&&e.length||Promise.reject(new Error("No tracks passed")),e.find((e=>e.getType()!==Ri.VIDEO)))return Promise.reject(new Error("Multiple tracks of the given media type are not supported"));const t=[],n=n=>{const i=new Ms(this.peerconnection.peerconnection.remoteDescription.sdp),r=this.peerconnection.peerconnection.getTransceivers().find((e=>e.receiver.track.kind===Ri.VIDEO&&e.direction===As.RECVONLY&&e.currentDirection===As.RECVONLY));for(const t of e)this.isP2P&&r||i.addMlineForNewLocalSource(t.getType());this._renegotiate(i.raw).then((()=>{for(const n of e)t.push(this.peerconnection.replaceTrack(null,n));return Promise.all(t)})).then((()=>this._renegotiate())).then((()=>n()),(e=>n(e)))};return new Promise(((e,t)=>{ca.debug(`${this} Queued renegotiation after addTrack`),this.modificationQueue.push(n,(n=>{if(n){if(n instanceof Zs)return ca.debug(`${this} renegotiation after addTrack aborted: session terminated`),void e();ca.error(`${this} renegotiation after addTrack error`,n),t(n)}else ca.debug(`${this} renegotiation after addTrack executed - OK`),e()}))}))}setMediaTransferActive(e){return this.peerconnection.audioTransferActive!==e||this.peerconnection.videoTransferActive!==e?this.peerconnection.tpcUtils.setMediaTransferActive(e).then((()=>{this.peerconnection.audioTransferActive=e,this.peerconnection.videoTransferActive=e;const t=[];return t.push(this.peerconnection.configureVideoSenderEncodings()),t.push(this.peerconnection.configureAudioSenderEncodings()),Promise.allSettled(t)})):Promise.resolve()}replaceTrack(e,t){const n=n=>{ca.debug(`${this} replaceTrack worker started. oldTrack = ${e}, newTrack = ${t}`),this.peerconnection.replaceTrack(e,t).then((n=>{let i=Promise.resolve();return ca.debug(`${this} TPC.replaceTrack finished. shouldRenegotiate = ${n}, JingleSessionState = ${this.state}`),n&&(e||t)&&this.state===ia&&(i=this._renegotiate()),i.then((()=>{e&&t&&e.isVideoTrack()&&t.setSourceName(e.getSourceName())}))})).then((()=>n()),(e=>n(e)))};return new Promise(((i,r)=>{ca.debug(`${this} Queued replaceTrack task. Old track = ${e}, new track = ${t}`),this.modificationQueue.push(n,(e=>{if(e){if(e instanceof Zs)return ca.debug("Replace track aborted: session terminated"),void i();ca.error(`${this} Replace track error:`,e),r(e)}else ca.info(`${this} Replace track done!`),i()}))}))}_parseSsrcInfoFromSourceRemove(e,t){const n=[];return _t()(e).each(((e,i)=>{const r=_t()(i).attr("name");let o="";_t()(i).find(\'ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each((function(){const e=this.getAttribute("semantics"),t=_t()(this).find(">source").map((function(){return this.getAttribute("ssrc")})).get();t.length&&(o+=`a=ssrc-group:${e} ${t.join(" ")}\\r\\n`)}));const s=[];_t()(i).find(\'source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]\').each((function(){const e=_t()(this).attr("ssrc");s.push(e)})),t.media.forEach(((e,t)=>{Ns.findLine(e,`a=mid:${r}`)&&(n[t]||(n[t]=""),s.forEach((i=>{const r=Ns.findLines(e,`a=ssrc:${i}`);r.length&&(n[t]+=`${r.join("\\r\\n")}\\r\\n`)})),n[t]+=o)}))})),n}addTrackToPc(e){return this._addRemoveTrack(!1,e).then((()=>{if(e.isVideoTrack())return this.peerconnection.configureVideoSenderEncodings(e)}))}removeTrackFromPc(e){return this._addRemoveTrack(!0,e)}_addRemoveTrack(e,t){if(!t)return Promise.reject(\'invalid "track" argument value\');const n=e?"removeTrack":"addTrack",i=i=>{const r=this.peerconnection;r?(e?r.removeTrackFromPc(t):r.addTrackToPc(t)).then((e=>{e?this._renegotiate().then(i):i()}),i):i(`Error: tried ${n} track with no active peer connection`)};return ca.debug(`${this} Queued ${n} task`),new Promise(((e,t)=>{this.modificationQueue.push(i,(i=>{if(i){if(i instanceof Zs)return ca.debug(`${this} ${n} aborted: session terminated`),void e();ca.error(`${this} ${n} failed`),t(i)}else ca.debug(`${this} ${n} done`),e()}))}))}setP2pVideoTransferActive(e){return this.peerconnection?this._localSendReceiveVideoActive!==e?(this._localSendReceiveVideoActive=e,this.isP2P&&this.state===ia&&this.sendContentModify(),this.peerconnection.setVideoTransferActive(this._localSendReceiveVideoActive&&this._remoteSendReceiveVideoActive)):Promise.resolve():Promise.reject(\'Can not modify video transfer active state, before "initialize" is called\')}modifyContents(e){const t=ua.parseVideoSenders(e),n=ua.parseSourceMaxFrameHeight(e);if(n&&(this.remoteSourceMaxFrameHeights=n,this.eventEmitter.emit(da.REMOTE_SOURCE_CONSTRAINTS_CHANGED,this,n)),null===t)return void ca.error(`${this} - failed to parse video "senders" attribute in "content-modify" action`);if(!this._assertNotEnded())return;const i="both"===t||"initiator"===t&&this.isInitiator||"responder"===t&&!this.isInitiator;i!==this._remoteSendReceiveVideoActive&&(ca.debug(`${this} new remote video active: ${i}`),this._remoteSendReceiveVideoActive=i,this.peerconnection.setVideoTransferActive(this._localSendReceiveVideoActive&&this._remoteSendReceiveVideoActive))}notifyMySSRCUpdate(e,t){if(this.state!==ia)return void ca.warn(`${this} Skipping SSRC update in \'${this.state} \' state.`);if(!this.connection.connected)return this._cachedOldLocalSdp||(this._cachedOldLocalSdp=e),this._cachedNewLocalSdp=t,void ca.warn(`${this} Not sending SSRC update while the signaling is disconnected`);this._cachedOldLocalSdp=void 0,this._cachedNewLocalSdp=void 0;const n=e=>{const t=e.getNewMedia();let n=[],i=null;return Object.keys(t).forEach((e=>{const r=Object.keys(t[e].ssrcs);i=t[e].mid,null!=r&&r.length&&(n=n.concat(r))})),{mediaType:i,ssrcs:n}};let i=new Fs(t,e);const r=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"source-remove",initiator:this.initiatorJid,sid:this.sid});i.toJingle(r);const o={},s=n(i);s.ssrcs.length&&(ca.info(`${this} Sending source-remove for ${s.mediaType} ssrcs=${s.ssrcs}`),this.connection.sendIQ(r,(()=>{this.room.eventEmitter.emit(Hi.XMPPEvents.SOURCE_REMOVE,this,o)}),this.newJingleErrorHandler(r,(e=>{this.room.eventEmitter.emit(Hi.XMPPEvents.SOURCE_REMOVE_ERROR,this,e,o)})),la)),i=new Fs(e,t);const a=(0,St.$iq)({to:this.remoteJid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"source-add",initiator:this.initiatorJid,sid:this.sid});i.toJingle(a);const d=n(i);d.ssrcs.length&&(ca.info(`${this} Sending source-add for ${d.mediaType} ssrcs=${d.ssrcs}`),this.connection.sendIQ(a,(()=>{this.room.eventEmitter.emit(Hi.XMPPEvents.SOURCE_ADD,this,o)}),this.newJingleErrorHandler(a,(e=>{this.room.eventEmitter.emit(Hi.XMPPEvents.SOURCE_ADD_ERROR,this,e,d.mediaType,o)})),la))}newJingleErrorHandler(e,t){return e=>{const n={},i=_t()(e).find("error");if(i.length){n.code=i.attr("code");const t=_t()(e).find("error :first");t.length&&(n.reason=t[0].tagName);const r=i.find(">text");r.length&&(n.msg=r.text())}e||(n.reason="timeout"),n.session=this.toString(),t?t(n):this.state===ra&&"item-not-found"===n.reason?ca.debug(`${this} Jingle error: ${JSON.stringify(n)}`):ca.error(`Jingle error: ${JSON.stringify(n)}`)}}getIceConnectionState(){return this.peerconnection.getConnectionState()}close(){this.state=ra,this.establishmentDuration=void 0,this.peerconnection&&(this.peerconnection.onicecandidate=null,this.peerconnection.oniceconnectionstatechange=null,this.peerconnection.onnegotiationneeded=null,this.peerconnection.onsignalingstatechange=null),ca.debug(`${this} Clearing modificationQueue`),this.modificationQueue.clear(),ca.debug(`${this} Queued PC close task`),this.modificationQueue.push((e=>{this.peerconnection&&this.peerconnection.close(),e(),ca.debug(`${this} PC close task done!`)})),ca.debug(`${this} Shutdown modificationQueue!`),this.modificationQueue.shutdown()}toString(){return`JingleSessionPC[session=${this.isP2P?"P2P":"JVB"},initiator=${this.isInitiator},sid=${this.sid}]`}}const pa=(0,E.getLogger)("modules/xmpp/strophe.jingle.js");function ma(e){const t=_t()(e).find(">candidate"),n=[];return t.each(((e,t)=>{const i=t.attributes,r=[];for(let e=0;ejson-message");if(null!=d&&d.length){var c;let t;pa.info(`Found a JSON-encoded element in ${n}, translating to standard Jingle.`);for(let n=0;nstartmuted");if(a&&pa.debug(`Received ${n} from ${i}`),null!=t&&t.length){const e=t.attr(Ri.AUDIO),n=t.attr(Ri.VIDEO);this.eventEmitter.emit(Hi.XMPPEvents.START_MUTED_FROM_FOCUS,"true"===e,"true"===n)}const r=a?this.p2pIceConfig:this.jvbIceConfig;o=new ua(_t()(e).find("jingle").attr("sid"),_t()(e).attr("to"),i,this.connection,this.mediaConstraints,Ss()(r),a,!1),this.sessions[o.sid]=o,this.eventEmitter.emit(Hi.XMPPEvents.CALL_INCOMING,o,_t()(e).find(">jingle"),s);break}case"session-accept":{const t=[],r=_t()(e).find("jingle>content");for(const e of r){const n=_t()(e).find("description").attr("ssrc");n&&t.push(n)}pa.debug(`Received ${n} from ${i} with ssrcs=${t}`),this.eventEmitter.emit(Hi.XMPPEvents.CALL_ACCEPTED,o,_t()(e).find(">jingle"));break}case"content-modify":pa.debug(`Received ${n} from ${i}`),o.modifyContents(_t()(e).find(">jingle"));break;case"transport-info":{const t=ma(_t()(e).find("jingle>content>transport"));pa.debug(`Received ${n} from ${i} for candidates=${t.join(", ")}`),this.eventEmitter.emit(Hi.XMPPEvents.TRANSPORT_INFO,o,_t()(e).find(">jingle"));break}case"session-terminate":{pa.log("terminating...",o.sid);let t=null,r=null;_t()(e).find(">jingle>reason").length&&(t=_t()(e).find(">jingle>reason>:first")[0].tagName,r=_t()(e).find(">jingle>reason>text").text()),pa.debug(`Received ${n} from ${i} disconnect reason=${r}`),this.terminate(o.sid,t,r),this.eventEmitter.emit(Hi.XMPPEvents.CALL_ENDED,o,t,r);break}case"transport-replace":{var l;pa.info("(TIME) Start transport replace:\\t",s);const t=_t()(e).find("jingle>content>transport"),r=ma(t),d=_t()(t).attr("ufrag"),c=_t()(t).attr("pwd"),h=null===(l=_t()(t).find(">fingerprint"))||void 0===l?void 0:l.text();pa.debug(`Received ${n} from ${i} with iceUfrag=${d}, icePwd=${c}, DTLS fingerprint=${h}, candidates=${r.join(", ")}`),Mi.sendAnalytics(dn(Jt,{p2p:a,value:s})),o.replaceTransport(_t()(e).find(">jingle"),(()=>{const e=window.performance.now();pa.info("(TIME) Transport replace success:\\t",e),Mi.sendAnalytics(dn(Bt,{p2p:a,value:e}))}),(e=>{pa.error("Transport replace failed",e),o.sendTransportReject()}));break}case"source-add":o.addRemoteStream(_t()(e).find(">jingle>content"));break;case"source-remove":o.removeRemoteStream(_t()(e).find(">jingle>content"));break;default:pa.warn("jingle action not implemented",n),r.attrs({type:"error"}),r.c("error",{type:"cancel"}).c("bad-request",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up()}return this.connection.send(r),!0}newP2PJingleSession(e,t){const n=new ua(co().randomHexString(12),e,t,this.connection,this.mediaConstraints,this.p2pIceConfig,!0,!0);return this.sessions[n.sid]=n,n}terminate(e,t,n){this.sessions.hasOwnProperty(e)&&("ended"!==this.sessions[e].state&&this.sessions[e].onTerminated(t,n),delete this.sessions[e])}getStunAndTurnCredentials(){this.connection.sendIQ((0,St.$iq)({type:"get",to:this.xmpp.options.hosts.domain}).c("services",{xmlns:"urn:xmpp:extdisco:2"}),(e=>this.onReceiveStunAndTurnCredentials(e)),(()=>{pa.warn("getting turn credentials with extdisco:2 failed, trying extdisco:1"),this.connection.sendIQ((0,St.$iq)({type:"get",to:this.xmpp.options.hosts.domain}).c("services",{xmlns:"urn:xmpp:extdisco:1"}),(e=>this.onReceiveStunAndTurnCredentials(e)),(()=>{pa.warn("getting turn credentials failed"),pa.warn("is mod_turncredentials or similar installed and configured?")}))}))}onReceiveStunAndTurnCredentials(e){let t=[];_t()(e).find(">services>service").each(((e,n)=>{const i={},r=(n=_t()(n)).attr("type");switch(r){case"stun":i.urls=`stun:${n.attr("host")}`,n.attr("port")&&(i.urls+=`:${n.attr("port")}`),t.push(i);break;case"turn":case"turns":{i.urls=`${r}:`,i.username=n.attr("username"),i.urls+=n.attr("host");const e=n.attr("port");e&&(i.urls+=`:${e}`);const o=n.attr("transport");o&&"udp"!==o&&(i.urls+=`?transport=${o}`),i.credential=n.attr("password")||i.credential,t.push(i);break}}}));const n=this.xmpp.options,{iceServersOverride:i=[]}=n;i.forEach((e=>{let{targetType:n,urls:i,username:r,credential:o}=e;if(!["turn","turns","stun"].includes(n))return;const s=`${n}:`;void 0===i&&void 0===r&&void 0===o||(null===i&&(t=t.filter((e=>!e.urls.startsWith(s)))),t.forEach((e=>{e.urls.startsWith(s)&&(e.urls=null!=i?i:e.urls,null===r?delete e.username:e.username=null!=r?r:e.username,null===o?delete e.credential:e.credential=null!=o?o:e.credential)})))}));for(let e=t.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1)),i=t[e];t[e]=t[n],t[n]=i}let r;return r=n.useTurnUdp?e=>e.urls.startsWith("turn"):e=>e.urls.startsWith("turn")&&e.urls.indexOf("transport=tcp")>=0,this.jvbIceConfig.iceServers=t.filter(r),this.p2pIceConfig.iceServers=t,t.length>0}getLog(){const e={};return Object.keys(this.sessions).forEach((t=>{const n=this.sessions[t].peerconnection;n&&n.updateLog&&(e[`jingle_${t}`]={updateLog:n.updateLog,stats:n.stats,url:window.location.href})})),e}}class fa extends Do{constructor(){super(),this.log=[]}init(e){super.init(e),this.connection.rawInput=this.logIncoming.bind(this),this.connection.rawOutput=this.logOutgoing.bind(this)}logIncoming(e){this.log.push([(new Date).getTime(),"incoming",e])}logOutgoing(e){this.log.push([(new Date).getTime(),"outgoing",e])}}const va=(0,E.getLogger)("modules/xmpp/strophe.rayo.js"),_a="urn:xmpp:rayo:1";class ya extends Do{init(e){super.init(e),this.connection.addHandler(this.onRayo.bind(this),_a,"iq","set",null,null)}onRayo(e){va.info("Rayo IQ",e)}dial(e,t,n,i,r){return new Promise(((o,s)=>{if(!r)return void s(new Error("Internal error!"));const a=(0,St.$iq)({type:"set",to:r});a.c("dial",{xmlns:_a,to:e,from:t}),a.c("header",{name:"JvbRoomName",value:n}).up(),i&&i.length&&a.c("header",{name:"JvbRoomPassword",value:i}).up(),this.connection.sendIQ(a,(e=>{va.info("Dial result ",e);const t=_t()(e).find("ref").attr("uri");this.callResource=t.substr("xmpp:".length),va.info(`Received call resource: ${this.callResource}`),o()}),(e=>{va.info("Dial error ",e),s(e)}))}))}hangup(){return new Promise(((e,t)=>{if(!this.callResource)return t(new Error("No call in progress")),void va.warn("No call in progress");const n=(0,St.$iq)({type:"set",to:this.callResource});n.c("hangup",{xmlns:_a}),this.connection.sendIQ(n,(t=>{va.info("Hangup result ",t),this.callResource=null,e()}),(e=>{va.info("Hangup error ",e),this.callResource=null,t(new Error("Hangup error "))}))}))}}const Ea=(0,E.getLogger)("modules/xmpp/strophe.util.js");let Sa=-1;const ba=/request id \\d+.\\d+ got 200/,Ta=/request errored, status: (\\d+), number of errors: \\d+/,Ca=(0,E.getLogger)("modules/xmpp/xmpp.js"),xa=/(.*)<\\/text><\\/failure>/gi;const Ra=[{urls:"stun:meet-jit-si-turnrelay.jitsi.net:443"}],Aa="type",wa="http://jitsi.org/protocol/jigasi",Ia="https://jitsi.org/meet/e2ee";class Pa extends xr{constructor(e,t){if(super(),e.bosh&&!e.serviceUrl)throw new Error(\'The "bosh" option is no longer supported, please use "serviceUrl" instead\');this.connection=null,this.disconnectInProgress=!1,this.connectionTimes={},this.options=e,this.token=t,this.authenticatedUser=!1,this.options.deploymentInfo||(this.options.deploymentInfo={}),this._components=[],St.Strophe.log=function(e,t){switch(Ea.trace("Strophe",e,t),"string"==typeof t&&-1!==t.indexOf("Request ")&&-1!==t.indexOf("timed out (secondary), restarting")&&(e=St.Strophe.LogLevel.WARN),e){case St.Strophe.LogLevel.DEBUG:-1!==Sa&&ba.test(t)&&(Ea.debug("Reset lastErrorStatus"),Sa=-1);break;case St.Strophe.LogLevel.WARN:Ea.warn(`Strophe: ${t}`);const e=Ta.exec(t);e&&2===e.length&&(Sa=parseInt(e[1],10),Ea.debug(`lastErrorStatus set to: ${Sa}`));break;case St.Strophe.LogLevel.ERROR:case St.Strophe.LogLevel.FATAL:Ea.error(`Strophe: ${t}`,t)}},St.Strophe.getLastErrorStatus=function(){return Sa},St.Strophe.getStatusString=function(e){switch(e){case St.Strophe.Status.BINDREQUIRED:return"BINDREQUIRED";case St.Strophe.Status.ERROR:return"ERROR";case St.Strophe.Status.CONNECTING:return"CONNECTING";case St.Strophe.Status.CONNFAIL:return"CONNFAIL";case St.Strophe.Status.AUTHENTICATING:return"AUTHENTICATING";case St.Strophe.Status.AUTHFAIL:return"AUTHFAIL";case St.Strophe.Status.CONNECTED:return"CONNECTED";case St.Strophe.Status.DISCONNECTED:return"DISCONNECTED";case St.Strophe.Status.DISCONNECTING:return"DISCONNECTING";case St.Strophe.Status.ATTACHED:return"ATTACHED";default:return"unknown"}},St.Strophe.addConnectionPlugin("logger",new fa);const n=e.xmppPing||{};n.domain=e.hosts.domain,this.connection=function(e){let{enableWebsocketResume:t,serviceUrl:n="/http-bind",shard:i,token:r,websocketKeepAlive:o,websocketKeepAliveUrl:s,xmppPing:a}=e;return r&&(n+=`${-1===n.indexOf("?")?"?":"&"}token=${r}`),new Lo({enableWebsocketResume:t,serviceUrl:n,websocketKeepAlive:o,websocketKeepAliveUrl:s,xmppPing:a,shard:i})}({enableWebsocketResume:e.enableWebsocketResume,serviceUrl:e.serviceUrl,token:t,websocketKeepAlive:e.websocketKeepAlive,websocketKeepAliveUrl:e.websocketKeepAliveUrl,xmppPing:n,shard:e.deploymentInfo.shard}),this.moderator=new Ko(this),this.connection.on(Lo.Events.CONN_SHARD_CHANGED,(()=>{const e={shard_changed:!0,suspend_time:this.connection.ping.getPingSuspendTime(),time_since_last_success:this.connection.getTimeSinceLastSuccess()};this.eventEmitter.emit(ur,Sr,void 0,void 0,e)})),this._initStrophePlugins(),this.caps=new bo(this.connection,"https://jitsi.org/jitsi-meet"),this.initFeaturesList(),_t()(window).on((this.options.disableBeforeUnloadHandlers?"":"beforeunload ")+"unload",(e=>{this.disconnect(e).catch((()=>{}))}))}initFeaturesList(){this.caps.addFeature("urn:xmpp:jingle:1"),this.caps.addFeature("urn:xmpp:jingle:apps:rtp:1"),this.caps.addFeature("urn:xmpp:jingle:transports:ice-udp:1"),this.caps.addFeature("urn:xmpp:jingle:apps:dtls:0"),this.caps.addFeature("urn:xmpp:jingle:transports:dtls-sctp:1"),this.caps.addFeature("urn:xmpp:jingle:apps:rtp:audio"),this.caps.addFeature("urn:xmpp:jingle:apps:rtp:video"),this.caps.addFeature("http://jitsi.org/json-encoded-sources"),!this.options.disableRtx&&ci.supportsRTX()&&this.caps.addFeature("urn:ietf:rfc:4588"),!0===this.options.enableOpusRed&&ci.supportsAudioRed()&&this.caps.addFeature("http://jitsi.org/opus-red"),(void 0===this.options.enableRemb||this.options.enableRemb)&&this.caps.addFeature("http://jitsi.org/remb"),ci.isFirefox()&&ci.isVersionLessThan(115)||void 0!==this.options.enableTcc&&!this.options.enableTcc||this.caps.addFeature("http://jitsi.org/tcc"),this.connection.rayo&&this.caps.addFeature("urn:xmpp:rayo:client:1"),so.isSupported(this.options)&&this.caps.addFeature(Ia,!1,!0),Ca.debug("Source-name signaling is enabled"),this.caps.addFeature("http://jitsi.org/source-name"),Ca.debug("Receiving multiple video streams is enabled"),this.caps.addFeature("http://jitsi.org/receive-multiple-video-streams"),Ai.isSsrcRewritingSupported()&&this.caps.addFeature("http://jitsi.org/ssrc-rewriting-1"),this.caps.addFeature("http://jitsi.org/visitors-1")}getConnection(){return this.connection}connectionHandler(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;const i=window.performance.now(),r=St.Strophe.getStatusString(t).toLowerCase();if(this.connectionTimes[r]=i,Ca.log(`(TIME) Strophe ${r}${n?`[${n}]`:""}:\\t`,i),this.eventEmitter.emit(Hi.XMPPEvents.CONNECTION_STATUS_CHANGED,e,t,n),this._maybeSendDeploymentInfoStat(),t===St.Strophe.Status.CONNECTED||t===St.Strophe.Status.ATTACHED)this._sysMessageHandler&&(this.connection._stropheConn.deleteHandler(this._sysMessageHandler),this._sysMessageHandler=null),this.sendDiscoInfo&&this.connection.jingle.getStunAndTurnCredentials(),Ca.info(`My Jabber ID: ${this.connection.jid}`),this._resetState(),this.sendDeploymentInfo=!1,this.sendDiscoInfo&&this.caps.getFeaturesAndIdentities(this.options.hosts.domain).then((e=>{let{features:t,identities:n}=e;t.has(St.Strophe.NS.PING)||Ca.error(`Ping NOT supported by ${this.options.hosts.domain} - please enable ping in your XMPP server config`),this._processDiscoInfoIdentities(n,void 0)})).catch((e=>{Ca.error("Feature discovery error",e),this._maybeSendDeploymentInfoStat(!0)})),this.sendDiscoInfo=!1,e.password&&(this.authenticatedUser=!0),this.connection&&this.connection.connected&&St.Strophe.getResourceFromJid(this.connection.jid)&&this.eventEmitter.emit(hr,St.Strophe.getResourceFromJid(this.connection.jid));else if(t===St.Strophe.Status.CONNFAIL)"x-strophe-bad-non-anon-jid"===n?this.anonymousConnectionFailed=!0:this.connectionFailed=!0,this.lastErrorMsg=n,"giving-up"===n&&this.eventEmitter.emit(ur,Sr,n);else if(t===St.Strophe.Status.ERROR)this.lastErrorMsg=n;else if(t===St.Strophe.Status.DISCONNECTED){this.connection.ping.stopInterval();const e=Boolean(this.disconnectInProgress),t=n||this.lastErrorMsg;if(this.anonymousConnectionFailed)this.eventEmitter.emit(ur,br);else if(this.connectionFailed)this.eventEmitter.emit(ur,Sr,t,void 0,this._getConnectionFailedReasonDetails());else if(e)this.eventEmitter.emit(lr,t);else{Ca.error("XMPP connection dropped!");const e=St.Strophe.getLastErrorStatus();e>=500&&e<600?this.eventEmitter.emit(ur,Tr,t||"server-error",void 0,this._getConnectionFailedReasonDetails()):this.eventEmitter.emit(ur,Er,t||"connection-dropped-error",void 0,this._getConnectionFailedReasonDetails())}}else if(t===St.Strophe.Status.AUTHFAIL){const t=this.getConnection().getLastFailedMessage();this.eventEmitter.emit(ur,br,n||this._parseConnectionFailedMessage(t),e)}}_processDiscoInfoIdentities(e,t){e.forEach((e=>{if("av_moderation"===e.type&&(this.avModerationComponentAddress=e.name,this._components.push(this.avModerationComponentAddress)),"end_conference"===e.type&&(this.endConferenceComponentAddress=e.name,this._components.push(this.endConferenceComponentAddress)),"speakerstats"===e.type&&(this.speakerStatsComponentAddress=e.name,this._components.push(this.speakerStatsComponentAddress)),"lobbyrooms"===e.type){this.lobbySupported=!0;const n=e=>{e.forEach((e=>{e.endsWith("#displayname_required")&&this.eventEmitter.emit(gr)}))};t?n(t):e.name&&this.caps.getFeaturesAndIdentities(e.name,e.type).then((e=>{let{features:t}=e;return n(t)})).catch((e=>Ca.warn("Error getting features from lobby.",e&&e.message)))}if("shard"===e.type&&(this.options.deploymentInfo.shard=this.connection.shard=e.name),"region"===e.type&&(this.options.deploymentInfo.region=this.connection.region=e.name),"release"===e.type&&(this.options.deploymentInfo.backendRelease=e.name),"breakout_rooms"===e.type){this.breakoutRoomsComponentAddress=e.name,this._components.push(this.breakoutRoomsComponentAddress);const n=e=>{this.breakoutRoomsFeatures={},e.forEach((e=>{e.endsWith("#rename")&&(this.breakoutRoomsFeatures.rename=!0)}))};t?n(t):e.name&&this.caps.getFeaturesAndIdentities(e.name,e.type).then((e=>{let{features:t}=e;return n(t)})).catch((e=>Ca.warn("Error getting features for breakout rooms.",e&&e.message)))}"room_metadata"===e.type&&(this.roomMetadataComponentAddress=e.name,this._components.push(this.roomMetadataComponentAddress)),"visitors"===e.type&&this._components.push(e.name)})),this._maybeSendDeploymentInfoStat(!0),this._components.length>0&&this.connection.addHandler(this._onPrivateMessage.bind(this),null,"message",null,null)}_parseConnectionFailedMessage(e){if(!e)return null;xa.lastIndex=0;const t=xa.exec(e);return t?t[1]:null}_connect(e,t){this._resetState(),this.sendDiscoInfo=!0,this.sendDeploymentInfo=!0,this.connection._stropheConn&&this.connection._stropheConn._addSysHandler?this._sysMessageHandler=this.connection._stropheConn._addSysHandler(this._onSystemMessage.bind(this),null,"message"):Ca.warn("Cannot attach strophe system handler, jiconop cannot operate"),this.connection.connect(e,t,this.connectionHandler.bind(this,{jid:e,password:t}))}_onSystemMessage(e){if(0===_t()(e).find(">services").length&&0===_t()(e).find(">query").length)return;this.sendDiscoInfo=!1;const t=this.connection.jingle.onReceiveStunAndTurnCredentials(e),{features:n,identities:i}=So(e);this._processDiscoInfoIdentities(i,n),(t||i.size>0||n.size>0)&&(this.connection._stropheConn.deleteHandler(this._sysMessageHandler),this._sysMessageHandler=null)}attach(e){this._resetState(),this.sendDiscoInfo=!0;const t=this.connectionTimes.attaching=window.performance.now();Ca.log("(TIME) Strophe Attaching:\\t",t),this.connection.attach(e.jid,e.sid,parseInt(e.rid,10)+1,this.connectionHandler.bind(this,{jid:e.jid,password:e.password}))}_resetState(){this.anonymousConnectionFailed=!1,this.connectionFailed=!1,this.lastErrorMsg=void 0,this.disconnectInProgress=void 0}connect(e,t){if(!e){const{anonymousdomain:t,domain:n}=this.options.hosts;let i=t||n;const{location:r}=window;if(t){const e=r&&r.search;(e&&-1!==e.indexOf("login=true")||this.token)&&(i=n)}e=i||r&&r.hostname}return this._startConnecting=!0,this._connect(e,t)}createRoom(e,t,n){const i=e.domain||t.customDomain;let r=`${this.getRoomJid(e,i)}/`;const o=n?n(this.connection.jid,this.authenticatedUser):co().randomHexString(8).toLowerCase();return Ca.info(`JID ${this.connection.jid} using MUC nickname ${o}`),r+=o,this.connection.emuc.createRoom(r,null,t)}getRoomJid(e,t){return`${e}@${t||this.options.hosts.muc.toLowerCase()}`}isRoomCreated(e,t){return this.connection.emuc.isRoomCreated(this.getRoomJid(e,t))}getJid(){return this.connection.jid}getJingleLog(){const e=this.connection.jingle;return e?e.getLog():{}}getXmppLog(){return(this.connection.logger||{}).log||null}dial(){this.connection.rayo.dial(...arguments)}ping(e){return new Promise(((t,n)=>{this.connection.ping.ping(this.connection.pingDomain,t,n,e)}))}getSessions(){return this.connection.jingle.sessions}disconnect(e){return this.disconnectInProgress?this.disconnectInProgress:this.connection&&this._startConnecting?(this.disconnectInProgress=new Promise((e=>{const t=(n,i)=>{i===St.Strophe.Status.DISCONNECTED&&(this.eventEmitter.removeListener(Hi.XMPPEvents.CONNECTION_STATUS_CHANGED,t),e())};this.eventEmitter.on(Hi.XMPPEvents.CONNECTION_STATUS_CHANGED,t)})),this._cleanupXmppConnection(e),this.disconnectInProgress):Promise.resolve()}_cleanupXmppConnection(e){if(!this.connection.isUsingWebSocket&&this.connection.flush(),!this.connection.isUsingWebSocket&&null!=e){const t=e.type;if(("beforeunload"===t||"unload"===t)&&(this.connection.options.sync=!0,this.connection.sendUnavailableBeacon()))return}this.connection.disconnect(),this._startConnecting=!1,!0!==this.connection.options.sync&&this.connection.flush()}_initStrophePlugins(){const e={jvb:{iceServers:[]},p2p:{iceServers:[]}},t=this.options.p2p&&this.options.p2p.stunServers||Ra;Array.isArray(t)&&(Ca.info("P2P STUN servers: ",t),e.p2p.iceServers=t),this.options.p2p&&this.options.p2p.iceTransportPolicy&&(Ca.info("P2P ICE transport policy: ",this.options.p2p.iceTransportPolicy),e.p2p.iceTransportPolicy=this.options.p2p.iceTransportPolicy),this.connection.addConnectionPlugin("emuc",new ys(this)),this.connection.addConnectionPlugin("jingle",new ga(this,this.eventEmitter,e)),this.connection.addConnectionPlugin("rayo",new ya)}_getConnectionFailedReasonDetails(){const e={};if(this.options.deploymentInfo&&this.options.deploymentInfo.shard&&this.connection.lastResponseHeaders){const t=this.connection.lastResponseHeaders.trim().split(/[\\r\\n]+/),n={};t.forEach((e=>{const t=e.split(": "),i=t.shift(),r=t.join(": ");n[i]=r})),e.shard_changed=this.options.deploymentInfo.shard!==n["x-jitsi-shard"]}return e.suspend_time=this.connection.ping.getPingSuspendTime(),e.time_since_last_success=this.connection.getTimeSinceLastSuccess(),e}sendDominantSpeakerEvent(e,t){if(!this.speakerStatsComponentAddress||!e)return;const n=(0,St.$msg)({to:this.speakerStatsComponentAddress});n.c("speakerstats",{xmlns:"http://jitsi.org/jitmeet",room:e,silence:t}).up(),this.connection.send(n)}sendFaceLandmarksEvent(e,t){if(!this.speakerStatsComponentAddress||!e)return;const n=(0,St.$msg)({to:this.speakerStatsComponentAddress});n.c("faceLandmarks",{xmlns:"http://jitsi.org/jitmeet",room:e,faceExpression:t.faceExpression,timestamp:t.timestamp,duration:t.duration}).up(),this.connection.send(n)}tryParseJSONAndVerify(e){if(!e)return!1;try{const t=_r(e);if(t&&"object"==typeof t){const e=t[Aa];if(void 0!==e)return t;Ca.debug("parsing valid json but does not have correct structure","topic: ",e)}}catch(t){return Ca.error(`Error parsing json ${e}`,t),!1}return!1}_onPrivateMessage(e){const t=e.getAttribute("from");if(!this._components.includes(t))return!0;const n=_t()(e).find(">json-message").text(),i=this.tryParseJSONAndVerify(n);return!i||("speakerstats"===i[Aa]&&i.users?this.eventEmitter.emit(Hi.XMPPEvents.SPEAKER_STATS_RECEIVED,i.users):"av_moderation"===i[Aa]?this.eventEmitter.emit(Hi.XMPPEvents.AV_MODERATION_RECEIVED,i):"breakout_rooms"===i[Aa]?this.eventEmitter.emit(Hi.XMPPEvents.BREAKOUT_ROOMS_EVENT,i):"room_metadata"===i[Aa]?this.eventEmitter.emit(Hi.XMPPEvents.ROOM_METADATA_EVENT,i):"visitors"===i[Aa]&&this.eventEmitter.emit(Hi.XMPPEvents.VISITORS_MESSAGE,i),!0)}_maybeSendDeploymentInfoStat(e){const t=[St.Strophe.Status.ERROR,St.Strophe.Status.CONNFAIL,St.Strophe.Status.AUTHFAIL,St.Strophe.Status.DISCONNECTED,St.Strophe.Status.CONNTIMEOUT];if(!(e||t.includes(this.connection.status)&&this.sendDeploymentInfo))return;const n=this.options.deploymentInfo;if(n&&Object.keys(n).length>0){const e={};for(const t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);Mi.analytics.addPermanentProperties({...e}),e.id="deployment_info";const t=JSON.stringify(e);Ca.info(t)}this.sendDeploymentInfo=!1;const{region:i,shard:r}=n;(i||r)&&this.eventEmitter.emit(fr,JSON.parse(JSON.stringify({region:i,shard:r})))}}function Da(e){let t,{id:n,password:i,onCreateResource:r,onLoginSuccessful:o}=e,s=!1,a=new Pa(this.connection.options);const d=new Promise(((e,d)=>{t=d,a.addListener(lr,(()=>{a=void 0})),a.addListener(hr,(()=>{if(s)return;o&&o();const t=a.createRoom(this.options.name,this.options.config,r);t.xmpp.moderator.authenticate(t.roomjid).then((()=>{a&&a.disconnect(),s||this.room.xmpp.moderator.sendConferenceRequest(this.room.roomjid).finally(e)})).catch((e=>{let{error:t,message:n}=e;a.disconnect(),d({authenticationError:t,message:n})}))})),a.addListener(ur,((e,t,n)=>{d({connectionError:e,credentials:n,message:t}),a=void 0})),s||a.connect(n,i)}));return d.cancel=()=>{s=!0,t({}),a&&a.disconnect()},d}const Oa=(0,E.getLogger)("modules/RTC/CodecSelection.js"),ka=[Ds.VP9,Ds.VP8,Ds.H264,Ds.AV1],Na=[Ds.H264,Ds.VP8,Ds.VP9,Ds.AV1],Ma=[Ds.VP8,Ds.VP9,Ds.H264,Ds.AV1];class La{constructor(e,t){this.conference=e,this.options=t,this.codecPreferenceOrder={},this.visitorCodecs=[];for(const e of Object.keys(t)){let{disabledCodec:r,preferredCodec:o,preferenceOrder:s}=t[e];const a=new Set(this._getSupportedVideoCodecs(e));let d=Array.from(a);if(s)s=s.map((e=>e.toLowerCase())),d=s.filter((e=>a.has(e)));else if(o||r){var n,i;r=null===(n=r)||void 0===n?void 0:n.toLowerCase(),o=null===(i=o)||void 0===i?void 0:i.toLowerCase(),r&&r!==Ds.VP8&&(d=d.filter((e=>e!==r)));const e=d.findIndex((e=>e===o));o&&-1!==e&&(d.splice(e,1),d.unshift(o))}if(!(ci.supportsVP9()||ci.isWebKitBased()&&"p2p"===e)||this.conference.isE2EEEnabled()){const e=d.findIndex((e=>e===Ds.VP9));-1!==e&&(d.splice(e,1),this.conference.isE2EEEnabled()||d.push(Ds.VP9))}Oa.info(`Codec preference order for ${e} connection is ${d}`),this.codecPreferenceOrder[e]=d}this.conference.on(q,(e=>this._selectPreferredCodec(e))),this.conference.on(ue,(e=>this._updateVisitorCodecs(e))),this.conference.on(at,(()=>this._selectPreferredCodec())),this.conference.on(dt,(()=>this._selectPreferredCodec()))}_getSupportedVideoCodecs(e){const t=(ci.isMobileDevice()&&"p2p"===e?Na:ci.isMobileDevice()?Ma:ka).filter((e=>{var t,n,i,r;return(null!==(t=null===(n=window.RTCRtpReceiver)||void 0===n||null===(i=n.getCapabilities)||void 0===i||null===(r=i.call(n,Ri.VIDEO))||void 0===r?void 0:r.codecs)&&void 0!==t?t:[]).some((t=>t.mimeType.toLowerCase()===`${Ri.VIDEO}/${e}`))}));return!t.length&&t.push(Ds.VP8),t}_selectPreferredCodec(e){const t=e||this.conference.jvbJingleSession;if(!t)return;const n=t.peerconnection.getConfiguredVideoCodecs(),i=t===this.conference.jvbJingleSession;let r=i?this.codecPreferenceOrder.jvb:this.codecPreferenceOrder.p2p;this.conference.isE2EEEnabled()&&i&&(r=[Ds.VP8]);const o=this.conference.getParticipants().map((e=>e.getId())),s=null==o?void 0:o.map((e=>{const n=t._signalingLayer.getPeerMediaInfo(e,Ri.VIDEO);return null!=n&&n.codecList?n.codecList:null!=n&&n.codecType?[n.codecType]:[]}));this.visitorCodecs.length&&s.push(this.visitorCodecs);const a=r.reduce(((e,n)=>{let i=!1;if(!t.isP2P)for(const e of s)e.length&&(i=i||!e.find((e=>e===n)));return i||e.push(n),e}),[]);a.length?a.every(((e,t)=>e===n[t]))||t.setVideoCodecs(a):Oa.warn("Invalid codec list generated because of a user joining/leaving the call")}_updateVisitorCodecs(e){this.visitorCodecs!==e&&(this.visitorCodecs=e,this._selectPreferredCodec())}getCodecPreferenceList(e){return this.codecPreferenceOrder[e]}}const Fa=(0,E.getLogger)("modules/RTC/BridgeChannel.js");class ja{constructor(e,t,n,i){if(!e&&!t)throw new TypeError("At least peerconnection or wsUrl must be given");if(e&&t)throw new TypeError("Just one of peerconnection or wsUrl must be given");if(e?Fa.debug("constructor() with peerconnection"):Fa.debug(`constructor() with wsUrl:"${t}"`),this._channel=null,this._conference=i,this._connected=void 0,this._eventEmitter=n,this._mode=null,this._areRetriesEnabled=!1,this._closedFromClient=!1,e){const t=e.createDataChannel("JVB data channel",{protocol:"http://jitsi.org/protocols/colibri"});this._handleChannel(t),this._mode="datachannel"}else t&&(this._areRetriesEnabled=!0,this._wsUrl=t,this._initWebSocket())}_initWebSocket(){const e=new WebSocket(this._wsUrl);this._handleChannel(e),this._mode="websocket"}_startConnectionRetries(){let e=1;const t=()=>{!this._channel||"connecting"!==this._channel.readyState&&this._channel.readyState!==WebSocket.CONNECTING?this.isOpen()||(this._initWebSocket(this._wsUrl),e=Math.min(2*e,60),this._retryTimeout=setTimeout(t,1e3*e)):this._retryTimeout=setTimeout(t,1e3*e)};this._retryTimeout=setTimeout(t,1e3*e)}_stopConnectionRetries(){this._retryTimeout&&(clearTimeout(this._retryTimeout),this._retryTimeout=void 0)}_retryWebSocketConnection(e){if(!this._areRetriesEnabled)return;const{code:t,reason:n}=e;Mi.sendAnalytics(((e,t)=>({type:kt.TYPE_OPERATIONAL,action:"bridge-channel.error",attributes:{code:e,reason:t}}))(t,n)),this._areRetriesEnabled=!1,this._eventEmitter.once(ji.default.DATA_CHANNEL_OPEN,(()=>{this._stopConnectionRetries(),this._areRetriesEnabled=!0})),this._startConnectionRetries()}get mode(){return this._mode}close(){if(this._closedFromClient=!0,this._stopConnectionRetries(),this._areRetriesEnabled=!1,this._channel){try{this._channel.close()}catch(e){}this._channel=null}}isOpen(){return this._channel&&("open"===this._channel.readyState||this._channel.readyState===WebSocket.OPEN)}sendEndpointStatsMessage(e){this._send({colibriClass:"EndpointStats",...e})}sendMessage(e,t){this._send({colibriClass:"EndpointMessage",msgPayload:t,to:e})}sendSetLastNMessage(e){Fa.log(`Sending lastN=${e}.`),this._send({colibriClass:"LastNChangedEvent",lastN:e})}sendReceiverVideoConstraintsMessage(e){Fa.log(`Sending ReceiverVideoConstraints with ${JSON.stringify(e)}`),this._send({colibriClass:"ReceiverVideoConstraints",...e})}sendSourceVideoTypeMessage(e,t){Fa.info(`Sending SourceVideoTypeMessage with video type ${e}: ${t}`),this._send({colibriClass:"SourceVideoTypeMessage",sourceName:e,videoType:t})}_handleChannel(e){const t=this._eventEmitter;e.onopen=()=>{Fa.info(`${this._mode} channel opened`),this._connected=!0,t.emit(ji.default.DATA_CHANNEL_OPEN)},e.onerror=e=>{"websocket"!==this._mode&&Fa.error(`Channel error: ${e.message}`)},e.onmessage=e=>{let n,{data:i}=e;try{n=_r(i)}catch(e){return void Fa.error("Failed to parse channel message as JSON: ",i,e)}const r=n.colibriClass;switch(r){case"DominantSpeakerEndpointChangeEvent":{const{dominantSpeakerEndpoint:e,previousSpeakers:i=[],silence:r}=n;Fa.debug(`Dominant speaker: ${e}, previous speakers: ${i}`),t.emit(ji.default.DOMINANT_SPEAKER_CHANGED,e,i,r);break}case"EndpointConnectivityStatusChangeEvent":{const e=n.endpoint,i="true"===n.active;Fa.info(`Endpoint connection status changed: ${e} active=${i}`),t.emit(ji.default.ENDPOINT_CONN_STATUS_CHANGED,e,i);break}case"EndpointMessage":t.emit(ji.default.ENDPOINT_MESSAGE_RECEIVED,n.from,n.msgPayload);break;case"EndpointStats":t.emit(ji.default.ENDPOINT_STATS_RECEIVED,n.from,n);break;case"ForwardedSources":{const e=n.forwardedSources;Fa.info(`New forwarded sources: ${e}`),t.emit(ji.default.FORWARDED_SOURCES_CHANGED,e);break}case"SenderSourceConstraints":"string"==typeof n.sourceName&&"number"==typeof n.maxHeight?(Fa.info(`SenderSourceConstraints: ${n.sourceName} - ${n.maxHeight}`),t.emit(ji.default.SENDER_VIDEO_CONSTRAINTS_CHANGED,n)):Fa.error(`Invalid SenderSourceConstraints: ${n.sourceName} - ${n.maxHeight}`);break;case"ServerHello":Fa.info(`Received ServerHello, version=${n.version}.`);break;case"VideoSourcesMap":Fa.info(`Received VideoSourcesMap: ${JSON.stringify(n.mappedSources)}`),t.emit(ji.default.VIDEO_SSRCS_REMAPPED,n);break;case"AudioSourcesMap":Fa.info(`Received AudioSourcesMap: ${JSON.stringify(n.mappedSources)}`),t.emit(ji.default.AUDIO_SSRCS_REMAPPED,n);break;default:Fa.debug("Channel JSON-formatted message: ",n),t.emit(`rtc.datachannel.${r}`,n)}},e.onclose=n=>{if(Fa.debug("Channel closed by "+(this._closedFromClient?"client":"server")),e===this._channel){if(!(this._closedFromClient||1001===n.code&&1===this._conference.getParticipantCount())){const{code:e,reason:i}=n;Fa.error(`Channel closed: ${e} ${i}`),"websocket"===this._mode&&(this._retryWebSocketConnection(n),!1!==this._connected&&t.emit(ji.default.DATA_CHANNEL_CLOSED,{code:e,reason:i}))}this._connected=!1,this._channel=null}else Fa.debug("Skip close handler, channel instance is not equal to stored one")},this._channel=e}_send(e){const t=this._channel;if(!this.isOpen())throw Fa.error("Bridge Channel send: no opened channel."),new Error("No opened channel");t.send(JSON.stringify(e))}}let Va;!function(e){e.ENVIRONMENT="environment",e.USER="user"}(Va||(Va={}));let Ua=!0,Ha=!0;function $a(e,t,n){const i=e.match(t);return i&&i.length>=n&&parseInt(i[n],10)}function Ja(e,t,n){if(!e.RTCPeerConnection)return;const i=e.RTCPeerConnection.prototype,r=i.addEventListener;i.addEventListener=function(e,i){if(e!==t)return r.apply(this,arguments);const o=e=>{const t=n(e);t&&(i.handleEvent?i.handleEvent(t):i(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(i,o),r.apply(this,[e,o])};const o=i.removeEventListener;i.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[t])return o.apply(this,arguments);if(!this._eventMap[t].has(n))return o.apply(this,arguments);const i=this._eventMap[t].get(n);return this._eventMap[t].delete(n),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,o.apply(this,[e,i])},Object.defineProperty(i,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function Ba(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Ua=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function qa(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Ha=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function Ga(){if("object"==typeof window){if(Ua)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function za(e,t){Ha&&console.warn(e+" is deprecated, please use "+t+" instead.")}function Ka(e){return"[object Object]"===Object.prototype.toString.call(e)}function Wa(e){return Ka(e)?Object.keys(e).reduce((function(t,n){const i=Ka(e[n]),r=i?Wa(e[n]):e[n],o=i&&!Object.keys(r).length;return void 0===r||o?t:Object.assign(t,{[n]:r})}),{}):e}function Xa(e,t,n){t&&!n.has(t.id)&&(n.set(t.id,t),Object.keys(t).forEach((i=>{i.endsWith("Id")?Xa(e,e.get(t[i]),n):i.endsWith("Ids")&&t[i].forEach((t=>{Xa(e,e.get(t),n)}))})))}function Ya(e,t,n){const i=n?"outbound-rtp":"inbound-rtp",r=new Map;if(null===t)return r;const o=[];return e.forEach((e=>{"track"===e.type&&e.trackIdentifier===t.id&&o.push(e)})),o.forEach((t=>{e.forEach((n=>{n.type===i&&n.trackId===t.id&&Xa(e,n,r)}))})),r}const Qa=Ga;function Za(e,t){const n=e&&e.navigator;if(!n.mediaDevices)return;const i=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach((n=>{if("require"===n||"advanced"===n||"mediaSource"===n)return;const i="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==i.exact&&"number"==typeof i.exact&&(i.min=i.max=i.exact);const r=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==i.ideal){t.optional=t.optional||[];let e={};"number"==typeof i.ideal?(e[r("min",n)]=i.ideal,t.optional.push(e),e={},e[r("max",n)]=i.ideal,t.optional.push(e)):(e[r("",n)]=i.ideal,t.optional.push(e))}void 0!==i.exact&&"number"!=typeof i.exact?(t.mandatory=t.mandatory||{},t.mandatory[r("",n)]=i.exact):["min","max"].forEach((e=>{void 0!==i[e]&&(t.mandatory=t.mandatory||{},t.mandatory[r(e,n)]=i[e])}))})),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},r=function(e,r){if(t.version>=61)return r(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=i(e.audio)}if(e&&"object"==typeof e.video){let o=e.video.facingMode;o=o&&("object"==typeof o?o:{ideal:o});const s=t.version<66;if(o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!n.mediaDevices.getSupportedConstraints||!n.mediaDevices.getSupportedConstraints().facingMode||s)){let t;if(delete e.video.facingMode,"environment"===o.exact||"environment"===o.ideal?t=["back","rear"]:"user"!==o.exact&&"user"!==o.ideal||(t=["front"]),t)return n.mediaDevices.enumerateDevices().then((n=>{let s=(n=n.filter((e=>"videoinput"===e.kind))).find((e=>t.some((t=>e.label.toLowerCase().includes(t)))));return!s&&n.length&&t.includes("back")&&(s=n[n.length-1]),s&&(e.video.deviceId=o.exact?{exact:s.deviceId}:{ideal:s.deviceId}),e.video=i(e.video),Qa("chrome: "+JSON.stringify(e)),r(e)}))}e.video=i(e.video)}return Qa("chrome: "+JSON.stringify(e)),r(e)},o=function(e){return t.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(n.getUserMedia=function(e,t,i){r(e,(e=>{n.webkitGetUserMedia(e,t,(e=>{i&&i(o(e))}))}))}.bind(n),n.mediaDevices.getUserMedia){const e=n.mediaDevices.getUserMedia.bind(n.mediaDevices);n.mediaDevices.getUserMedia=function(t){return r(t,(t=>e(t).then((e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach((e=>{e.stop()})),new DOMException("","NotFoundError");return e}),(e=>Promise.reject(o(e))))))}}}function ed(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&("function"==typeof t?e.navigator.mediaDevices.getDisplayMedia=function(n){return t(n).then((t=>{const i=n.video&&n.video.width,r=n.video&&n.video.height,o=n.video&&n.video.frameRate;return n.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:o||3}},i&&(n.video.mandatory.maxWidth=i),r&&(n.video.mandatory.maxHeight=r),e.navigator.mediaDevices.getUserMedia(n)}))}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}function td(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function nd(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",(n=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===n.track.id)):{track:n.track};const r=new Event("track");r.track=n.track,r.receiver=i,r.transceiver={receiver:i},r.streams=[t.stream],this.dispatchEvent(r)})),t.stream.getTracks().forEach((n=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===n.id)):{track:n};const r=new Event("track");r.track=n,r.receiver=i,r.transceiver={receiver:i},r.streams=[t.stream],this.dispatchEvent(r)}))},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else Ja(e,"track",(e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e)))}function id(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,i){let r=n.apply(this,arguments);return r||(r=t(this,e),this._senders.push(r)),r};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){i.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach((e=>{this._senders.push(t(this,e))}))};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],i.apply(this,[e]),e.getTracks().forEach((e=>{const t=this._senders.find((t=>t.track===e));t&&this._senders.splice(this._senders.indexOf(t),1)}))}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function rd(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,n,i]=arguments;if(arguments.length>0&&"function"==typeof e)return t.apply(this,arguments);if(0===t.length&&(0===arguments.length||"function"!=typeof e))return t.apply(this,[]);const r=function(e){const t={};return e.result().forEach((e=>{const n={id:e.id,timestamp:e.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[e.type]||e.type};e.names().forEach((t=>{n[t]=e.stat(t)})),t[n.id]=n})),t},o=function(e){return new Map(Object.keys(e).map((t=>[t,e[t]])))};if(arguments.length>=2){const i=function(e){n(o(r(e)))};return t.apply(this,[i,e])}return new Promise(((e,n)=>{t.apply(this,[function(t){e(o(r(t)))},n])})).then(n,i)}}function od(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>Ya(t,e.track,!0)))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),Ja(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>Ya(t,e.track,!1)))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,n,i;return this.getSenders().forEach((n=>{n.track===e&&(t?i=!0:t=n)})),this.getReceivers().forEach((t=>(t.track===e&&(n?i=!0:n=t),t.track===e))),i||t&&n?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():n?n.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function sd(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((e=>this._shimmedLocalStreams[e][0]))};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const i=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?-1===this._shimmedLocalStreams[n.id].indexOf(i)&&this._shimmedLocalStreams[n.id].push(i):this._shimmedLocalStreams[n.id]=[n,i],i};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")}));const t=this.getSenders();n.apply(this,arguments);const i=this.getSenders().filter((e=>-1===t.indexOf(e)));this._shimmedLocalStreams[e.id]=[e].concat(i)};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],i.apply(this,arguments)};const r=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach((t=>{const n=this._shimmedLocalStreams[t].indexOf(e);-1!==n&&this._shimmedLocalStreams[t].splice(n,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]})),r.apply(this,arguments)}}function ad(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return sd(e);const n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map((e=>this._reverseStreams[e.id]))};const i=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")})),!this._reverseStreams[t.id]){const n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}i.apply(this,[t])};const r=e.RTCPeerConnection.prototype.removeStream;function o(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const i=e._reverseStreams[t],r=e._streams[i.id];n=n.replace(new RegExp(r.id,"g"),i.id)})),new RTCSessionDescription({type:t.type,sdp:n})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},r.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection\'s signalingState is \'closed\'.","InvalidStateError");const i=[].slice.call(arguments,1);if(1!==i.length||!i[0].getTracks().find((e=>e===t)))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find((e=>e.track===t)))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const r=this._streams[n.id];if(r)r.addTrack(t),Promise.resolve().then((()=>{this.dispatchEvent(new Event("negotiationneeded"))}));else{const i=new e.MediaStream([t]);this._streams[n.id]=i,this._reverseStreams[i.id]=n,this.addStream(i)}return this.getSenders().find((e=>e.track===t))},["createOffer","createAnswer"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?n.apply(this,[t=>{const n=o(this,t);e[0].apply(null,[n])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):n.apply(this,arguments).then((e=>o(this,e)))}};e.RTCPeerConnection.prototype[t]=i[t]}));const s=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const i=e._reverseStreams[t],r=e._streams[i.id];n=n.replace(new RegExp(i.id,"g"),r.id)})),new RTCSessionDescription({type:t.type,sdp:n})}(this,arguments[0]),s.apply(this,arguments)):s.apply(this,arguments)};const a=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=a.get.apply(this);return""===e.type?e:o(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection\'s signalingState is \'closed\'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(e._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach((n=>{this._streams[n].getTracks().find((t=>e.track===t))&&(t=this._streams[n])})),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function dd(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]}))}function cd(e,t){Ja(e,"negotiationneeded",(e=>{const n=e.target;if(!(t.version<72||n.getConfiguration&&"plan-b"===n.getConfiguration().sdpSemantics)||"stable"===n.signalingState)return e}))}function ld(e,t){const n=e&&e.navigator,i=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,i){za("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),n.mediaDevices.getUserMedia(e).then(t,i)},!(t.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){const e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(n){return"object"==typeof n&&"object"==typeof n.audio&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,"autoGainControl","mozAutoGainControl"),e(n.audio,"noiseSuppression","mozNoiseSuppression")),t(n)},i&&i.prototype.getSettings){const t=i.prototype.getSettings;i.prototype.getSettings=function(){const n=t.apply(this,arguments);return e(n,"mozAutoGainControl","autoGainControl"),e(n,"mozNoiseSuppression","noiseSuppression"),n}}if(i&&i.prototype.applyConstraints){const t=i.prototype.applyConstraints;i.prototype.applyConstraints=function(n){return"audio"===this.kind&&"object"==typeof n&&(n=JSON.parse(JSON.stringify(n)),e(n,"autoGainControl","mozAutoGainControl"),e(n,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[n])}}}}function hd(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!n||!n.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===n.video?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)})}function ud(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function pd(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]}));const n={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},i=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,r,o]=arguments;return i.apply(this,[e||null]).then((e=>{if(t.version<53&&!r)try{e.forEach((e=>{e.type=n[e.type]||e.type}))}catch(t){if("TypeError"!==t.name)throw t;e.forEach(((t,i)=>{e.set(i,Object.assign({},t,{type:n[t.type]||t.type}))}))}return e})).then(r,o)}}function md(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function gd(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),Ja(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function fd(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){za("removeStream","removeTrack"),this.getSenders().forEach((t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)}))})}function vd(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function _d(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const e=arguments[1],n=e&&"sendEncodings"in e;n&&e.sendEncodings.forEach((e=>{if("rid"in e&&!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")}));const i=t.apply(this,arguments);if(n){const{sender:t}=i,n=t.getParameters();(!("encodings"in n)||1===n.encodings.length&&0===Object.keys(n.encodings[0]).length)&&(n.encodings=e.sendEncodings,t.sendEncodings=e.sendEncodings,this.setParametersPromises.push(t.setParameters(n).then((()=>{delete t.sendEncodings})).catch((()=>{delete t.sendEncodings}))))}return i})}function yd(e){if("object"!=typeof e||!e.RTCRtpSender)return;const t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){const e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function Ed(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}function Sd(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}function bd(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach((n=>t.call(this,n,e))),e.getVideoTracks().forEach((n=>t.call(this,n,e)))},e.RTCPeerConnection.prototype.addTrack=function(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]})),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const n=e.getTracks();this.getSenders().forEach((e=>{n.includes(e.track)&&this.removeTrack(e)}))})}}function Td(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach((e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)}))})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach((t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const n=new Event("addstream");n.stream=t,e.dispatchEvent(n)}))}),t.apply(e,arguments)}}}function Cd(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,n=t.createOffer,i=t.createAnswer,r=t.setLocalDescription,o=t.setRemoteDescription,s=t.addIceCandidate;t.createOffer=function(e,t){const i=arguments.length>=2?arguments[2]:arguments[0],r=n.apply(this,[i]);return t?(r.then(e,t),Promise.resolve()):r},t.createAnswer=function(e,t){const n=arguments.length>=2?arguments[2]:arguments[0],r=i.apply(this,[n]);return t?(r.then(e,t),Promise.resolve()):r};let a=function(e,t,n){const i=r.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i};t.setLocalDescription=a,a=function(e,t,n){const i=o.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i},t.setRemoteDescription=a,a=function(e,t,n){const i=s.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i},t.addIceCandidate=a}function xd(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,n=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>n(Rd(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,n,i){t.mediaDevices.getUserMedia(e).then(n,i)}.bind(t))}function Rd(e){return e&&void 0!==e.video?Object.assign({},e,{video:Wa(e.video)}):e}function Ad(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,n){if(e&&e.iceServers){const t=[];for(let n=0;nt.generateCertificate})}function wd(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Id(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find((e=>"audio"===e.receiver.track.kind));!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio",{direction:"recvonly"}),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const n=this.getTransceivers().find((e=>"video"===e.receiver.track.kind));!1===e.offerToReceiveVideo&&n?"sendrecv"===n.direction?n.setDirection?n.setDirection("sendonly"):n.direction="sendonly":"recvonly"===n.direction&&(n.setDirection?n.setDirection("inactive"):n.direction="inactive"):!0!==e.offerToReceiveVideo||n||this.addTransceiver("video",{direction:"recvonly"})}return t.apply(this,arguments)}}function Pd(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}function Dd(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;const t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substr(2)),e.candidate&&e.candidate.length){const n=new t(e),i=Wn().parseCandidate(e.candidate),r=Object.assign(n,i);return r.toJSON=function(){return{candidate:r.candidate,sdpMid:r.sdpMid,sdpMLineIndex:r.sdpMLineIndex,usernameFragment:r.usernameFragment}},r}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,Ja(e,"icecandidate",(t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t)))}function Od(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){const{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(function(e){if(!e||!e.sdp)return!1;const t=Wn().splitSections(e.sdp);return t.shift(),t.some((e=>{const t=Wn().parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")}))}(arguments[0])){const e=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);if(null===t||t.length<2)return-1;const n=parseInt(t[1],10);return n!=n?-1:n}(arguments[0]),n=function(e){let n=65536;return"firefox"===t.browser&&(n=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),n}(e),i=function(e,n){let i=65536;"firefox"===t.browser&&57===t.version&&(i=65535);const r=Wn().matchPrefix(e.sdp,"a=max-message-size:");return r.length>0?i=parseInt(r[0].substr(19),10):"firefox"===t.browser&&-1!==n&&(i=2147483637),i}(arguments[0],e);let r;r=0===n&&0===i?Number.POSITIVE_INFINITY:0===n||0===i?Math.max(n,i):Math.min(n,i);const o={};Object.defineProperty(o,"maxMessageSize",{get:()=>r}),this._sctp=o}return n.apply(this,arguments)}}function kd(e){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const n=e.send;e.send=function(){const i=arguments[0],r=i.length||i.size||i.byteLength;if("open"===e.readyState&&t.sctp&&r>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return n.apply(e,arguments)}}const n=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=n.apply(this,arguments);return t(e,this),e},Ja(e,"datachannel",(e=>(t(e.channel,e.target),e)))}function Nd(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((e=>{const n=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const n=new Event("connectionstatechange",e);t.dispatchEvent(n)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),n.apply(this,arguments)}}))}function Md(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t.version>=605)return;const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\\na=extmap-allow-mixed")){const n=t.sdp.split("\\n").filter((e=>"a=extmap-allow-mixed"!==e.trim())).join("\\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:n}):t.sdp=n}return n.apply(this,arguments)}}function Ld(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.addIceCandidate;n&&0!==n.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&t.version<78||"firefox"===t.browser&&t.version<68||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Fd(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.setLocalDescription;n&&0!==n.length&&(e.RTCPeerConnection.prototype.setLocalDescription=function(){let e=arguments[0]||{};if("object"!=typeof e||e.type&&e.sdp)return n.apply(this,arguments);if(e={type:e.type,sdp:e.sdp},!e.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":e.type="offer";break;default:e.type="answer"}return e.sdp||"offer"!==e.type&&"answer"!==e.type?n.apply(this,[e]):("offer"===e.type?this.createOffer:this.createAnswer).apply(this).then((e=>n.apply(this,[e])))})}!function(){let{window:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0};const n=Ga,i=function(e){const t={browser:null,version:null};if(void 0===e||!e.navigator)return t.browser="Not a browser.",t;const{navigator:n}=e;if(n.mozGetUserMedia)t.browser="firefox",t.version=$a(n.userAgent,/Firefox\\/(\\d+)\\./,1);else if(n.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection&&!e.RTCIceGatherer)t.browser="chrome",t.version=$a(n.userAgent,/Chrom(e|ium)\\/(\\d+)\\./,2);else{if(!e.RTCPeerConnection||!n.userAgent.match(/AppleWebKit\\/(\\d+)\\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=$a(n.userAgent,/AppleWebKit\\/(\\d+)\\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype}return t}(e),r={browserDetails:i,commonShim:m,extractVersion:$a,disableLog:Ba,disableWarnings:qa,sdp:Kn};switch(i.browser){case"chrome":if(!h||!dd||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),r;if(null===i.version)return n("Chrome shim can not determine version, not shimming."),r;n("adapter.js shimming chrome."),r.browserShim=h,Ld(e,i),Fd(e),Za(e,i),td(e),dd(e,i),nd(e),ad(e,i),id(e),rd(e),od(e),cd(e,i),Dd(e),Nd(e),Od(e,i),kd(e),Md(e,i);break;case"firefox":if(!u||!pd||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),r;n("adapter.js shimming firefox."),r.browserShim=u,Ld(e,i),Fd(e),ld(e,i),pd(e,i),ud(e),fd(e),md(e),gd(e),vd(e),_d(e),yd(e),Ed(e),Sd(e),Dd(e),Nd(e),Od(e,i),kd(e);break;case"safari":if(!p||!t.shimSafari)return n("Safari shim is not included in this adapter release."),r;n("adapter.js shimming safari."),r.browserShim=p,Ld(e,i),Fd(e),Ad(e),Id(e),Cd(e),bd(e),Td(e),wd(e),xd(e),Pd(e),Dd(e),Od(e,i),kd(e),Md(e,i);break;default:n("Unsupported browser!")}}({window:"undefined"==typeof window?void 0:window});var jd=n(125),Vd=n.n(jd);const Ud=(0,E.getLogger)("modules/RTC/RTCUtils.js"),Hd={video:{height:{ideal:720,max:720,min:180},width:{ideal:1280,max:1280,min:320}}};let $d="default",Jd=!1,Bd=!1,qd=!1,Gd=!1,zd=!1,Kd=null;const Wd=document.createElement("audio"),Xd=void 0!==Wd.setSinkId;let Yd,Qd=[];function Zd(){}function ec(e){const t=e.filter((e=>"audioinput"===e.kind)).length,n=e.filter((e=>"audiooutput"===e.kind)).length,i=e.filter((e=>"videoinput"===e.kind)).length,r=e.filter((e=>"videooutput"===e.kind)).length;e.forEach((e=>{const o={audio_input_device_count:t,audio_output_device_count:n,video_input_device_count:i,video_output_device_count:r,device_id:e.deviceId,device_group_id:e.groupId,device_kind:e.kind,device_label:e.label};Mi.sendAnalytics(Wt,o)}))}const tc=new class extends xr{init(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var n;"boolean"==typeof t.disableAEC&&(qd=t.disableAEC,Ud.info(`Disable AEC: ${qd}`)),"boolean"==typeof t.disableNS&&(Gd=t.disableNS,Ud.info(`Disable NS: ${Gd}`)),"boolean"==typeof t.disableAP&&(Bd=t.disableAP,Ud.info(`Disable AP: ${Bd}`)),"boolean"==typeof t.disableAGC&&(zd=t.disableAGC,Ud.info(`Disable AGC: ${zd}`)),"boolean"==typeof(null===(e=t.audioQuality)||void 0===e?void 0:e.stereo)&&(Kd=t.audioQuality.stereo,Ud.info(`Stereo: ${Kd}`)),window.clearInterval(Yd),Yd=void 0,ci.isReactNative()||(this.attachMediaStream=(n=(e,t)=>{e&&(e.srcObject=t)},function(e,t){return n.apply(tc,arguments),t&&tc.isDeviceChangeAvailable("output")&&t.getAudioTracks&&t.getAudioTracks().length&&Jd?e.setSinkId(tc.getAudioOutputDevice()).catch((t=>{const n=new dr(t,null,["audiooutput"]);throw Ud.warn("Failed to set audio output device for the element. Default audio output device will be used instead",null==e?void 0:e.id,n),n})):Promise.resolve()})),this.pcConstraints={},Is.init(t),this.isDeviceListAvailable()&&this.enumerateDevices((e=>{Qd=e.slice(0),Ud.debug("Available devices: ",Qd),ec(Qd),this.eventEmitter.emit(ji.default.DEVICE_LIST_AVAILABLE,Qd),ci.supportsDeviceChangeEvent()?navigator.mediaDevices.addEventListener("devicechange",(()=>this.enumerateDevices(Zd))):Yd=window.setInterval((()=>this.enumerateDevices(Zd)),3e3)}))}enumerateDevices(e){navigator.mediaDevices.enumerateDevices().then((t=>{this._updateKnownDevices(t),e(t)})).catch((t=>{Ud.warn(`Failed to enumerate devices. ${t}`),this._updateKnownDevices([]),e([])}))}_getUserMedia(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return new Promise(((i,r)=>{let o,s=!1;"number"==typeof n&&!isNaN(n)&&n>0&&(o=setTimeout((()=>{s=!0,o=void 0,r(new dr(er))}),n)),navigator.mediaDevices.getUserMedia(t).then((t=>{Ud.log("onUserMediaSuccess"),this._updateGrantedPermissions(e,t),s||(void 0!==o&&clearTimeout(o),i(t))})).catch((n=>{Ud.warn(`Failed to get access to local media. ${n} ${JSON.stringify(t)}`);const i=new dr(n,t,e);s||(void 0!==o&&clearTimeout(o),r(i)),i.name===Yi&&this._updateGrantedPermissions(e,void 0)}))}))}_getDesktopMedia(e){return Is.isSupported()?new Promise(((t,n)=>{Is.obtainStream((e=>{t(e)}),(e=>{n(e)}),e)})):Promise.reject(new Error("Desktop sharing is not supported!"))}_getMissingTracks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0;const n=[],i=e.includes("audio"),r=t&&t.getAudioTracks().length>0;i&&!r&&n.push("audio");const o=e.includes("video"),s=t&&t.getVideoTracks().length>0;return o&&!s&&n.push("video"),n}_onMediaDevicesListChanged(e){Qd=e.slice(0),Ud.info("list of media devices has changed:",Qd),ec(Qd),this.eventEmitter.emit(ji.default.DEVICE_LIST_WILL_CHANGE,Qd),this.eventEmitter.emit(ji.default.DEVICE_LIST_CHANGED,Qd)}_updateKnownDevices(e){(function(e){return e.length!==Qd.length||e.map(t).sort().join("")!==Qd.map(t).sort().join("");function t(e){return JSON.stringify({kind:e.kind,deviceId:e.deviceId,groupId:e.groupId,label:e.label,facing:e.facing})}})(e)&&this._onMediaDevicesListChanged(e)}_updateGrantedPermissions(e,t){const n=Boolean(t)&&t.getAudioTracks().length>0,i=Boolean(t)&&t.getVideoTracks().length>0,r={};-1!==e.indexOf("video")&&(r.video=i),-1!==e.indexOf("audio")&&(r.audio=n),this.eventEmitter.emit(ji.default.PERMISSIONS_CHANGED,r)}obtainAudioAndVideoPermissions(e){const{timeout:t,...n}=e,i=[];let r={};const o=function(){if(-1===(n.devices||[]).indexOf("desktop"))return Promise.resolve();const{desktopSharingSourceDevice:e,desktopSharingSources:i}=n;if(e){const n=Qd&&Qd.find((t=>"videoinput"===t.kind&&(t.deviceId===e||t.label===e)));if(!n)return Promise.reject(new dr({name:"ConstraintNotSatisfiedError"},{},[e]));const i=["video"],r={video:{deviceId:n.deviceId}};return this._getUserMedia(i,r,t).then((e=>({sourceType:"device",stream:e})))}return this._getDesktopMedia({desktopSharingSources:i})}.bind(this),s=function(){const e=(n.devices||["audio","video"]).filter((e=>"audio"===e||"video"===e));return e.length?(r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Ss()(t.constraints||Hd);if(e.indexOf("video")>=0){if(Vd()[t.resolution]){const e=Vd()[t.resolution];n.video.height={ideal:e.height},n.video.width={ideal:e.width}}if(n.video||(n.video={}),ci.isWebKitBased()&&(n.video.height&&n.video.height.ideal?n.video.height={ideal:n.video.height.ideal}:Ud.warn("Ideal camera height missing, camera may not start properly"),n.video.width&&n.video.width.ideal?n.video.width={ideal:n.video.width.ideal}:Ud.warn("Ideal camera width missing, camera may not start properly")),t.cameraDeviceId)n.video.deviceId={exact:t.cameraDeviceId};else{const e=t.facingMode||Va.USER;n.video.facingMode=e}}else n.video=!1;return e.indexOf("audio")>=0?(n.audio&&"boolean"!=typeof n.audio||(n.audio={}),n.audio={autoGainControl:!zd&&!Bd,echoCancellation:!qd&&!Bd,noiseSuppression:!Gd&&!Bd},t.micDeviceId&&(n.audio.deviceId={exact:t.micDeviceId}),Kd&&Object.assign(n.audio,{channelCount:2})):n.audio=!1,n}(e,n),Ud.info("Got media constraints: ",JSON.stringify(r)),this._getUserMedia(e,r,t)):Promise.resolve()}.bind(this);return o().then((function(e){if(!e)return;const{stream:t,sourceId:n,sourceType:r}=e,o=t.getAudioTracks();if(o.length){const e=new MediaStream(o);i.push({stream:e,sourceId:n,sourceType:r,track:e.getAudioTracks()[0]})}const s=t.getVideoTracks();if(s.length){const e=new MediaStream(s);i.push({stream:e,sourceId:n,sourceType:r,track:e.getVideoTracks()[0],videoType:Qo.VideoType.DESKTOP})}})).then(s).then((function(e){if(!e)return;const t=e.getAudioTracks();if(t.length){const e=new MediaStream(t);i.push({constraints:r.audio,stream:e,track:e.getAudioTracks()[0],effects:n.effects})}const o=e.getVideoTracks();if(o.length){const e=new MediaStream(o);i.push({constraints:r.video,stream:e,track:e.getVideoTracks()[0],videoType:Qo.VideoType.CAMERA,effects:n.effects})}})).then((()=>i)).catch((e=>(i.forEach((e=>{let{stream:t}=e;this.stopMediaStream(t)})),Promise.reject(e))))}isDeviceListAvailable(){return Boolean(navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices)}isDeviceChangeAvailable(e){return"output"!==e&&"audiooutput"!==e||Xd}stopMediaStream(e){e&&(e.getTracks().forEach((e=>{e.stop&&e.stop()})),e.stop&&e.stop(),e.release&&e.release())}isDesktopSharingEnabled(){return Is.isSupported()}setAudioOutputDevice(e){return this.isDeviceChangeAvailable("output")?Wd.setSinkId(e).then((()=>{$d=e,Jd=!0,Ud.log(`Audio output device set to ${e}`),this.eventEmitter.emit(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,e)})):Promise.reject(new Error("Audio output device change is not supported"))}setDesktopSharingFrameRate(e){Is.setDesktopSharingFrameRate(e)}getAudioOutputDevice(){return $d}getCurrentlyAvailableMediaDevices(){return Qd}arePermissionsGrantedForAvailableDevices(){return Qd.some((e=>Boolean(e.label)))}getEventDataForActiveDevice(e){const t=[],n={deviceId:e.deviceId,kind:e.kind,label:e.label,groupId:e.groupId};return t.push(n),{deviceList:t}}isUserStreamById(e){return e&&"mixedmslabel"!==e&&"default"!==e}},nc=tc,ic=(0,E.getLogger)("modules/RTC/JitsiTrack.js"),rc={track_mute:"onmute",track_unmute:"onunmute",track_ended:"onended"};class oc extends ii{constructor(e,t,n,i,r,o){super(),this.containers=[],this.conference=e,this.audioLevel=-1,this.type=r,this.track=n,this.videoType=o,this.handlers=new Map,this.disposed=!1,this._streamInactiveHandler=i,this._setStream(t)}_addMediaStreamInactiveHandler(e){ci.isFirefox()||ci.isWebKitBased()?this.track.onended=e:this.stream.oninactive=e}_attachTTFMTracker(e){}_onTrackAttach(e){}_onTrackDetach(e){}_setHandler(e,t){if(rc.hasOwnProperty(e)){if(t?this.handlers.set(e,t):this.handlers.delete(e),this.stream)for(const n of this.stream.getTracks())n[rc[e]]=t}else ic.error(`Invalid handler type ${e}`)}_setStream(e){if(this.stream!==e&&(this.stream=e,this.stream)){for(const e of this.handlers.keys())this._setHandler(e,this.handlers.get(e));this._streamInactiveHandler&&this._addMediaStreamInactiveHandler(this._streamInactiveHandler)}}_unregisterHandlers(){if(this.stream){for(const e of this.handlers.keys())for(const t of this.stream.getVideoTracks())t[rc[e]]=void 0;this._streamInactiveHandler&&this._addMediaStreamInactiveHandler(void 0)}else ic.warn(`${this}: unable to unregister handlers - no stream object`)}attach(e){let t=Promise.resolve();return this.stream&&(this._onTrackAttach(e),t=nc.attachMediaStream(e,this.stream)),this.containers.push(e),this._attachTTFMTracker(e),t}detach(e){for(let t=this.containers,n=t.length-1;n>=0;--n){const i=t[n];e||(this._onTrackDetach(i),nc.attachMediaStream(i,null).catch((()=>{ic.error(`Detach for ${this} failed!`)}))),e&&i!==e||t.splice(n,1)}e&&(this._onTrackDetach(e),nc.attachMediaStream(e,null).catch((()=>{ic.error(`Detach for ${this} failed!`)})))}dispose(){return this.removeAllListeners(),this.disposed=!0,Promise.resolve()}getId(){return this.getStreamId()}getOriginalStream(){return this.stream}getSourceName(){}getStreamId(){return this.stream?this.stream.id:null}getTrack(){return this.track}getTrackLabel(){return this.track.label}getTrackId(){return this.track?this.track.id:null}getType(){return this.type}getUsageLabel(){return this.isAudioTrack()?"mic":this.videoType?this.videoType:"default"}getVideoType(){return this.videoType}getHeight(){return Math.min(this.track.getSettings().height,this.track.getSettings().width)}getWidth(){return Math.max(this.track.getSettings().height,this.track.getSettings().width)}isActive(){return void 0===this.stream.active||this.stream.active}isAudioTrack(){return this.getType()===Ri.AUDIO}isLocal(){throw new Error("Not implemented by subclass")}isLocalAudioTrack(){return this.isAudioTrack()&&this.isLocal()}isVideoTrack(){return this.getType()===Ri.VIDEO}isWebRTCTrackMuted(){return this.track&&this.track.muted}setAudioLevel(e,t){let n=e;ci.supportsReceiverStats()&&void 0!==t&&this.isMuted()&&(n=0),this.audioLevel!==n?(this.audioLevel=n,this.emit(Ct,n,t)):0===this.audioLevel&&0===n&&this.isLocal()&&!this.isWebRTCTrackMuted()&&this.emit(It,n)}setAudioOutput(e){return nc.isDeviceChangeAvailable("output")?this.isVideoTrack()?Promise.resolve():Promise.all(this.containers.map((t=>t.setSinkId(e).catch((e=>{throw ic.warn("Failed to change audio output device on element. Default or previously set audio output device will be used.",t,e),e}))))).then((()=>{this.emit(xt,e)})):Promise.reject(new Error("Audio output device change is not supported"))}setSourceName(e){}}const sc=(0,E.getLogger)("modules/RTC/JitsiLocalTrack.js");class ac extends oc{constructor(e){let{constraints:t,deviceId:n,facingMode:i,mediaType:r,rtcId:o,sourceId:s,sourceType:a,stream:d,track:c,videoType:l,effects:h=[]}=e;super(null,d,c,(()=>this.emit(Tt,this)),r,l),this._setEffectInProgress=!1;const u=h.find((e=>e.isEnabled(this)));u&&this._startStreamEffect(u);const p=l===Qo.VideoType.DESKTOP?c.getSettings().displaySurface:null;var m;this.metadata={timestamp:Date.now(),...p?{displaySurface:p}:{}},this.rtcId=o,this.sourceId=s,this.sourceType=null!=a?a:p,this._constraints=c.getConstraints(),r===Ri.VIDEO&&(l===Qo.VideoType.CAMERA&&(Object.keys(this._constraints).length||(this._constraints={height:{ideal:this.getHeight()},width:{ideal:this.getWidth()}}),isNaN(this._constraints.height.ideal)&&isNaN(this._constraints.width.ideal)&&(this._constraints.height={ideal:t.height.ideal},this._constraints.width={ideal:t.width.ideal})),this.resolution=this.getHeight(),isNaN(this.resolution)&&null!==(m=this._constraints.height)&&void 0!==m&&m.ideal&&(this.resolution=this._constraints.height.ideal),this.maxEnabledResolution=this.resolution),this.deviceId=n,this._prevSetMuted=Promise.resolve(),this._facingMode=i,this._trackEnded=!1,this._hasSentData=!1,this._testDataSent=!0,this._realDeviceId=""===this.deviceId?void 0:this.deviceId,this._sourceName=null,this._trackMutedTS=0,this._onDeviceListWillChange=e=>{const t=this._realDeviceId;this._setRealDeviceIdFromDeviceList(e),(void 0===this.getTrack().readyState&&void 0!==this._realDeviceId&&!e.find((e=>e.deviceId===this._realDeviceId))||void 0!==t&&void 0===this._realDeviceId)&&(this._trackEnded=!0)},this.isAudioTrack()&&nc.isDeviceChangeAvailable("output")&&(this._onAudioOutputDeviceChanged=this.setAudioOutput.bind(this),nc.addListener(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,this._onAudioOutputDeviceChanged)),nc.addListener(ji.default.DEVICE_LIST_WILL_CHANGE,this._onDeviceListWillChange),this._initNoDataFromSourceHandlers()}_addStreamToConferenceAsUnmute(){return this.conference?new Promise(((e,t)=>{this.conference._addLocalTrackToPc(this).then(e,(e=>t(new Error(e))))})):Promise.resolve()}_fireNoDataFromSourceEvent(){const e=!this.isReceivingData();this.emit(wt,e),sc.debug(`NO_DATA_FROM_SOURCE event with value ${e} detected for track: ${this}`),Mi.sendAnalytics(((e,t)=>({attributes:{media_type:e,value:t},action:"track.no.data.from.source",type:kt.TYPE_OPERATIONAL}))(this.getType(),e))}_initNoDataFromSourceHandlers(){this._isNoDataFromSourceEventsEnabled()&&(this._setHandler("track_mute",(()=>{this._trackMutedTS=window.performance.now(),this._fireNoDataFromSourceEvent()})),this._setHandler("track_unmute",(()=>{this._fireNoDataFromSourceEvent(),Mi.sendAnalyticsAndLog(nn,{media_type:this.getType(),track_type:"local",value:window.performance.now()-this._trackMutedTS})})),this.isVideoTrack()&&this.videoType===Qo.VideoType.CAMERA&&this._setHandler("track_ended",(()=>{this.isReceivingData()||this._fireNoDataFromSourceEvent()})))}_isNoDataFromSourceEventsEnabled(){return!this.isVideoTrack()||this.videoType!==Qo.VideoType.DESKTOP}_queueSetMuted(e){const t=this._setMuted.bind(this,e);return this._prevSetMuted=this._prevSetMuted.then(t,t),this._prevSetMuted}_removeStreamFromConferenceAsMute(e,t){this.conference?this.conference._removeLocalTrackFromPc(this).then(e,(e=>t(new Error(e)))):e()}_sendMuteStatus(e){this.conference&&this.conference._setTrackMuteStatus(this.getType(),this,e)&&this.conference.room.sendPresence()}_setMuted(e){if(this.isMuted()===e&&this.videoType!==Qo.VideoType.DESKTOP)return Promise.resolve();if(this.disposed)return Promise.reject(new dr(tr));let t=Promise.resolve();const n=()=>sc.info(`Mute ${this}: ${e}`),i=ci.isReactNative()?this.videoType===Qo.VideoType.DESKTOP:ci.doesVideoMuteByStreamRemove();if(this.isAudioTrack()||!i)n(),this._streamEffect&&this._streamEffect.setMuted?this._streamEffect.setMuted(e):this.track&&(this.track.enabled=!e);else if(e)t=new Promise(((e,t)=>{n(),this._removeStreamFromConferenceAsMute((()=>{this._streamEffect&&this._stopStreamEffect(),this._unregisterHandlers(),this.stopStream(),this._setStream(null),e()}),t)}));else{n();const e={cameraDeviceId:this.getDeviceId(),devices:[Ri.VIDEO],effects:this._streamEffect?[this._streamEffect]:[],facingMode:this.getCameraFacingMode()};t=nc.obtainAudioAndVideoPermissions(Object.assign({},e,{constraints:{video:this._constraints}})),t=t.then((e=>{const t=e.find((e=>e.track.kind===this.getType()));if(!t)throw new dr(nr);return this._setStream(t.stream),this.track=t.track,this.videoType!==t.videoType&&(sc.warn(`${this}: video type has changed after unmute!`,this.videoType,t.videoType),this.videoType=t.videoType),this._streamEffect&&this._startStreamEffect(this._streamEffect),this.containers.map((e=>nc.attachMediaStream(e,this.stream).catch((()=>{sc.error(`Attach media failed for ${this} on video unmute!`)})))),this._addStreamToConferenceAsUnmute()}))}return t.then((()=>{this._sendMuteStatus(e),this.isVideoTrack()&&this.conference&&this.conference._sendBridgeVideoTypeMessage(this),this.emit(Rt,this)}))}_setRealDeviceIdFromDeviceList(e){const t=this.getTrack(),n=`${t.kind}input`;let i=e.find((e=>e.kind===n&&e.label===t.label&&e.deviceId===this.deviceId));if(!i&&"default"===this._realDeviceId){const r=(t.label||"").replace("Default - ","");i=e.find((e=>e.kind===n&&e.label===r))}this._realDeviceId=i?i.deviceId:void 0}_setStream(e){super._setStream(e)}_startStreamEffect(e){this._streamEffect=e,this._originalStream=this.stream,this._setStream(this._streamEffect.startEffect(this._originalStream)),this.track=this.stream.getTracks()[0]}_stopStreamEffect(){this._streamEffect&&(this._streamEffect.stopEffect(),this._setStream(this._originalStream),this._originalStream=null,this.track=this.stream?this.stream.getTracks()[0]:null)}_switchCamera(){this.isVideoTrack()&&this.videoType===Qo.VideoType.CAMERA&&"function"==typeof this.track._switchCamera&&(this.track._switchCamera(),this._facingMode=this._facingMode===Va.ENVIRONMENT?Va.USER:Va.ENVIRONMENT)}_switchStreamEffect(e){this._streamEffect&&(this._stopStreamEffect(),this._streamEffect=void 0),e&&this._startStreamEffect(e)}async dispose(){return this._streamEffect&&await this.setEffect(),this.conference&&await this.conference.removeTrack(this),this.stream&&(this.stopStream(),this.detach()),nc.removeListener(ji.default.DEVICE_LIST_WILL_CHANGE,this._onDeviceListWillChange),this._onAudioOutputDeviceChanged&&nc.removeListener(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,this._onAudioOutputDeviceChanged),super.dispose()}getCameraFacingMode(){if(this.isVideoTrack()&&this.videoType===Qo.VideoType.CAMERA){var e,t;const n=null===(e=(t=this.track).getSettings)||void 0===e?void 0:e.call(t);return n&&"facingMode"in n?n.facingMode:void 0!==this._facingMode?this._facingMode:Va.USER}}getCaptureResolution(){return this.videoType!==Qo.VideoType.CAMERA&&ci.isWebKitBased()?this.getHeight():this.resolution}getDeviceId(){return this._realDeviceId||this.deviceId}getDuration(){return Date.now()/1e3-this.metadata.timestamp/1e3}getParticipantId(){return this.conference&&this.conference.myUserId()}getSourceName(){return this._sourceName}isEnded(){return this.isVideoTrack()&&this.isMuted()?this._trackEnded:"ended"===this.getTrack().readyState||this._trackEnded}isLocal(){return!0}isMuted(){return!this.stream||!(!this.isVideoTrack()||this.isActive())||(this._streamEffect&&this._streamEffect.isMuted?this._streamEffect.isMuted():!this.track||!this.track.enabled)}isReceivingData(){return!(!this.isVideoTrack()||!this.isMuted()&&!this._stopStreamInProgress&&this.videoType!==Qo.VideoType.DESKTOP)||!!this.stream&&(this._effectEnabled?this._originalStream:this.stream).getTracks().some((e=>!("readyState"in e&&"live"!==e.readyState||"muted"in e&&!0===e.muted)))}mute(){return this._queueSetMuted(!0)}onByteSentStatsReceived(e,t){t>0&&(this._hasSentData=!0);const n=e.getConnectionState();this._testDataSent&&"connected"===n&&(setTimeout((()=>{this._hasSentData||(sc.warn(`${this} \'bytes sent\' <= 0: ${t}`),Mi.analytics.sendEvent(tn,{media_type:this.getType()}))}),3e3),this._testDataSent=!1)}setConference(e){this.conference=e}setEffect(e){if(void 0===this._streamEffect&&void 0===e)return Promise.resolve();if(void 0!==e&&!e.isEnabled(this))return Promise.reject(new Error("Incompatible effect instance!"));if(!0===this._setEffectInProgress)return Promise.reject(new Error("setEffect already in progress!"));if(this.isMuted()&&!this.isAudioTrack())return this._streamEffect=e,Promise.resolve();const t=this.conference;return t?(this._setEffectInProgress=!0,t._removeLocalTrackFromPc(this).then((()=>(this._switchStreamEffect(e),this.isVideoTrack()&&this.containers.forEach((e=>{nc.attachMediaStream(e,this.stream).catch((()=>{sc.error(`Attach media failed for ${this} when trying to set effect.`)}))})),t._addLocalTrackToPc(this)))).then((()=>{this._setEffectInProgress=!1})).catch((e=>{throw this._setEffectInProgress=!1,this._switchStreamEffect(),sc.error("Failed to switch to the new stream!",e),e}))):(this._switchStreamEffect(e),this.isVideoTrack()&&this.containers.forEach((e=>{nc.attachMediaStream(e,this.stream).catch((()=>{sc.error(`Attach media failed for ${this} when trying to set effect.`)}))})),Promise.resolve())}setSourceName(e){this._sourceName=e}stopStream(){this._stopStreamInProgress=!0;try{nc.stopMediaStream(this.stream)}finally{this._stopStreamInProgress=!1}}toString(){return`LocalTrack[${this.rtcId},${this.getType()}]`}unmute(){return this._queueSetMuted(!1)}}var dc=n(561);const cc=function(e,t){return void 0!==e&&void 0!==e.media&&Array.isArray(e.media)&&e.media.forEach((e=>{e.sources&&e.sources.length&&(e.ssrcs=[],e.sources.forEach((t=>{Object.keys(t).forEach((n=>{"id"!==n&&e.ssrcs.push({id:t.id,attribute:n,value:t[n]})}))})),delete e.sources),e.ssrcGroups&&e.ssrcGroups.length&&e.ssrcGroups.forEach((e=>{void 0!==e.ssrcs&&Array.isArray(e.ssrcs)&&(e.ssrcs=e.ssrcs.join(" "))}))})),dc.write(e,t)},lc=function(e){const t=dc.parse(e);return void 0!==t&&void 0!==t.media&&Array.isArray(t.media)&&t.media.forEach((e=>{void 0!==e.ssrcs&&Array.isArray(e.ssrcs)&&(e.sources=[],e.ssrcs.forEach((t=>{const n=e.sources.findIndex((e=>e.id===t.id));if(n>-1)e.sources[n][t.attribute]=t.value;else{const n={id:t.id};n[t.attribute]=t.value,e.sources.push(n)}})),delete e.ssrcs),void 0!==e.ssrcGroups&&Array.isArray(e.ssrcGroups)&&e.ssrcGroups.forEach((e=>{"string"==typeof e.ssrcs&&(e.ssrcs=e.ssrcs.split(" "))}))})),t},hc=["audio","video","data"],uc=e=>e.find((e=>"SIM"===e.semantics)),pc=e=>e.find((e=>"FID"===e.semantics));function mc(e,t,n,i){if(!e||!t)return;const r=e=>i.find((t=>t.id.toString()===e));t.ssrcs.forEach((t=>{e.sources.push(r(t));const i=n[parseInt(t,10)].find((e=>"FID"===e.semantics));if(i){const n=i.ssrcs.find((e=>e!==t));e.sources.push(r(n)),e.ssrcGroups.push(i)}})),e.ssrcGroups.push(t)}function gc(e,t,n,i){if(!e||!t)return;if(e.sources=[],e.ssrcGroups=[],!n[t.id])return e.sources.push(t),void(e.msid=t.msid);const r=uc(n[t.id]),o=pc(n[t.id]);if(r)mc(e,r,n,i);else if(o){const r=o.ssrcs.find((e=>e!==t)),s=uc(n[r]);s?mc(e,s,n,i):(o.ssrcs.forEach((t=>{e.sources.push((e=>i.find((t=>t.id.toString()===e)))(t))})),e.ssrcGroups.push(o))}e.msid=e.sources[0].msid}function fc(e,t,n){if(!n.find((t=>!!t.sources&&t.sources.some((t=>t.id===e.id))))){if(!t[e.id])return!1;const i=uc(t[e.id]),r=pc(t[e.id]);return i?n.some((e=>e.sources&&e.sources.some((e=>e.id.toString()===i.ssrcs[0])))):!(!r||e.id.toString()===r.ssrcs[0])&&fc({id:r.ssrcs[0]},t,n)}return!0}class vc{toPlanB(e){if(!e||"string"!=typeof e.sdp)return console.warn("An empty description was passed as an argument."),e;const t=lc(e.sdp);if(!t.media||!t.media.length)return console.warn("The description has no media."),e;if(t.media.every((e=>-1!==hc.indexOf(e.mid))))return console.warn("The description does not look like unified plan sdp"),e;const n={},i=t.media;t.media=[],i.forEach((e=>{const t=e.type;if("application"===t)return e.mid="data",void(n[e.mid]=e);if(void 0===n[t]){const i=Es(e);i.sources&&Array.isArray(i.sources)&&i.sources.forEach((t=>{e.msid?t.msid=e.msid:delete t.msid})),i.ssrcGroups&&e.msid||(i.ssrcGroups=[]),delete i.msid,i.mid=t,n[t]=i}else if(e.msid){const i=Es(e);i.sources&&Array.isArray(i.sources)&&(i.sources.forEach((t=>{t.msid=e.msid})),n[t].sources=(n[t].sources||[]).concat(i.sources)),void 0!==i.ssrcGroups&&Array.isArray(i.ssrcGroups)&&(n[t].ssrcGroups=(n[t].ssrcGroups||[]).concat(i.ssrcGroups))}})),t.media=Object.values(n);const r=[];Object.values(n).forEach((e=>{"inactive"!==e.direction&&r.push(e.mid)})),t.groups.forEach((e=>{"BUNDLE"===e.type&&(e.mids=r.join(" "))})),t.msidSemantic={semantic:"WMS",token:"*"};const o=cc(t);return new RTCSessionDescription({type:e.type,sdp:o})}toUnifiedPlan(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e||"string"!=typeof e.sdp)return console.warn("An empty description was passed as an argument."),e;const n=lc(e.sdp);if(!n.media||!n.media.length)return console.warn("The description has no media."),e;if(n.media.length>3||n.media.every((e=>-1===hc.indexOf(e.mid))))return console.warn("The description does not look like plan-b"),e;const i=t?lc(t.sdp):null,r=function(e,t){if(!e||!t||0===e.media.length||0===t.media.length)return!1;const n=e.media[0],i=t.media[0];return n.iceUfrag!==i.iceUfrag||n.icePwd!==i.icePwd}(n,i),o=n.media[0].iceUfrag,s=n.media[0].icePwd,a=n.media[0].fingerprint,d={};n.media.forEach((e=>{const t=e.type;if("application"===t){if(!i||!i.media){const t=Es(e);return t.mid=Object.keys(d).length.toString(),void(d[e.mid]=t)}const n=i.media.findIndex((e=>e.type===t));return void(n&&(i.media[n]=e,i.media[n].mid=n))}const n=function(e){const t={};return e&&Array.isArray(e)?(e.forEach((e=>{e.ssrcs&&Array.isArray(e.ssrcs)&&e.ssrcs.forEach((n=>{void 0===t[n]&&(t[n]=[]),t[n].push(e)}))})),t):t}(e.ssrcGroups);if(e.sources)e.sources.forEach(((t,r)=>{if(!t.msid)return;if(!i||!i.media){if(fc(t,n,Object.values(d)))return;const i=Es(e);return i.mid=Object.keys(d).length.toString(),i.direction=r||"sendonly"===e.direction?"sendonly":"sendrecv",i.bundleOnly=void 0,gc(i,t,n,e.sources),void(d[i.mid]=i)}if(fc(t,n,i.media))return;const o=Es(e);o.mid=i.media.length.toString(),o.direction="sendonly",gc(o,t,n,e.sources),i.media.push(o)}));else if(!i){const t=Es(e);t.mid=Object.keys(d).length.toString(),d[e.mid]=t}})),n.media=i?i.media:Object.values(d);const c=[];n.media.forEach((e=>{c.push(e.mid),r&&(e.iceUfrag=o,e.icePwd=s,e.fingerprint=a)})),n.groups.forEach((e=>{"BUNDLE"===e.type&&(e.mids=c.join(" "))})),n.msidSemantic={semantic:"WMS",token:"*"},n.origin.sessionVersion++;const l=cc(n);return new RTCSessionDescription({type:e.type,sdp:l})}}let _c;!function(e){e.PEER_MUTED_CHANGED="signaling.peerMuted",e.PEER_VIDEO_TYPE_CHANGED="signaling.peerVideoType",e.SOURCE_MUTED_CHANGED="signaling.sourceMuted",e.SOURCE_UPDATED="signaling.sourceUpdated",e.SOURCE_VIDEO_TYPE_CHANGED="signaling.sourceVideoType"}(_c||(_c={}));const yc=_c.PEER_MUTED_CHANGED,Ec=_c.PEER_VIDEO_TYPE_CHANGED,Sc=_c.SOURCE_MUTED_CHANGED,bc=_c.SOURCE_UPDATED,Tc=_c.SOURCE_VIDEO_TYPE_CHANGED;function Cc(e,t,n){return`${e}-${t.substring(0,1)}${n}`}function xc(e){const t=e.lastIndexOf("-")+1;if(t<=0)throw new Error(`Invalid source name: ${e}`);const n=e.substr(t,1);for(const e of Object.values(Ri))if(e.substr(0,1)===n)return e;throw new Error(`Invalid source name: ${e}`)}function Rc(e){const t=e.split("-"),n=Number(t[t.length-1].substring(1));if(Number.isNaN(n))throw new Error(`Failed to parse track idx for source name: ${e}`);return n}class Ac extends xr{getPeerMediaInfo(e,t,n){throw new Error("not implemented")}getPeerSourceInfo(e,t){throw new Error("not implemented")}getSSRCOwner(e){throw new Error("not implemented")}getTrackSourceName(e){throw new Error("not implemented")}removeSSRCOwners(e){}setSSRCOwner(e,t,n){}setTrackMuteStatus(e,t){}setTrackVideoType(e,t){}updateSsrcOwnersOnLeave(e){}}const wc=[{rid:"1",scaleFactor:4},{rid:"2",scaleFactor:2},{rid:"3",scaleFactor:1}],Ic={av1:{maxBitratesVideo:{low:1e5,standard:3e5,high:1e6,fullHd:2e6,ultraHd:4e6,ssHigh:25e5,none:0},scalabilityModeEnabled:ci.supportsScalabilityModeAPI(),useSimulcast:!1,useKSVC:!0},h264:{maxBitratesVideo:{low:2e5,standard:5e5,high:15e5,fullHd:3e6,ultraHd:6e6,ssHigh:25e5,none:0},scalabilityModeEnabled:ci.supportsScalabilityModeAPI()},vp8:{maxBitratesVideo:{low:2e5,standard:5e5,high:15e5,fullHd:3e6,ultraHd:6e6,ssHigh:25e5,none:0},scalabilityModeEnabled:!1},vp9:{maxBitratesVideo:{low:1e5,standard:3e5,high:12e5,fullHd:25e5,ultraHd:5e6,ssHigh:25e5,none:0},scalabilityModeEnabled:ci.supportsScalabilityModeAPI(),useSimulcast:!1,useKSVC:!0}},Pc=[{height:2160,level:"ultraHd"},{height:1080,level:"fullHd"},{height:720,level:"high"},{height:540,level:"standard"},{height:480,level:"standard"},{height:360,level:"standard"},{height:270,level:"low"},{height:180,level:"low"},{height:90,level:"low"},{height:0,level:"none"}];let Dc;function Oc(e){return parseInt(e.ssrcs.split(" ")[0],10)}function kc(e){return parseInt(e.ssrcs.split(" ")[1],10)}function Nc(e){return e.ssrcs?e.ssrcs.map((e=>e.id)).filter(((e,t,n)=>n.indexOf(e)===t)).length:0}!function(e){e.ULTRA="ultraHd",e.FULL="fullHd",e.HIGH="high",e.STANDARD="standard",e.LOW="low",e.NONE="none"}(Dc||(Dc={}));class Mc{constructor(e){if(!e)throw new Error("mLine is undefined");this.mLine=e}get ssrcs(){return this.mLine.ssrcs||(this.mLine.ssrcs=[]),this.mLine.ssrcs}set ssrcs(e){this.mLine.ssrcs=e}get direction(){return this.mLine.direction}set direction(e){this.mLine.direction=e}get ssrcGroups(){return this.mLine.ssrcGroups||(this.mLine.ssrcGroups=[]),this.mLine.ssrcGroups}set ssrcGroups(e){this.mLine.ssrcGroups=e}getSSRCAttrValue(e,t){const n=this.ssrcs.find((n=>n.id===e&&n.attribute===t));return n&&n.value}removeSSRC(e){this.mLine.ssrcs&&this.mLine.ssrcs.length&&(this.mLine.ssrcs=this.mLine.ssrcs.filter((t=>t.id!==e)))}addSSRCAttribute(e){this.ssrcs.push(e)}findGroup(e,t){return this.ssrcGroups.find((n=>n.semantics===e&&(!t||t===n.ssrcs)))}findGroups(e){return this.ssrcGroups.filter((t=>t.semantics===e))}findGroupByPrimarySSRC(e,t){return this.ssrcGroups.find((n=>n.semantics===e&&Oc(n)===t))}findSSRCByMSID(e){return this.ssrcs.find((t=>"msid"===t.attribute&&(null===e||t.value===e)))}getSSRCCount(){return Nc(this.mLine)}containsAnySSRCGroups(){return void 0!==this.mLine.ssrcGroups}getPrimaryVideoSsrc(){const e=this.mLine.type;if("video"!==e)throw new Error(`getPrimarySsrc doesn\'t work with \'${e}\'`);if(1===Nc(this.mLine))return this.mLine.ssrcs[0].id;if(this.mLine.ssrcGroups){const e=this.findGroup("SIM");if(e)return Oc(e);const t=this.findGroup("FID");if(t)return Oc(t);const n=this.findGroup("FEC-FR");if(n)return Oc(n)}}getRtxSSRC(e){const t=this.findGroupByPrimarySSRC("FID",e);return t&&kc(t)}getSSRCs(){return this.ssrcs.map((e=>e.id)).filter(((e,t,n)=>n.indexOf(e)===t))}getPrimaryVideoSSRCs(){const e=this.mLine.type;if("video"!==e)throw new Error(`getPrimaryVideoSSRCs doesn\'t work with ${e}`);const t=this.getSSRCs();for(const e of this.ssrcGroups)if("FID"===e.semantics||"FEC-FR"===e.semantics){const n=kc(e);t.splice(t.indexOf(n),1)}return t}dumpSSRCGroups(){return JSON.stringify(this.mLine.ssrcGroups)}removeGroupsWithSSRC(e){this.mLine.ssrcGroups&&(this.mLine.ssrcGroups=this.mLine.ssrcGroups.filter((t=>-1===t.ssrcs.indexOf(`${e}`))))}removeGroupsBySemantics(e){this.mLine.ssrcGroups&&(this.mLine.ssrcGroups=this.mLine.ssrcGroups.filter((t=>t.semantics!==e)))}replaceSSRC(e,t){this.mLine.ssrcs&&this.mLine.ssrcs.forEach((n=>{n.id===e&&(n.id=t)}))}addSSRCGroup(e){this.ssrcGroups.push(e)}}class Lc{constructor(e){this.parsedSDP=Ps.parse(e)}selectMedia(e){const t=this.parsedSDP.media.filter((t=>t.type===e)).map((e=>new Mc(e)));return null!=t?t:null}toRawSDP(){return Ps.write(this.parsedSDP)}}const Fc=(0,E.getLogger)("modules/sdp/LocalSdpMunger.js");class jc{constructor(e,t){this.tpc=e,this.localEndpointId=t,this.audioSourcesToMsidMap=new Map,this.videoSourcesToMsidMap=new Map}_generateMsidAttribute(e,t,n){if(!e||!t)return Fc.error(`Unable to munge local MSID - track id=${t} or media type=${e} is missing`),null;const i=this.tpc.id;return`${n}-${i} ${t}-${i}`}_transformMediaIdentifiers(e){var t,n,i,r,o;const s=null===(t=e.mLine)||void 0===t?void 0:t.type,a=null===(n=e.mLine)||void 0===n?void 0:n.direction,d=null===(i=e.mLine)||void 0===i?void 0:i.msid,c=[...new Set(null===(r=e.mLine)||void 0===r||null===(o=r.ssrcs)||void 0===o?void 0:o.map((e=>e.id)))],l=`${this.localEndpointId}-${s}`;let h=d?d.split(" ")[1]:`${this.localEndpointId}-${e.mLine.mid}`;for(const t of c){const n=e.ssrcs.find((e=>e.id===t&&"msid"===e.attribute));n&&(h=n.value.split(" ")[1]),this._updateSourcesToMsidMap(s,l,h);const i=s===Ri.VIDEO?this.videoSourcesToMsidMap.get(h):this.audioSourcesToMsidMap.get(h),r=this._generateMsidAttribute(s,h,i);n?n.value=r:a!==As.SENDONLY&&a!==As.SENDRECV||e.ssrcs.push({id:t,attribute:"msid",value:r})}e.ssrcs=e.ssrcs.filter((e=>"msid"===e.attribute)),!ci.isFirefox()||a!==As.RECVONLY&&a!==As.INACTIVE||(s!==Ri.VIDEO||this.tpc._hasHadVideoTrack)&&(s!==Ri.AUDIO||this.tpc._hasHadAudioTrack)||(e.ssrcs=void 0,e.ssrcGroups=void 0)}_updateSourcesToMsidMap(e,t,n){if(e===Ri.VIDEO){if(!this.videoSourcesToMsidMap.has(n)){const e=`${t}-${this.videoSourcesToMsidMap.size}`;this.videoSourcesToMsidMap.set(n,e)}}else if(!this.audioSourcesToMsidMap.has(n)){const e=`${t}-${this.audioSourcesToMsidMap.size}`;this.audioSourcesToMsidMap.set(n,e)}}transformStreamIdentifiers(e){var t;if(!e||!e.sdp||!e.type)return e;const n=new Lc(e.sdp),i=null===(t=n.selectMedia(Ri.AUDIO))||void 0===t?void 0:t[0];i&&(this._transformMediaIdentifiers(i),this._injectSourceNames(i));const r=n.selectMedia(Ri.VIDEO);for(const e of r)this._transformMediaIdentifiers(e),this._injectSourceNames(e);return this.audioSourcesToMsidMap.clear(),this.videoSourcesToMsidMap.clear(),new RTCSessionDescription({type:e.type,sdp:n.toRawSDP()})}_injectSourceNames(e){var t,n,i;const r=[...new Set(null===(t=e.mLine)||void 0===t||null===(n=t.ssrcs)||void 0===n?void 0:n.map((e=>e.id)))],o=null===(i=e.mLine)||void 0===i?void 0:i.type;if(!o)throw new Error("_transformMediaIdentifiers - no media type in mediaSection");for(const t of r){const n=e.ssrcs.find((e=>e.id===t&&"name"===e.attribute)),i=e.ssrcs.find((e=>e.id===t&&"msid"===e.attribute)).value.split(" ")[0].split("-"),r=i[i.length-2],a=Cc(this.localEndpointId,o,r);if(n||e.ssrcs.push({id:t,attribute:"name",value:a}),o===Ri.VIDEO){var s;const n=null===(s=this.tpc.getLocalVideoTracks().find((e=>e.getSourceName()===a)))||void 0===s?void 0:s.getVideoType();n&&e.ssrcs.push({id:t,attribute:"videoType",value:n})}}}}const Vc=(0,E.getLogger)("modules/sdp/RtxModifier.js");function Uc(e,t,n){const i=t.id,r=t.msid,o=t.cname,s=e.getRtxSSRC(i);s!==n&&(s&&(e.removeSSRC(s),e.removeGroupsWithSSRC(s)),e.addSSRCAttribute({id:n,attribute:"cname",value:o}),r&&e.addSSRCAttribute({id:n,attribute:"msid",value:r}),e.addSSRCGroup({semantics:"FID",ssrcs:`${i} ${n}`}))}class Hc{constructor(){this.correspondingRtxSsrcs=new Map}clearSsrcCache(){this.correspondingRtxSsrcs.clear()}setSsrcCache(e){Vc.debug("Setting ssrc cache to ",e),this.correspondingRtxSsrcs=e}modifyRtxSsrcs(e){let t=!1;const n=new Lc(e),i=n.selectMedia(Ri.VIDEO);if(null==i||!i.length)return Vc.debug(`No \'video\' media found in the sdp: ${e}`),e;for(const e of i)this.modifyRtxSsrcs2(e)&&(t=!0);return t?n.toRawSDP():e}modifyRtxSsrcs2(e){if(e.direction===As.RECVONLY)return!1;if(e.getSSRCCount()<1)return!1;const t=e.getPrimaryVideoSSRCs();for(const n of t){const t=e.getSSRCAttrValue(n,"msid"),i=e.getSSRCAttrValue(n,"cname");let r=this.correspondingRtxSsrcs.get(n);if(!r){r=e.getRtxSSRC(n)||Ns.generateSsrc(),this.correspondingRtxSsrcs.set(n,r)}Uc(e,{id:n,cname:i,msid:t},r)}return!0}stripRtx(e){const t=new Lc(e),n=t.selectMedia(Ri.VIDEO);if(null==n||!n.length)return Vc.debug(`No \'video\' media found in the sdp: ${e}`),e;for(const e of n)if(e.direction!==As.RECVONLY&&e.getSSRCCount()&&e.containsAnySSRCGroups()){const t=e.findGroups("FID");e.removeGroupsBySemantics("FID");for(const n of t){const t=kc(n);e.removeSSRC(t)}}return t.toRawSDP()}}class $c{constructor(){this._ssrcCache=new Map,this._numOfLayers=wc.length}_fillSsrcsFromCache(e){const t=e.mid,n=this._ssrcCache.get(t),i=this._parseSimLayers(e),r=this._getSsrcAttribute(e,i[0],"msid"),o=this._getSsrcAttribute(e,i[0],"cname");e.ssrcs=[],e.ssrcGroups=[];for(const t of n)e.ssrcs.push({id:t,attribute:"msid",value:r}),e.ssrcs.push({id:t,attribute:"cname",value:o});return e.ssrcGroups.push({semantics:"SIM",ssrcs:n.join(" ")}),e}_generateNewSsrcsForSimulcast(e,t){const n=this._getSsrcAttribute(e,t,"cname");let i=this._getSsrcAttribute(e,t,"msid");const r=(e,t)=>{e.ssrcs.push({id:t,attribute:"cname",value:n}),e.ssrcs.push({id:t,attribute:"msid",value:i})};i||(i=e.msid,e.ssrcs.forEach((t=>{e.ssrcs.push({id:t.id,attribute:"msid",value:i})})));const o=[];for(let t=0;tNumber(e.id)===t&&e.attribute===n)))||void 0===r?void 0:r.value}_parseSimLayers(e){var t,n;const i=null===(t=e.ssrcGroups)||void 0===t?void 0:t.find((e=>"SIM"===e.semantics));return i?i.ssrcs.split(" ").map((e=>Number(e))):null!==(n=e.ssrcs)&&void 0!==n&&n.length?[Number(e.ssrcs[0].id)]:null}mungeLocalDescription(e){if(!e||!e.sdp)return e;const t=Ps.parse(e.sdp);for(let e of t.media){var n,i,r;if(e.direction===As.RECVONLY||e.direction===As.INACTIVE)continue;if(e.type!==Ri.VIDEO)continue;const t=e.mid,s=new Set(null===(n=e.ssrcs)||void 0===n?void 0:n.map((e=>e.id))),a=null!==(i=null===(r=e.ssrcGroups)||void 0===r?void 0:r.length)&&void 0!==i?i:0;let d;if(!(0===s.size||s.size>2||2===s.size&&0===a)){if(1===s.size){var o;d=Number(null===(o=e.ssrcs[0])||void 0===o?void 0:o.id)}else{const t=e.ssrcGroups.find((e=>"FID"===e.semantics));t&&(d=Number(t.ssrcs.split(" ")[0]))}if(this._ssrcCache.has(t))e=this._fillSsrcsFromCache(e);else{e=this._generateNewSsrcsForSimulcast(e,d);const n=this._parseSimLayers(e);this._ssrcCache.set(t,n)}}}return new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})}}let Jc;!function(e){e.ACTIVE="active",e.INACTIVE="inactive",e.INTERRUPTED="interrupted",e.RESTORING="restoring"}(Jc||(Jc={}));const Bc=(0,E.getLogger)("modules/connectivity/TrackStreamingStatus.ts");class qc{static _getNewStateForJvbMode(e,t,n,i){return n?Jc.ACTIVE:ci.supportsVideoMuteOnConnInterrupted()||i?i?e?t?Jc.INTERRUPTED:Jc.RESTORING:Jc.INACTIVE:Jc.ACTIVE:e?Jc.ACTIVE:Jc.INACTIVE}static _getNewStateForP2PMode(e,t){return ci.supportsVideoMuteOnConnInterrupted()||t?e||!t?Jc.ACTIVE:Jc.INTERRUPTED:Jc.ACTIVE}constructor(e,t,n,i){this.rtc=e,this.conference=t,this.track=n,this.restoringTimer=null,this.rtcMutedTimestamp=null,this.streamingStatusMap={},this.trackTimer=null,this._lastFramesDecoded=null,this._lastFramesDecodedAt=null,this._statsTrackFrozen=!1,this.outOfForwardedSourcesTimeout="number"==typeof i.outOfForwardedSourcesTimeout?i.outOfForwardedSourcesTimeout:500,this.p2pRtcMuteTimeout="number"==typeof i.p2pRtcMuteTimeout?i.p2pRtcMuteTimeout:2500,this.rtcMuteTimeout="number"==typeof i.rtcMuteTimeout?i.rtcMuteTimeout:1e4,Bc.info(`RtcMuteTimeout set to: ${this.rtcMuteTimeout}`)}_getVideoFrozenTimeout(){const e=this.track.getSourceName();return this.rtc.isInForwardedSources(e)?this.rtcMuteTimeout:this.conference.isP2PActive()?this.p2pRtcMuteTimeout:this.outOfForwardedSourcesTimeout}init(){this._onP2PStatus=this.figureOutStreamingStatus.bind(this),this.conference.on(B.P2P_STATUS,this._onP2PStatus),this._onUserLeft=this.onUserLeft.bind(this),this.conference.on(B.USER_LEFT,this._onUserLeft),ci.supportsVideoMuteOnConnInterrupted()&&(this._onTrackRtcMuted=this.onTrackRtcMuted.bind(this),this.rtc.addListener(ji.default.REMOTE_TRACK_MUTE,this._onTrackRtcMuted),this._onTrackRtcUnmuted=this.onTrackRtcUnmuted.bind(this),this.rtc.addListener(ji.default.REMOTE_TRACK_UNMUTE,this._onTrackRtcUnmuted),this._onSignallingMuteChanged=this.onSignallingMuteChanged.bind(this),this.track.on(Rt,this._onSignallingMuteChanged),this._onTrackVideoTypeChanged=this.onTrackVideoTypeChanged.bind(this),this.track.on(At,this._onTrackVideoTypeChanged)),this._onForwardedSourcesChanged=this.onForwardedSourcesChanged.bind(this),this.conference.on(B.FORWARDED_SOURCES_CHANGED,this._onForwardedSourcesChanged),this._onLastNValueChanged=this.figureOutStreamingStatus.bind(this),this.rtc.on(ji.default.LASTN_VALUE_CHANGED,this._onLastNValueChanged),!ci.supportsVideoMuteOnConnInterrupted()&&this.track.isVideoTrack()&&(this._onConnectionStats=(e,t)=>this._handleFramesDecodedUpdate(t),this.conference.statistics.addConnectionStatsListener(this._onConnectionStats))}dispose(){ci.supportsVideoMuteOnConnInterrupted()?(this.rtc.removeListener(ji.default.REMOTE_TRACK_MUTE,this._onTrackRtcMuted),this.rtc.removeListener(ji.default.REMOTE_TRACK_UNMUTE,this._onTrackRtcUnmuted),this.track.off(Rt,this._onSignallingMuteChanged),this.track.off(At,this._onTrackVideoTypeChanged)):this.track.isVideoTrack()&&(this.conference.statistics.removeConnectionStatsListener(this._onConnectionStats),this._statsTrackFrozen=!1),this.conference.off(B.FORWARDED_SOURCES_CHANGED,this._onForwardedSourcesChanged),this.conference.off(B.P2P_STATUS,this._onP2PStatus),this.conference.off(B.USER_LEFT,this._onUserLeft),this.rtc.removeListener(ji.default.LASTN_VALUE_CHANGED,this._onLastNValueChanged),this.clearTimeout(),this.clearRtcMutedTimestamp(),this.maybeSendTrackStreamingStatusEvent(Date.now()),this.figureOutStreamingStatus()}_changeStreamingStatus(e){if(this.track.getTrackStreamingStatus()!==e){const t=this.track.getSourceName();this.track._setTrackStreamingStatus(e),Bc.debug(`Emit track streaming status(${Date.now()}) ${t}: ${e}`),this.track.emit(Pt,this.track,e)}}clearTimeout(){this.trackTimer&&(window.clearTimeout(this.trackTimer),this.trackTimer=null)}clearRtcMutedTimestamp(){this.rtcMutedTimestamp=null}isVideoTrackFrozen(){if(this._statsTrackFrozen)return!0;if(!ci.supportsVideoMuteOnConnInterrupted())return!1;const e=this.track.isWebRTCTrackMuted(),t=this.rtcMutedTimestamp,n=this._getVideoFrozenTimeout();return e&&"number"==typeof t&&Date.now()-t>=n}_handleFramesDecodedUpdate(e){var t;if(this.track.isP2P!==this.conference.isP2PActive())return this._lastFramesDecoded=null,this._lastFramesDecodedAt=null,void(this._statsTrackFrozen&&(this._statsTrackFrozen=!1,this.figureOutStreamingStatus()));if(this.track.isMuted()||null==e.framesDecoded)return;const n=this.track.getSSRC(),i=e.framesDecoded.get(n),r=Date.now();if(null==i)null===this._lastFramesDecodedAt&&(this._lastFramesDecodedAt=r);else if(i>(null!==(t=this._lastFramesDecoded)&&void 0!==t?t:-1))return this._lastFramesDecodedAt=r,this._lastFramesDecoded=i,void(this._statsTrackFrozen&&(Bc.debug(`Stats-based freeze cleared for ${this.track.getSourceName()}`),this._statsTrackFrozen=!1,this.figureOutStreamingStatus()));null!==this._lastFramesDecodedAt&&r-this._lastFramesDecodedAt>=this._getVideoFrozenTimeout()&&!this._statsTrackFrozen&&(Bc.debug(`Stats-based freeze detected for ${this.track.getSourceName()}`),this._statsTrackFrozen=!0,this.figureOutStreamingStatus())}figureOutStreamingStatus(){const e=this.track.getSourceName(),t=this.conference.isP2PActive(),n=this._isRestoringTimedout(),i=0===this.conference.getLastN(),r=this.track.isMuted()||i,o=this.isVideoTrackFrozen(),s=this.rtc.isInForwardedSources(e),a=t?qc._getNewStateForP2PMode(r,o):qc._getNewStateForJvbMode(s,n,r,o);a!==Jc.RESTORING&&this._clearRestoringTimer(),Bc.debug(`Figure out conn status for ${e}, is video muted: ${r} video track frozen: ${o} p2p mode: ${t} is in forwarded sources: ${s} currentStatus => newStatus: ${this.track.getTrackStreamingStatus()} => ${a}`);const d=this.streamingStatusMap||{};if(!("p2p"in d)||!("streamingStatus"in d)||d.p2p!==t||d.streamingStatus!==a){const e=Date.now();this.maybeSendTrackStreamingStatusEvent(e),this.streamingStatusMap={...d,streamingStatus:a,p2p:t,startedMs:e},"videoType"in this.streamingStatusMap||(this.streamingStatusMap.videoType=this.track.getVideoType())}this._changeStreamingStatus(a)}maybeSendTrackStreamingStatusEvent(e){const t=this.streamingStatusMap;t&&"startedMs"in t&&"videoType"in t&&"streamingStatus"in t&&"p2p"in t&&(t.value=e-t.startedMs,Mi.sendAnalytics(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:kt.TYPE_OPERATIONAL,source:"track.streaming.status",action:"duration",attributes:e}}(t)))}onForwardedSourcesChanged(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0;const i=this.track.getSourceName();ci.supportsVideoMuteOnConnInterrupted()||this.figureOutStreamingStatus(),e.includes(i)&&(this.track._clearEnteredForwardedSourcesTimestamp(),this._clearRestoringTimer(),ci.supportsVideoMuteOnConnInterrupted()&&this.figureOutStreamingStatus()),t.includes(i)&&(this.track._setEnteredForwardedSourcesTimestamp(n),ci.supportsVideoMuteOnConnInterrupted()&&this.figureOutStreamingStatus())}_clearRestoringTimer(){const e=this.restoringTimer;e&&(clearTimeout(e),this.restoringTimer=null)}_isRestoringTimedout(){const e=this.track._getEnteredForwardedSourcesTimestamp();return!!(e&&Date.now()-e>=1e4)||(this.restoringTimer||(this.restoringTimer=setTimeout((()=>this.figureOutStreamingStatus()),1e4)),!1)}_isCurrentTrack(e){return e.getSourceName()===this.track.getSourceName()}onUserLeft(e){this.track.getParticipantId()===e&&(this.maybeSendTrackStreamingStatusEvent(Date.now()),this.streamingStatusMap={})}onTrackRtcMuted(e){if(!this._isCurrentTrack(e))return;const t=e.getSourceName();if(Bc.debug(`Detector track RTC muted: ${t}`,Date.now()),this.rtcMutedTimestamp=Date.now(),!e.isMuted()){this.clearTimeout();const e=this._getVideoFrozenTimeout();this.trackTimer=window.setTimeout((()=>{Bc.debug(`Set track RTC muted for: ${t} after the timeout of ${e} ms`),this.clearTimeout(),this.figureOutStreamingStatus()}),e)}}onTrackRtcUnmuted(e){if(!this._isCurrentTrack(e))return;const t=this.track.getSourceName();Bc.debug(`Detector track RTC unmuted: ${t}`,Date.now()),this.clearTimeout(),this.clearRtcMutedTimestamp(),this.figureOutStreamingStatus()}onSignallingMuteChanged(e){this._isCurrentTrack(e)&&(this.track.getSourceName(),this.figureOutStreamingStatus())}onTrackVideoTypeChanged(e){const t=Date.now();this.maybeSendTrackStreamingStatusEvent(t),this.streamingStatusMap={...this.streamingStatusMap||{},videoType:e,startedMs:t}}}const Gc=qc,zc=n(810).getLogger("modules/RTC/JitsiRemoteTrack.js"),Kc=n(987);let Wc=!1,Xc=!1;const Yc=["abort","canplaythrough","ended","error","stalled","suspend","waiting"];class Qc extends oc{constructor(e,t,n,i,r,o,s,a,d,c,l){if(super(t,i,r,(()=>{}),o,s),this.rtc=e,"number"!=typeof a)throw new TypeError(`SSRC ${a} is not a number`);this.ssrc=a,this.ownerEndpointId=n,this.muted=d,this.isP2P=c,this._sourceName=l,this._trackStreamingStatus=null,this._trackStreamingStatusImpl=null,this._enteredForwardedSourcesTimestamp=null,this.addEventListener=this.on=this._addEventListener.bind(this),this.removeEventListener=this.off=this._removeEventListener.bind(this),zc.debug(`New remote track created: ${this}`),this.hasBeenMuted=d,this.rtc&&this.track&&this._bindTrackHandlers(),this._containerHandlers={},Yc.forEach((e=>{this._containerHandlers[e]=this._containerEventHandler.bind(this,e)}))}_bindTrackHandlers(){this.track.addEventListener("mute",(()=>this._onTrackMute())),this.track.addEventListener("unmute",(()=>this._onTrackUnmute())),this.track.addEventListener("ended",(()=>{zc.debug(`"onended" event(${Date.now()}): ${this}`)}))}_addEventListener(e,t){super.addListener(e,t),e===Pt&&this.listenerCount(Pt)&&!this._trackStreamingStatusImpl&&(this._initTrackStreamingStatus(),zc.debug(`Initializing track streaming status: ${this._sourceName}`))}_removeEventListener(e,t){super.removeListener(e,t),e!==Pt||this.listenerCount(Pt)||(this._disposeTrackStreamingStatus(),zc.debug(`Disposing track streaming status: ${this._sourceName}`))}_onTrackMute(){zc.debug(`"onmute" event(${Date.now()}): ${this}`),this.videoType!==Qo.VideoType.DESKTOP?this.rtc.eventEmitter.emit(Kc.REMOTE_TRACK_MUTE,this):zc.debug("Ignoring mute event on desktop tracks.")}_onTrackUnmute(){zc.debug(`"onunmute" event(${Date.now()}): ${this}`),this.rtc.eventEmitter.emit(Kc.REMOTE_TRACK_UNMUTE,this)}dispose(){return this._disposeTrackStreamingStatus(),super.dispose()}setMute(e){this.muted!==e&&(e&&(this.hasBeenMuted=!0),this.stream&&(this.stream.muted=e),this.muted=e,zc.info(`Mute ${this}: ${e}`),this.emit(Rt,this))}isMuted(){return this.muted}getParticipantId(){return this.ownerEndpointId}isLocal(){return!1}getSSRC(){return this.ssrc}getSourceName(){return this._sourceName}setOwner(e){this.ownerEndpointId=e,this.emit(Dt,e)}setSourceName(e){this._sourceName=e}_setVideoType(e){this.videoType!==e&&(this.videoType=e,this.emit(At,e))}_playCallback(){if(!this.conference.room)return;const e=this.isVideoTrack()?"video":"audio",t=window.performance.now();zc.info(`(TIME) Render ${e}:\\t`,t),this.conference.getConnectionTimes()[`${e}.render`]=t;const n=window.connectionTimes["obtainPermissions.start"],i=window.connectionTimes["obtainPermissions.end"],r=isNaN(i)||isNaN(n)?0:i-n,o=t-(this.conference.getConnectionTimes()["session.initiate"]-this.conference.getConnectionTimes()["muc.joined"])-r;var s;this.conference.getConnectionTimes()[`${e}.ttfm`]=o,zc.info(`(TIME) TTFM ${e}:\\t`,o),Mi.sendAnalytics((s={media_type:e,muted:this.hasBeenMuted,value:o},sn("ttfm",s)))}_attachTTFMTracker(e){Wc&&this.isAudioTrack()||Xc&&this.isVideoTrack()||(this.isAudioTrack()&&(Wc=!0),this.isVideoTrack()&&(Xc=!0),e.addEventListener("canplay",this._playCallback.bind(this)))}_onTrackAttach(e){Yc.forEach((t=>{e.addEventListener(t,this._containerHandlers[t])}))}_onTrackDetach(e){Yc.forEach((t=>{e.removeEventListener(t,this._containerHandlers[t])}))}_containerEventHandler(e){zc.debug(`${e} handler was called for a container with attached ${this}`)}_getStatus(){const{enabled:e,muted:t,readyState:n}=this.track;return`readyState: ${n}, muted: ${t}, enabled: ${e}`}_initTrackStreamingStatus(){const e=this.conference.options.config;this._trackStreamingStatus=Jc.ACTIVE,this._trackStreamingStatusImpl=new Gc(this.rtc,this.conference,this,{p2pRtcMuteTimeout:e._p2pConnStatusRtcMuteTimeout,rtcMuteTimeout:e._peerConnStatusRtcMuteTimeout,outOfForwardedSourcesTimeout:e._peerConnStatusOutOfLastNTimeout}),this._trackStreamingStatusImpl.init(),!this._trackStreamingStatusImpl.isVideoTrackFrozen()&&this.rtc.eventEmitter.emit(Pt,this,this._trackStreamingStatus)}_disposeTrackStreamingStatus(){this._trackStreamingStatusImpl&&(this._trackStreamingStatusImpl.dispose(),this._trackStreamingStatusImpl=null,this._trackStreamingStatus=null)}_setTrackStreamingStatus(e){this._trackStreamingStatus=e}getTrackStreamingStatus(){return this._trackStreamingStatus}_clearEnteredForwardedSourcesTimestamp(){this._enteredForwardedSourcesTimestamp=null}_setEnteredForwardedSourcesTimestamp(e){this._enteredForwardedSourcesTimestamp=e}_getEnteredForwardedSourcesTimestamp(){return this._enteredForwardedSourcesTimestamp}toString(){return`RemoteTrack[userID: ${this.getParticipantId()}, type: ${this.getType()}, ssrc: ${this.getSSRC()}, p2p: ${this.isP2P}, sourceName: ${this._sourceName}, status: {${this._getStatus()}}]`}}let Zc;!function(e){e.L1T3="L1T3",e.L2T3="L2T3",e.L2T3_KEY="L2T3_KEY",e.L3T3="L3T3",e.L3T3_KEY="L3T3_KEY"}(Zc||(Zc={}));const el=(0,E.getLogger)("modules/RTC/TPCUtils.js"),tl=[Ds.AV1,Ds.H264,Ds.VP8,Ds.VP9];class nl{constructor(e){var t;this.pc=e,this.codecSettings=Ss()(Ic);const n=null===(t=this.pc.options)||void 0===t?void 0:t.videoQuality;if(n)for(const e of tl){var i;const t=n[e],r=null!==(i=null==t?void 0:t.maxBitratesVideo)&&void 0!==i?i:n.maxbitratesvideo&&n.maxbitratesvideo[e.toUpperCase()];r&&[...Object.values(Dc),"ssHigh"].forEach((t=>{r[t]&&(this.codecSettings[e].maxBitratesVideo[t]=r[t])})),t&&(this.codecSettings[e].scalabilityModeEnabled&&(void 0===t.scalabilityModeEnabled||t.scalabilityModeEnabled)?(void 0!==t.useSimulcast&&(this.codecSettings[e].useSimulcast=t.useSimulcast),void 0!==t.useKSVC&&(this.codecSettings[e].useKSVC=t.useKSVC)):this.codecSettings[e].scalabilityModeEnabled=!1)}}_calculateActiveEncodingParams(e,t,n){var i,r;const o=this.codecSettings[t].maxBitratesVideo,s=e.getCaptureResolution(),a=n>s?s:n,d=(null===(i=this.pc.options)||void 0===i||null===(r=i.videoQuality)||void 0===r?void 0:r.desktopbitrate)||o.ssHigh,c=e.getVideoType()===Qo.VideoType.DESKTOP;let l=this.codecSettings[t].useKSVC?Zc.L3T3_KEY:Zc.L3T3;const{height:h,level:u}=Pc.find((e=>e.height<=a));let p,m=wc[2].scaleFactor;this._isScreenshareBitrateCapped(e)?(l=Zc.L1T3,p=d):c?p=o.ssHigh:(p=o[u],a&&(m=s/a),h!==a&&el.debug(`Quality level with height=${h} was picked when requested height=${n} fortrack with capture height=${s}`));const g={active:a>0,maxBitrate:p,scalabilityMode:l,scaleResolutionDownBy:m};if(!g.active||c)return g;switch(u){case Dc.ULTRA:case Dc.FULL:case Dc.HIGH:g.scalabilityMode=this.codecSettings[t].useKSVC?Zc.L3T3_KEY:Zc.L3T3;break;case Dc.STANDARD:g.scalabilityMode=this.codecSettings[t].useKSVC?Zc.L2T3_KEY:Zc.L2T3;break;default:g.scalabilityMode=Zc.L1T3}return g}_configureSenderEncodings(e){var t,n;const i=e.getType(),r=null!=e&&e.track&&e.getOriginalStream()?this.pc.peerconnection.getTransceivers().find((t=>{var n,i;return(null===(n=t.sender)||void 0===n||null===(i=n.track)||void 0===i?void 0:i.id)===e.getTrackId()})):this.pc.peerconnection.getTransceivers().find((e=>{var t,n;return(null===(t=e.receiver)||void 0===t||null===(n=t.track)||void 0===n?void 0:n.kind)===i})),o=null==r||null===(t=r.sender)||void 0===t?void 0:t.getParameters();return null!=o&&null!==(n=o.encodings)&&void 0!==n&&n.length?(o.encodings=this._getStreamEncodings(e),r.sender.setParameters(o)):Promise.resolve()}_enableSenderEncodings(e,t){var n;const i=e.getParameters();if(null!=i&&null!==(n=i.encodings)&&void 0!==n&&n.length)for(const e of i.encodings)e.active=t;return e.setParameters(i)}_getStreamEncodings(e){if(e.isAudioTrack())return[{active:this.pc.audioTransferActive}];const t=this.pc.getConfiguredVideoCodec();return this.pc.isSpatialScalabilityOn()?this._getVideoStreamEncodings(e,t):[{active:this.pc.videoTransferActive,maxBitrate:this.codecSettings[t].maxBitratesVideo.high}]}_getVideoStreamEncodings(e,t){const n=e.getCaptureResolution(),i=this.codecSettings[t].maxBitratesVideo,r=e.getVideoType();let o,s=wc.map((e=>e.scaleFactor));if(r===Qo.VideoType.CAMERA){const{level:e}=Pc.find((e=>e.height<=n));o=i[e],e===Dc.ULTRA?(s[1]=6,s[0]=12):e===Dc.FULL&&(s[1]=3,s[0]=6)}const a=r===Qo.VideoType.DESKTOP?i.ssHigh:o;let d=[i.low,i.standard,a];ci.isFirefox()&&(r===Qo.VideoType.DESKTOP||ci.isVersionLessThan(117))&&(d=d.reverse(),s=s.reverse());const c=[{active:this.pc.videoTransferActive,maxBitrate:d[0],rid:wc[0].rid,scaleResolutionDownBy:s[0]},{active:this.pc.videoTransferActive,maxBitrate:d[1],rid:wc[1].rid,scaleResolutionDownBy:s[1]},{active:this.pc.videoTransferActive,maxBitrate:d[2],rid:wc[2].rid,scaleResolutionDownBy:s[2]}];if(this.codecSettings[t].scalabilityModeEnabled){if(this.codecSettings[t].useSimulcast||t===Ds.H264){for(const e of c)e.scalabilityMode=Zc.L1T3;return c}return[{active:this.pc.videoTransferActive,maxBitrate:d[2],rid:wc[0].rid,scaleResolutionDownBy:s[2],scalabilityMode:this.codecSettings[t].useKSVC?Zc.L3T3_KEY:Zc.L3T3},{active:!1,maxBitrate:0},{active:!1,maxBitrate:0}]}return c}_isRunningInFullSvcMode(e){return(e===Ds.VP9||e===Ds.AV1)&&this.codecSettings[e].scalabilityModeEnabled&&!this.codecSettings[e].useSimulcast}_isScreenshareBitrateCapped(e){return e.getVideoType()===Qo.VideoType.DESKTOP&&this.pc._capScreenshareBitrate&&!ci.isWebKitBased()}_updateSenderEncodings(e,t){var n;const i=e.getParameters();if(null!=i&&null!==(n=i.encodings)&&void 0!==n&&n.length)for(const e of i.encodings)e.active=t;return e.setParameters(i)}addTrack(e,t){const n=e.getTrack();if(t){const t=[];e.getOriginalStream()&&t.push(e.getOriginalStream());const i={direction:As.SENDRECV,streams:t,sendEncodings:[]};ci.isFirefox()||(i.sendEncodings=this._getStreamEncodings(e)),this.pc.peerconnection.addTransceiver(n,i)}else this.pc.peerconnection.addTrack(n)}calculateEncodingsActiveState(e,t,n){const i=e.getCaptureResolution(),r=this._getVideoStreamEncodings(e,t);return r.map((e=>i/e.scaleResolutionDownBy)).map(((i,o)=>{let s=!1;if(!this.pc.videoTransferActive)return s;if(!this.pc.isSpatialScalabilityOn()||this._isRunningInFullSvcMode(t)){const{active:i}=this._calculateActiveEncodingParams(e,t,n);return 0===o?i:s}var a;return n>0&&(s=e.getVideoType()===Qo.VideoType.CAMERA?i<=n||(null===(a=r[o])||void 0===a?void 0:a.scaleResolutionDownBy)===wc[0].scaleFactor:r[o].scaleResolutionDownBy===wc[2].scaleFactor||!this._isScreenshareBitrateCapped(e)),s}))}calculateEncodingsBitrates(e,t,n){var i,r;const o=this.codecSettings[t].maxBitratesVideo,s=(null===(i=this.pc.options)||void 0===i||null===(r=i.videoQuality)||void 0===r?void 0:r.desktopbitrate)||o.ssHigh;return this._getVideoStreamEncodings(e,t).map(((i,r)=>{let o=i.maxBitrate;if(!this.pc.isSpatialScalabilityOn()||this._isRunningInFullSvcMode(t)){const{maxBitrate:i}=this._calculateActiveEncodingParams(e,t,n);return 0===r?i:0}return this._isScreenshareBitrateCapped(e)&&(o=s),o}))}calculateEncodingsScalabilityMode(e,t,n){if(!this.pc.isSpatialScalabilityOn()||!this.codecSettings[t].scalabilityModeEnabled)return;const i=[Zc.L1T3,Zc.L1T3,Zc.L1T3];if(this._isRunningInFullSvcMode(t)){const{scalabilityMode:r}=this._calculateActiveEncodingParams(e,t,n);return i[0]=r,i[1]=void 0,i[2]=void 0,i}return i}calculateEncodingsScaleFactor(e,t,n){if(this.pc.isSpatialScalabilityOn()&&this.isRunningInSimulcastMode(t))return this._getVideoStreamEncodings(e,t).map((e=>e.scaleResolutionDownBy));const{scaleResolutionDownBy:i}=this._calculateActiveEncodingParams(e,t,n);return[i,void 0,void 0]}ensureCorrectOrderOfSsrcs(e){const t=Ps.parse(e.sdp);return t.media.forEach((e=>{if(e.type===Ri.AUDIO)return;if(!e.ssrcGroups||!e.ssrcGroups.length)return;let t=[];const n=new Set;e.ssrcGroups.map((e=>e.ssrcs.split(" ").filter(Boolean).forEach((e=>n.add(e))))),n.forEach((n=>{const i=e.ssrcs.filter((e=>e.id.toString()===n));t=t.concat(i)})),e.ssrcs=t})),new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})}insertUnifiedPlanSimulcastReceive(e){if(ci.usesSdpMungingForSimulcast())return e;const t=[{id:wc[0].rid,direction:"recv"},{id:wc[1].rid,direction:"recv"},{id:wc[2].rid,direction:"recv"}],n=`recv ${t.map((e=>e.id)).join(";")}`,i=Ps.parse(e.sdp),r=i.media.filter((e=>e.type===Ri.VIDEO)),o=Array.from(this.pc._localTrackTransceiverMids.values());return r.forEach(((e,i)=>{o.find((t=>e.mid.toString()===t.toString()))||0===i?e.simulcast_03&&e.simulcast||(e.rids=t,e.simulcast_03={value:n}):(e.rids=void 0,e.simulcast=void 0,e.simulcast_03=void 0)})),new RTCSessionDescription({type:e.type,sdp:Ps.write(i)})}isRunningInSimulcastMode(e){return e===Ds.VP8||!this.codecSettings[e].scalabilityModeEnabled&&e===Ds.VP9||this.codecSettings[e].scalabilityModeEnabled&&(e===Ds.H264||this.codecSettings[e].useSimulcast)}replaceTrack(e,t){var n,i;const r=null!==(n=null==t?void 0:t.getType())&&void 0!==n?n:null==e?void 0:e.getType(),o=this.pc.getLocalTracks(r),s=null!==(i=null==t?void 0:t.getTrack())&&void 0!==i?i:null,a=(null==o?void 0:o.length)&&!e&&t&&!o.find((e=>e===t));let d;if(e&&!e.isMuted())d=this.pc.peerconnection.getTransceivers().find((t=>t.sender.track===e.getTrack()));else if(a)d=this.pc.peerconnection.getTransceivers().find((e=>e.receiver.track.kind===r&&e.direction===As.RECVONLY&&(this.pc.isP2P&&e.currentDirection===As.RECVONLY||e.currentDirection===As.INACTIVE&&!e.stopped)));else{var c;d=this.pc.peerconnection.getTransceivers().find((e=>e.receiver.track.kind===r));const n=null!==(c=null==t?void 0:t.getSourceName())&&void 0!==c?c:null==e?void 0:e.getSourceName();if(n){const t=Rc(n);if(this.pc.isP2P)d=this.pc.peerconnection.getTransceivers().filter((e=>e.receiver.track.kind===r))[t];else if(e){const t=this.pc._localTrackTransceiverMids.get(e.rtcId);d=this.pc.peerconnection.getTransceivers().find((e=>e.mid===t))}else t&&(d=this.pc.peerconnection.getTransceivers().filter((e=>e.receiver.track.kind===r&&e.direction!==As.RECVONLY))[t])}}return d?(el.debug(`${this.pc} Replacing ${e} with ${t}`),d.sender.replaceTrack(s).then((()=>Promise.resolve(d)))):Promise.reject(new Error(`Replace track failed - no transceiver for old: ${e}, new: ${t}`))}setEncodings(e){return e.getType()===Ri.VIDEO?this.pc._updateVideoSenderParameters((()=>this._configureSenderEncodings(e))):this._configureSenderEncodings(e)}setMediaTransferActive(e,t){el.info(`${this.pc} ${e?"Resuming":"Suspending"} media transfer.`);const n=this.pc.peerconnection.getSenders().filter((e=>Boolean(e.track)&&(!t||e.track.kind===t))),i=[];for(const t of n)t.track.kind===Ri.VIDEO?i.push(this.pc._updateVideoSenderParameters((()=>this._enableSenderEncodings(t,e)))):i.push(this._enableSenderEncodings(t,e));return Promise.allSettled(i).then((e=>{const t=e.filter((e=>"rejected"===e.status)).map((e=>e.reason));return t.length?Promise.reject(new Error(`Failed to change encodings on the RTCRtpSenders${t.join(" ")}`)):Promise.resolve()}))}}const il=(0,E.getLogger)("modules/RTC/TraceablePeerConnection.js"),rl="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function ol(e,t,n,i,r,o,s){this.audioTransferActive=!(!0===s.startSilent),this._dtmfSender=void 0,this._dtmfTonesQueue=[],this.videoTransferActive=!0,this.rtc=e,this.id=t,this.isP2P=o,this.remoteTracks=new Map,this.localTracks=new Map,this.localSSRCs=new Map,this.remoteSSRCs=new Set,this.remoteSources=new Map,this.localUfrag=null,this.remoteUfrag=null,this._dtlsTransport=null,this.signalingLayer=n,this._peerVideoTypeChanged=this._peerVideoTypeChanged.bind(this),this.signalingLayer.on(Ec,this._peerVideoTypeChanged),this._peerMutedChanged=this._peerMutedChanged.bind(this),this.signalingLayer.on(yc,this._peerMutedChanged),this.options=s,this.signalingLayer.on(Sc,((e,t)=>this._sourceMutedChanged(e,t))),this.signalingLayer.on(Tc,((e,t)=>this._sourceVideoTypeChanged(e,t)));const a=r||{};a.optional=a.optional||[],Array.isArray(a.optional)?a.optional.push({rtcStatsSFUP2P:this.isP2P}):il.warn("Optional param is not an array, rtcstats p2p data is omitted."),this.peerconnection=new RTCPeerConnection(i,a),this.tpcUtils=new nl(this),this.updateLog=[],this.stats={},this.statsinterval=null,this._capScreenshareBitrate=this.options.capScreenshareBitrate,this.codecSettings=this.options.codecSettings,ci.supportsCodecPreferences()&&il.info("Using RTCRtpTransceiver#setCodecPreferences for codec selection"),this._hasHadAudioTrack=!1,this._hasHadVideoTrack=!1,this.maxstats=s.maxstats,this.interop=new vc,this.simulcast=new $c,this.localSdpMunger=new jc(this,this.rtc.getLocalEndpointId()),this.eventEmitter=e.eventEmitter,this.rtxModifier=new Hc,this._senderMaxHeights=new Map,this._supportsDDHeaderExt=!1,this._localTrackTransceiverMids=new Map,this.trace=(e,t)=>{il.trace(e,t),this.updateLog.push({time:new Date,type:e,value:t||""})},this.onicecandidate=null,this.peerconnection.onicecandidate=e=>{this.trace("onicecandidate",JSON.stringify(e.candidate,null," ")),null!==this.onicecandidate&&this.onicecandidate(e)},this.onTrack=e=>{const t=e.streams[0];this._remoteTrackAdded(t,e.track,e.transceiver),t.addEventListener("removetrack",(e=>{this._remoteTrackRemoved(t,e.track)}))},this.peerconnection.addEventListener("track",this.onTrack),this.onsignalingstatechange=null,this.peerconnection.onsignalingstatechange=e=>{this.trace("onsignalingstatechange",this.signalingState),null!==this.onsignalingstatechange&&this.onsignalingstatechange(e)},this.oniceconnectionstatechange=null,this.peerconnection.oniceconnectionstatechange=e=>{this.trace("oniceconnectionstatechange",this.iceConnectionState),null!==this.oniceconnectionstatechange&&this.oniceconnectionstatechange(e)},this.onnegotiationneeded=null,this.peerconnection.onnegotiationneeded=e=>{this.trace("onnegotiationneeded"),null!==this.onnegotiationneeded&&this.onnegotiationneeded(e)},this.onconnectionstatechange=null,this.peerconnection.onconnectionstatechange=e=>{this.trace("onconnectionstatechange",this.connectionState),null!==this.onconnectionstatechange&&this.onconnectionstatechange(e)},this.ondatachannel=null,this.peerconnection.ondatachannel=e=>{this.trace("ondatachannel"),null!==this.ondatachannel&&this.ondatachannel(e)},this.maxstats&&(this.statsinterval=window.setInterval((()=>{this.getStats().then((e=>{if("function"==typeof(null==e?void 0:e.result)){const t=e.result();for(let e=0;e{this._processStat(n,e,n.stat(e))}))}}else e.forEach((e=>this._processStat(e,"",e)))}))}),1e3)),this._lastVideoSenderUpdatePromise=Promise.resolve(),il.info(`Create new ${this}`)}ol.prototype._processStat=function(e,t,n){const i=`${e.id}-${t}`;let r=this.stats[i];const o=new Date;r||(this.stats[i]=r={startTime:o,endTime:o,values:[],times:[]}),r.values.push(n),r.times.push(o.getTime()),r.values.length>this.maxstats&&(r.values.shift(),r.times.shift()),r.endTime=o};const sl=function(e){return null==e?"":`type: ${e.type}\\r\\n${e.sdp}`};ol.prototype.getConnectionState=function(){const e=this.peerconnection.iceConnectionState;return"completed"===e?"connected":e},ol.prototype.getDesiredMediaDirection=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=this.hasAnyTracksOfType(e);return t?n?As.SENDRECV:As.SENDONLY:n?As.RECVONLY:As.INACTIVE},ol.prototype._getReceiversByEndpointIds=function(e,t){let n=[],i=[];for(const i of e)n=n.concat(this.getRemoteTracks(i,t));const r=n.map((e=>{var t;return null===(t=e.track)||void 0===t?void 0:t.id}));return i=this.peerconnection.getReceivers().filter((e=>e.track&&e.track.kind===t&&r.find((t=>t===e.track.id)))),i},ol.prototype.isSpatialScalabilityOn=function(){const e=this.tpcUtils.codecSettings[Ds.H264].scalabilityModeEnabled&&this._supportsDDHeaderExt;return!this.options.disableSimulcast&&(this.codecSettings.codecList[0]!==Ds.H264||e)},ol.prototype._peerVideoTypeChanged=function(e,t){if(!e)return void il.error(`${this} No endpointID on peerVideoTypeChanged`);const n=this.getRemoteTracks(e,Ri.VIDEO);n.length&&n[0]._setVideoType(t)},ol.prototype._peerMutedChanged=function(e,t,n){if(!e)return void il.error(`${this} On peerMuteChanged - no endpoint ID`);const i=this.getRemoteTracks(e,t);i.length&&i[0].setMute(n)},ol.prototype._sourceMutedChanged=function(e,t){const n=this.getRemoteTracks().find((t=>t.getSourceName()===e));n?n.setMute(t):Ai.isSsrcRewritingSupported()&&il.debug(`Remote track not found for source=${e}, mute update failed!`)},ol.prototype._sourceVideoTypeChanged=function(e,t){const n=this.getRemoteTracks().find((t=>t.getSourceName()===e));n&&n._setVideoType(t)},ol.prototype.getAudioLevels=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const t={};return(e.length?this._getReceiversByEndpointIds(e,Ri.AUDIO):this.peerconnection.getReceivers().filter((e=>e.track&&e.track.kind===Ri.AUDIO&&e.track.enabled))).forEach((e=>{const n=e.getSynchronizationSources();n&&n.length&&(t[n[0].source]=n[0].audioLevel)})),t},ol.prototype.doesTrueSimulcast=function(){const e=this.getConfiguredVideoCodec();return this.isSpatialScalabilityOn()&&this.tpcUtils.isRunningInSimulcastMode(e)},ol.prototype.getLocalVideoSSRCs=function(e){var t,n,i;const r=[];if(!e||!e.isVideoTrack())return r;const o=this.isSpatialScalabilityOn()?"SIM":"FID";return(null===(t=this.localSSRCs.get(e.rtcId))||void 0===t||null===(n=t.groups)||void 0===n||null===(i=n.find((e=>e.semantics===o)))||void 0===i?void 0:i.ssrcs)||r},ol.prototype.getLocalTracks=function(e){let t=Array.from(this.localTracks.values());return void 0!==e&&(t=t.filter((t=>t.getType()===e))),t},ol.prototype.getLocalVideoTracks=function(){return this.getLocalTracks(Ri.VIDEO)},ol.prototype.hasAnyTracksOfType=function(e){if(!e)throw new Error(\'"mediaType" is required\');return this.getLocalTracks(e).length>0},ol.prototype.getRemoteTracks=function(e,t){let n=[];const i=e?[e]:this.remoteTracks.keys();for(const e of i){const i=this.remoteTracks.get(e);if(i)for(const e of i.keys())t&&t!==e||(n=n.concat(Array.from(i.get(e))))}return n},ol.prototype.getRemoteSourceInfoByParticipant=function(e){const t=[],n=this.getRemoteTracks(e);if(null==n||!n.length)return t;const i=n.map((e=>e.getSSRC())),r=new Ms(this.remoteDescription.sdp);return i.forEach(((e,n)=>{for(const i of r.media){let r="",o=Ns.findLines(i,`a=ssrc:${e}`);if(o.length){t[n]||(t[n]="");const s=Ns.findLines(i,`a=ssrc-group:FID ${e}`);if(s.length){const e=s[0].split(" ")[2];r+=`${s[0]}\\r\\n`,o=o.concat(Ns.findLines(i,`a=ssrc:${e}`))}t[n]+=`${o.join("\\r\\n")}\\r\\n`,t[n]+=r}}})),t},ol.prototype.getTargetVideoBitrates=function(){const e=this.getConfiguredVideoCodec();return this.tpcUtils.codecSettings[e].maxBitratesVideo},ol.prototype.getTrackBySSRC=function(e){if("number"!=typeof e)throw new Error(`SSRC ${e} is not a number`);for(const t of this.localTracks.values())if(this.getLocalSSRC(t)===e)return t;for(const t of this.getRemoteTracks())if(t.getSSRC()===e)return t;return null},ol.prototype.getSsrcByTrackId=function(e){const t=t=>t.getTrack().id===e,n=this.getLocalTracks().find(t);if(n)return this.getLocalSSRC(n);const i=this.getRemoteTracks().find(t);return i?i.getSSRC():null},ol.prototype._remoteTrackAdded=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;const i=e.id,r=t.kind;if(!this.isP2P&&!nc.isUserStreamById(i))return;if(il.info(`${this} Received track event for remote stream[id=${i},type=${r}]`),!r)return void il.error(`MediaType undefined for remote track, stream id: ${i}, track creation failed!`);const o=new Ms(this.peerconnection.remoteDescription.sdp);let s;if(null!=n&&n.mid){const e=n.mid;s=o.media.find((t=>Ns.findLine(t,`a=mid:${e}`)))}else s=o.media.find((e=>{const t=Ns.findLine(e,"a=msid:");return"string"==typeof t&&i===t.substring(7).split(" ")[0]}));if(!s)return void il.error(`Matching media line not found in remote SDP for remote stream[id=${i},type=${r}],track creation failed!`);let a=Ns.findLines(s,"a=ssrc:");if(a=a.filter((e=>-1!==e.indexOf(`msid:${i}`))),!a.length)return void il.error(`No SSRC lines found in remote SDP for remote stream[msid=${i},type=${r}]track creation failed!`);const d=a[0].substring(7).split(" ")[0],c=Number(d),l=this.signalingLayer.getSSRCOwner(c);if(isNaN(c)||c<0)return void il.error(`Invalid SSRC for remote stream[ssrc=${c},id=${i},type=${r}]track creation failed!`);if(!l)return void il.error(`No SSRC owner known for remote stream[ssrc=${c},id=${i},type=${r}]track creation failed!`);const h=this.signalingLayer.getTrackSourceName(c),u=this.signalingLayer.getPeerMediaInfo(l,r,h);let p=!0,m=r===Ri.VIDEO?Qo.VideoType.CAMERA:void 0;u?(p=u.muted,m=u.videoType):il.info(`${this}: no source-info available for ${l}:${h}, assuming default state`),this._createRemoteTrack(l,e,t,r,m,c,p,h)},ol.prototype._createRemoteTrack=function(e,t,n,i,r,o,s,a){il.info(`${this} creating remote track[endpoint=${e},ssrc=${o},type=${i},sourceName=${a}]`);let d=this.remoteTracks.get(e);d||(d=new Map,d.set(Ri.AUDIO,new Set),d.set(Ri.VIDEO,new Set),this.remoteTracks.set(e,d));const c=d.get(i);if(null!=c&&c.size&&Array.from(c).find((e=>e.getTrack()===n)))return void il.info(`${this} ignored duplicated track event for track[endpoint=${e},type=${i}]`);const l=new Qc(this.rtc,this.rtc.conference,e,t,n,i,r,o,s,this.isP2P,a);c.add(l),this.eventEmitter.emit(ji.default.REMOTE_TRACK_ADDED,l,this)},ol.prototype._remoteTrackRemoved=function(e,t){const n=e.id,i=null==t?void 0:t.id;if(!nc.isUserStreamById(n))return;if(!n)return void il.error(`${this} remote track removal failed - no stream ID`);if(!i)return void il.error(`${this} remote track removal failed - no track ID`);const r=this.getRemoteTracks().find((e=>e.getStreamId()===n&&e.getTrackId()===i));r?this._removeRemoteTrack(r):il.error(`${this} remote track removal failed - track not found`)},ol.prototype.removeRemoteTracks=function(e){let t=[];const n=this.remoteTracks.get(e);return n&&(t=t.concat(Array.from(n.get(Ri.AUDIO))),t=t.concat(Array.from(n.get(Ri.VIDEO))),this.remoteTracks.delete(e)),il.debug(`${this} removed remote tracks[endpoint=${e},count=${t.length}`),t},ol.prototype._removeRemoteTrack=function(e){var t;il.info(`${this} Removing remote track stream[id=${e.getStreamId()},trackId=${e.getTrackId()}]`),e.dispose();const n=e.getParticipantId();if(!n&&Ai.isSsrcRewritingSupported())return;const i=this.remoteTracks.get(n);i?null!==(t=i.get(e.getType()))&&void 0!==t&&t.delete(e)||il.error(`${this} Failed to remove ${e} - type mapping messed up ?`):il.error(`${this} removeRemoteTrack: no remote tracks map for endpoint=${n}`),this.eventEmitter.emit(ji.default.REMOTE_TRACK_REMOVED,e)},ol.prototype._extractSSRCMap=function(e){const t=new Map,n=new Map;if("object"!=typeof e||null===e||"string"!=typeof e.sdp)return il.warn("An empty description was passed as an argument"),t;const i=Ps.parse(e.sdp);if(!Array.isArray(i.media))return t;let r=i.media;r=r.filter((e=>e.direction===As.SENDONLY||e.direction===As.SENDRECV));let o=0;for(const e of r){if(!Array.isArray(e.ssrcs))continue;if(Array.isArray(e.ssrcGroups)){for(const t of e.ssrcGroups)if(void 0!==t.semantics&&void 0!==t.ssrcs){const e=t.ssrcs.split(" ").map((e=>parseInt(e,10))),i=e[0];t.ssrcs=e,n.has(i)||n.set(i,[]),n.get(i).push(t)}if(!e.ssrcGroups.find((e=>"SIM"===e.semantics))){const t=e.ssrcGroups.map((e=>e.ssrcs[0]));n.get(t[0]).push({semantics:"SIM",ssrcs:t})}}let i=e.ssrcs;i=i.filter((e=>"cname"===e.attribute));for(const r of i){const i=`${e.type}-${o}`,s=r.id;let a=t.get(i);if(a||(a={ssrcs:[],groups:[],msid:i},t.set(i,a)),a.ssrcs.push(s),n.has(s)){const e=n.get(s);for(const t of e)a.groups.push(t)}}e.type===Ri.VIDEO&&o++}return t},ol.prototype.getLocalSSRC=function(e){const t=this._getSSRC(e.rtcId);return t&&t.ssrcs[0]},ol.prototype._injectSsrcGroupForUnifiedSimulcast=function(e){const t=Ps.parse(e.sdp),n=t.media.find((e=>"video"===e.type));n.ssrcGroups=n.ssrcGroups||[];const i=n.ssrcGroups.filter((e=>"FID"===e.semantics));if(n.simulcast||n.simulcast_03){const t=[];if(i&&i.length?i.forEach((e=>{t.push(e.ssrcs.split(" ")[0])})):n.ssrcs.forEach((e=>{"msid"===e.attribute&&t.push(e.id)})),n.ssrcGroups.find((e=>"SIM"===e.semantics)))return e;for(let e=0;e{Object.defineProperty(ol.prototype,e,{get:al[e]})})),ol.prototype._getSSRC=function(e){return this.localSSRCs.get(e)},ol.prototype.isSharingLowFpsScreen=function(){return this._isSharingScreen()&&this._capScreenshareBitrate},ol.prototype._isSharingScreen=function(){const e=this.getLocalVideoTracks();return Boolean(e.find((e=>e.videoType===Qo.VideoType.DESKTOP)))},ol.prototype._mungeCodecOrder=function(e){if(!this.codecSettings)return e;const t=Ps.parse(e.sdp),n=t.media.filter((e=>e.type===this.codecSettings.mediaType));if(!n.length)return e;for(const t of n){const n=this.getConfiguredVideoCodecs(e);for(const e of n)this.isP2P&&(e!==Ds.H264&&e!==Ds.VP9||Ns.stripCodec(t,e,!0),e!==Ds.ULPFEC&&e!==Ds.RED||Ns.stripCodec(t,e,!1));for(const e of this.codecSettings.codecList.slice().reverse())Ns.preferCodec(t,e,this.isP2P)}return new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})},ol.prototype._updateAv1DdHeaders=function(e){const t=Ps.parse(e.sdp),n=t.media.filter((e=>e.type===Ri.VIDEO));return n.length&&ci.supportsDDExtHeaders()?(n.forEach(((e,t)=>{var n;const i=Array.from(this._localTrackTransceiverMids.values()),r=i.length?i.find((t=>e.mid.toString()===t.toString())):0===t,o=e.payloads.split(" ")[0];let{codec:s}=e.rtp.find((e=>e.payload===Number(o)));if(s=s.toLowerCase(),r&&null!==(n=e.ext)&&void 0!==n&&n.length){const t=e.ext.findIndex((e=>e.uri===rl)),n=s===Ds.AV1||s===Ds.H264;!this._supportsDDHeaderExt&&t>=0&&(this._supportsDDHeaderExt=!0),this._supportsDDHeaderExt&&n&&t<0?e.ext.push({value:11,uri:rl}):!n&&t>=0&&e.ext.splice(t,1)}})),new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})):e},ol.prototype.addTrack=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=e.rtcId;if(il.info(`${this} adding ${e}`),this.localTracks.has(n))return Promise.reject(new Error(`${e} is already in ${this}`));this.localTracks.set(n,e);const i=e.getOriginalStream();try{this.tpcUtils.addTrack(e,t),e&&(e.isAudioTrack()?this._hasHadAudioTrack=!0:this._hasHadVideoTrack=!0)}catch(t){return il.error(`${this} Adding track=${e} failed: ${null==t?void 0:t.message}`),Promise.reject(t)}let r=Promise.resolve();return ci.isFirefox()&&(r=r.then((()=>i&&this.tpcUtils.setEncodings(e)))),r},ol.prototype.addTrackToPc=function(e){return il.info(`${this} Adding track=${e} to PC`),this._assertTrackBelongs("addTrackToPc",e)?e.getOriginalStream()?this.tpcUtils.replaceTrack(null,e).then((()=>(e&&(e.isAudioTrack()?this._hasHadAudioTrack=!0:this._hasHadVideoTrack=!0),!1))):(il.error(`${this} Unable to add track=${e} to PC - no WebRTC stream`),Promise.reject("Stream not found")):Promise.reject("Track not found on the peerconnection")},ol.prototype._assertTrackBelongs=function(e,t){const n=this.localTracks.has(null==t?void 0:t.rtcId);return n||il.error(`${this} ${e}: track=${t} does not belong to pc`),n},ol.prototype.getConfiguredVideoCodec=function(){var e;const t=null===(e=this.peerconnection.remoteDescription)||void 0===e?void 0:e.sdp,n=Ds.VP8;if(!t)return n;const i=Ps.parse(t).media.find((e=>e.type===Ri.VIDEO)),r=i.payloads.split(" ")[0],{codec:o}=i.rtp.find((e=>e.payload===Number(r)));return o?Object.values(Ds).find((e=>e===o.toLowerCase())):n},ol.prototype.getConfiguredVideoCodecs=function(e){var t,n;const i=null!==(t=null==e?void 0:e.sdp)&&void 0!==t?t:null===(n=this.peerconnection.localDescription)||void 0===n?void 0:n.sdp;if(!i)return[];const r=Ps.parse(i).media.find((e=>e.type===Ri.VIDEO)),o=new Set(r.rtp.filter((e=>"rtx"!==e.codec.toLowerCase())).map((e=>e.codec.toLowerCase())));return Array.from(o)},ol.prototype.isVideoCodecDisabled=function(e){var t;const n=null===(t=this.peerconnection.localDescription)||void 0===t?void 0:t.sdp;return!!n&&!Ps.parse(n).media.find((e=>e.type===Ri.VIDEO)).rtp.find((t=>t.codec===e))},ol.prototype.setDesktopSharingFrameRate=function(e){const t=e<=5;this._capScreenshareBitrate=this.isSpatialScalabilityOn()&&t},ol.prototype.setVideoCodecs=function(e){this.codecSettings&&null!=e&&e.length&&(this.codecSettings.codecList=e)},ol.prototype.removeTrack=function(e){const t=e.getOriginalStream();this.trace("removeStream",e.rtcId,t?t.id:void 0),this._assertTrackBelongs("removeStream",e)&&(this.localTracks.delete(e.rtcId),this.localSSRCs.delete(e.rtcId),t&&this.peerconnection.removeStream(t))},ol.prototype.findSenderByKind=function(e){if(this.peerconnection.getSenders)return this.peerconnection.getSenders().find((t=>t.track&&t.track.kind===e))},ol.prototype.findReceiverForTrack=function(e){return this.peerconnection.getReceivers().find((t=>t.track===e))},ol.prototype.findSenderForTrack=function(e){if(this.peerconnection.getSenders)return this.peerconnection.getSenders().find((t=>t.track===e))},ol.prototype.processLocalSdpForTransceiverInfo=function(e){var t;const n=null===(t=this.peerconnection.localDescription)||void 0===t?void 0:t.sdp;n&&[Ri.AUDIO,Ri.VIDEO].forEach((t=>{const i=e.filter((e=>e.getType()===t)),r=Ps.parse(n).media.filter((e=>e.type===t));i.forEach(((e,t)=>{this._localTrackTransceiverMids.has(e.rtcId)||this._localTrackTransceiverMids.set(e.rtcId,r[t].mid.toString())}))}))},ol.prototype.replaceTrack=function(e,t){return e||t?(il.info(`${this} TPC.replaceTrack old=${e}, new=${t}`),this.tpcUtils.replaceTrack(e,t).then((n=>{var i;if(e&&(this.localTracks.delete(e.rtcId),this._localTrackTransceiverMids.delete(e.rtcId)),t&&(t.isAudioTrack()?this._hasHadAudioTrack=!0:this._hasHadVideoTrack=!0,this._localTrackTransceiverMids.set(t.rtcId,null==n||null===(i=n.mid)||void 0===i?void 0:i.toString()),this.localTracks.set(t.rtcId,t)),e&&t){const n=this.localSSRCs.get(e.rtcId);n&&(this.localSSRCs.delete(e.rtcId),this.localSSRCs.set(t.rtcId,n))}return n&&(n.direction=t||ci.isFirefox()?As.SENDRECV:As.RECVONLY),(!t||t.getType()===Ri.VIDEO&&ci.usesSdpMungingForSimulcast()?Promise.resolve():this.tpcUtils.setEncodings(t)).then((()=>this.isP2P))}))):(il.info(`${this} replaceTrack called with no new track and no old track`),Promise.resolve())},ol.prototype.removeTrackFromPc=function(e){const t=e.getOriginalStream();return this.trace("removeTrack",e.rtcId,t?t.id:null),this._assertTrackBelongs("removeTrack",e)?this.tpcUtils.replaceTrack(e,null).then((()=>!1)):Promise.reject("Track not found in the peerconnection")},ol.prototype.createDataChannel=function(e,t){return this.trace("createDataChannel",e,t),this.peerconnection.createDataChannel(e,t)},ol.prototype._adjustRemoteMediaDirection=function(e){const t=new Lc(e.sdp);return[Ri.AUDIO,Ri.VIDEO].forEach((e=>{const n=t.selectMedia(e),i=this.getLocalTracks(e).length,r=this.getRemoteTracks(null,e).length;n.forEach(((e,t)=>{e.direction=i&&i===r?As.SENDRECV:i||r?i?r?i>r?t?As.RECVONLY:As.SENDRECV:t?As.SENDONLY:As.SENDRECV:As.RECVONLY:As.SENDONLY:As.INACTIVE}))})),new RTCSessionDescription({type:e.type,sdp:t.toRawSDP()})},ol.prototype._mungeOpus=function(e){const{audioQuality:t}=this.options;if(!(null!=t&&t.enableOpusDtx||null!=t&&t.stereo||null!=t&&t.opusMaxAverageBitrate))return e;const n=Ps.parse(e.sdp),i=n.media;for(const e of i)if("audio"===e.type){const{payload:n}=e.rtp.find((e=>e.codec===Ds.OPUS));if(!n)continue;let i=e.fmtp.find((e=>e.payload===n));i||(i={payload:n,config:""});const r=Ps.parseParams(i.config);let o=!1;if(null!=t&&t.stereo&&(r.stereo=1,o=!0),null!=t&&t.opusMaxAverageBitrate&&(r.maxaveragebitrate=t.opusMaxAverageBitrate,o=!0),!ci.isFirefox()&&null!=t&&t.enableOpusDtx&&(r.usedtx=1,o=!0),!o)continue;let s="";for(const e of Object.keys(r))s+=`${e}=${r[e]}; `;i.config=s.trim()}return new RTCSessionDescription({type:e.type,sdp:Ps.write(n)})},ol.prototype._mungeInactive=function(e){const t=Ps.parse(e.sdp),n=t.media;for(const e of n)e.direction=As.INACTIVE,e.ssrcs=void 0,e.ssrcGroups=void 0;return new RTCSessionDescription({type:e.type,sdp:Ps.write(t)})},ol.prototype._initializeDtlsTransport=function(){if(!this.peerconnection.getSenders||this._dtlsTransport)return;const e=this.peerconnection.getSenders();0!==e.length&&e[0].transport&&(this._dtlsTransport=e[0].transport,this._dtlsTransport.onerror=e=>{il.error(`${this} DtlsTransport error: ${e}`)},this._dtlsTransport.onstatechange=()=>{this.trace("dtlsTransport.onstatechange",this._dtlsTransport.state)})},ol.prototype._setMaxBitrates=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.codecSettings)return e;const n=Ps.parse(e.sdp),i=t?As.RECVONLY:As.SENDONLY,r=n.media.filter((e=>e.type===Ri.VIDEO&&e.direction!==i)),o=this.codecSettings.codecList[0],s=this.tpcUtils.codecSettings[o];for(const e of r){const t=o===Ds.VP9&&!s.scalabilityModeEnabled,n=this.getLocalVideoTracks().find((t=>this._localTrackTransceiverMids.get(t.rtcId)===e.mid.toString()));if((t||this.tpcUtils._isRunningInFullSvcMode(o))&&n){let t;if(n.getVideoType()===Qo.VideoType.DESKTOP)t=s.maxBitratesVideo.ssHigh;else{const{level:e}=Pc.find((e=>e.height<=n.getCaptureResolution()));t=s.maxBitratesVideo[e]}const i=Math.floor(t/1e3);e.bandwidth=[{type:"AS",limit:i}]}else e.bandwidth=void 0}return new RTCSessionDescription({type:e.type,sdp:Ps.write(n)})},ol.prototype.configureAudioSenderEncodings=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(e)return this.tpcUtils.setEncodings(e);const t=[];for(const e of this.getLocalTracks(Ri.AUDIO))t.push(this.tpcUtils.setEncodings(e));return Promise.allSettled(t)},ol.prototype.configureVideoSenderEncodings=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(e)return this.setSenderVideoConstraints(this._senderMaxHeights.get(e.getSourceName()),e);const t=[];for(const e of this.getLocalVideoTracks()){var n;const i=null!==(n=this._senderMaxHeights.get(e.getSourceName()))&&void 0!==n?n:Pc[0].height;t.push(this.setSenderVideoConstraints(i,e))}return Promise.allSettled(t)},ol.prototype.setLocalDescription=function(e){let t=e;return this.trace("setLocalDescription::preTransform",sl(t)),t=this._mungeOpus(t),t=this._mungeCodecOrder(t),t=this._setMaxBitrates(t,!0),t=this._updateAv1DdHeaders(t),this.trace("setLocalDescription::postTransform",sl(t)),new Promise(((e,n)=>{this.peerconnection.setLocalDescription(t).then((()=>{this.trace("setLocalDescriptionOnSuccess");const n=Ns.getUfrag(t.sdp);n!==this.localUfrag&&(this.localUfrag=n,this.eventEmitter.emit(ji.default.LOCAL_UFRAG_CHANGED,this,n)),this._initializeDtlsTransport(),e()}),(e=>{this.trace("setLocalDescriptionOnFailure",e),this.eventEmitter.emit(ji.default.SET_LOCAL_DESCRIPTION_FAILED,e,this),n(e)}))}))},ol.prototype.setRemoteDescription=function(e){let t=e;if(this.trace("setRemoteDescription::preTransform",sl(e)),t=this._mungeOpus(t),!this.isP2P){const e=this.peerconnection.remoteDescription;t=this.interop.toUnifiedPlan(t,e),this.trace("setRemoteDescription::postTransform (Unified)",sl(t))}return this.isSpatialScalabilityOn()&&(t=this.tpcUtils.insertUnifiedPlanSimulcastReceive(t),this.trace("setRemoteDescription::postTransform (sim receive)",sl(t))),t=this.tpcUtils.ensureCorrectOrderOfSsrcs(t),this.trace("setRemoteDescription::postTransform (correct ssrc order)",sl(t)),t=this._mungeCodecOrder(t),t=this._setMaxBitrates(t),t=this._updateAv1DdHeaders(t),this.trace("setRemoteDescription::postTransform (munge codec order)",sl(t)),new Promise(((e,n)=>{this.peerconnection.setRemoteDescription(t).then((()=>{this.trace("setRemoteDescriptionOnSuccess");const n=Ns.getUfrag(t.sdp);n!==this.remoteUfrag&&(this.remoteUfrag=n,this.eventEmitter.emit(ji.default.REMOTE_UFRAG_CHANGED,this,n)),this._initializeDtlsTransport(),e()}),(e=>{this.trace("setRemoteDescriptionOnFailure",e),this.eventEmitter.emit(ji.default.SET_REMOTE_DESCRIPTION_FAILED,e,this),n(e)}))}))},ol.prototype.setSenderVideoConstraints=function(e,t){if(e<0||isNaN(e))throw new Error(`Invalid frameHeight: ${e}`);if(!t)throw new Error("Local video track is missing");const n=t.getSourceName();return t.isMuted()?(this._senderMaxHeights.set(n,e),Promise.resolve()):this._updateVideoSenderParameters((()=>this._updateVideoSenderEncodings(e,t)))},ol.prototype._updateVideoSenderParameters=function(e){const t=this._lastVideoSenderUpdatePromise.finally(e);return this._lastVideoSenderUpdatePromise=t,t},ol.prototype._updateVideoSenderEncodings=function(e,t){var n;const i=this.findSenderForTrack(t.getTrack());if(!i)return Promise.resolve();const r=i.getParameters();if(null==r||null===(n=r.encodings)||void 0===n||!n.length)return Promise.resolve();const o=t.getVideoType()===Qo.VideoType.DESKTOP&&this._capScreenshareBitrate?"maintain-resolution":"maintain-framerate";r.degradationPreference=o;const s=this.getConfiguredVideoCodec(),a=this.tpcUtils.calculateEncodingsBitrates(t,s,e),d=this.tpcUtils.calculateEncodingsActiveState(t,s,e),c=this.tpcUtils.calculateEncodingsScaleFactor(t,s,e),l=this.tpcUtils.calculateEncodingsScalabilityMode(t,s,e),h=t.getSourceName();let u=!1;for(const e in r.encodings)if(r.encodings.hasOwnProperty(e)){const{active:t,maxBitrate:n,scalabilityMode:i,scaleResolutionDownBy:h}=r.encodings[e];t!==d[e]&&(r.encodings[e].active=d[e],u=!0),ci.isFirefox()&&(r.encodings[e].degradationPreference=o),(s!==Ds.VP9||!this.isSpatialScalabilityOn()||ci.supportsScalabilityModeAPI()&&this.tpcUtils.codecSettings[s].scalabilityModeEnabled)&&(h!==c[e]&&(r.encodings[e].scaleResolutionDownBy=c[e],u=!0),n!==a[e]&&(r.encodings[e].maxBitrate=a[e],u=!0)),l?i!==l[e]&&(r.encodings[e].scalabilityMode=l[e],u=!0):r.encodings[e].scalabilityMode=void 0}return u?(il.info(`${this} setting max height=${e},encodings=${JSON.stringify(r.encodings)}`),i.setParameters(r).then((()=>{this._senderMaxHeights.set(h,e),t.maxEnabledResolution=e,this.eventEmitter.emit(ji.default.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED,t)}))):(this._senderMaxHeights.set(h,e),Promise.resolve())},ol.prototype.setVideoTransferActive=function(e){il.debug(`${this} video transfer active: ${e}`);const t=this.videoTransferActive!==e;return this.videoTransferActive=e,t?this.tpcUtils.setMediaTransferActive(e,Ri.VIDEO):Promise.resolve()},ol.prototype.sendTones=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200;if(!this._dtmfSender){if(this.peerconnection.getSenders){const e=this.peerconnection.getSenders().find((e=>e.dtmf));this._dtmfSender=e&&e.dtmf,this._dtmfSender&&il.info(`${this} initialized DTMFSender using getSenders`)}if(!this._dtmfSender){const e=Array.from(this.localTracks.values()).find((e=>e.isAudioTrack()));this.peerconnection.createDTMFSender&&e&&(this._dtmfSender=this.peerconnection.createDTMFSender(e.getTrack())),this._dtmfSender&&il.info(`${this} initialized DTMFSender using deprecated createDTMFSender`)}this._dtmfSender&&(this._dtmfSender.ontonechange=this._onToneChange.bind(this))}if(this._dtmfSender){if(this._dtmfSender.toneBuffer)return void this._dtmfTonesQueue.push({tones:e,duration:t,interToneGap:n});this._dtmfSender.insertDTMF(e,t,n)}else il.warn(`${this} sendTones - failed to select DTMFSender`)},ol.prototype._onToneChange=function(e){if(this._dtmfSender&&""===e.tone&&this._dtmfTonesQueue.length){const{tones:e,duration:t,interToneGap:n}=this._dtmfTonesQueue.shift();this._dtmfSender.insertDTMF(e,t,n)}},ol.prototype.close=function(){this.trace("stop"),this.signalingLayer.off(yc,this._peerMutedChanged),this.signalingLayer.off(Ec,this._peerVideoTypeChanged),this.peerconnection.removeEventListener("track",this.onTrack);for(const e of this.remoteTracks.values())for(const t of e.values())for(const e of t)this._removeRemoteTrack(e);this.remoteTracks.clear(),this._dtmfSender=null,this._dtmfTonesQueue=[],this.rtc._removePeerConnection(this)||il.error(`${this} rtc._removePeerConnection returned false`),null!==this.statsinterval&&(window.clearInterval(this.statsinterval),this.statsinterval=null),il.info(`${this} Closing peerconnection`),this.peerconnection.close()},ol.prototype.createAnswer=function(e){return this._createOfferOrAnswer(!1,e)},ol.prototype.createOffer=function(e){return this._createOfferOrAnswer(!0,e)},ol.prototype._createOfferOrAnswer=function(e,t){const n=e?"Offer":"Answer";this.trace(`create${n}`,JSON.stringify(t,null," "));const i=(e,t,i)=>{try{this.trace(`create${n}OnSuccess::preTransform`,sl(e)),this.isSpatialScalabilityOn()&&ci.usesSdpMungingForSimulcast()&&(e=this.simulcast.mungeLocalDescription(e),this.trace(`create${n} OnSuccess::postTransform (simulcast)`,sl(e))),!this.options.disableRtx&&ci.usesSdpMungingForSimulcast()&&(e=new RTCSessionDescription({type:e.type,sdp:this.rtxModifier.modifyRtxSsrcs(e.sdp)}),this.trace(`create${n}OnSuccess::postTransform (rtx modifier)`,sl(e)));const i=this._extractSSRCMap(e);this._processLocalSSRCsMap(i),t(e)}catch(t){this.trace(`create${n}OnError`,t),this.trace(`create${n}OnError`,sl(e)),il.error(`${this} create${n}OnError`,t,sl(e)),i(t)}},r=(t,i)=>{this.trace(`create${n}OnFailure`,t);const r=e?ji.default.CREATE_OFFER_FAILED:ji.default.CREATE_ANSWER_FAILED;this.eventEmitter.emit(r,t,this),i(t)};if(ci.supportsCodecPreferences()&&this.codecSettings){var o;const{codecList:e,mediaType:t}=this.codecSettings,n=this.peerconnection.getTransceivers().filter((e=>{var n,i;return e.receiver&&(null===(n=e.receiver)||void 0===n||null===(i=n.track)||void 0===i?void 0:i.kind)===t}));let i=null===(o=RTCRtpReceiver.getCapabilities(t))||void 0===o?void 0:o.codecs;if(n.length&&i){for(const n of e.slice().reverse())i.sort((e=>e.mimeType.toLowerCase()===`${t}/${n}`?-1:1));this.isP2P&&t===Ri.VIDEO&&(i=i.filter((e=>e.mimeType.toLowerCase()!==`${Ri.VIDEO}/${Ds.ULPFEC}`&&e.mimeType.toLowerCase()!==`${Ri.VIDEO}/${Ds.RED}`)));for(const e of n)e.setCodecPreferences(i)}}return new Promise(((n,o)=>{let s;s=e?this.peerconnection.createOffer(t):this.peerconnection.createAnswer(t),s.then((e=>i(e,n,o)),(e=>r(e,o)))}))},ol.prototype._extractPrimarySSRC=function(e){return e&&e.groups&&e.groups.length?e.groups[0].ssrcs[0]:e&&e.ssrcs&&e.ssrcs.length?e.ssrcs[0]:null},ol.prototype._processLocalSSRCsMap=function(e){for(const t of this.localTracks.values()){const n=Rc(t.getSourceName()),i=`${t.getType()}-${n}`;if(e.has(i)){const n=e.get(i);if(!n)return void il.error(`${this} No SSRC found for stream=${i}`);const r=this.localSSRCs.get(t.rtcId),o=this._extractPrimarySSRC(n),s=this._extractPrimarySSRC(r);o!==s&&(s&&il.error(`${this} Overwriting SSRC for track=${t}] with ssrc=${n}`),this.localSSRCs.set(t.rtcId,n),this.eventEmitter.emit(ji.default.LOCAL_TRACK_SSRC_UPDATED,t,o))}else t.isVideoTrack()||t.isMuted()||il.warn(`${this} No SSRCs found in the local SDP for track=${t}, stream=${i}`)}},ol.prototype.addRemoteSsrc=function(e){const t=this.remoteSSRCs.has(e);return t||this.remoteSSRCs.add(e),!t},ol.prototype.addIceCandidate=function(e){return this.trace("addIceCandidate",JSON.stringify({candidate:e.candidate,sdpMid:e.sdpMid,sdpMLineIndex:e.sdpMLineIndex,usernameFragment:e.usernameFragment},null," ")),this.peerconnection.addIceCandidate(e)},ol.prototype.getStats=function(){return this.peerconnection.getStats()},ol.prototype.toString=function(){return`TPC[id=${this.id},type=${this.isP2P?"P2P":"JVB"}]`};const dl=(0,E.getLogger)("modules/RTC/RTC.js");let cl,ll=0,hl=0;function ul(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map((e=>{const{constraints:t,sourceId:n,sourceType:i,stream:r,track:o,videoType:s,effects:a}=e,{deviceId:d,facingMode:c}=o.getSettings();return hl=yi(hl),new ac({constraints:t,deviceId:d,facingMode:c,mediaType:o.kind,rtcId:hl,sourceId:n,sourceType:i,stream:r,track:o,videoType:s||null,effects:a})}))}class pl extends xr{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),this.conference=e,this.peerConnections=new Map,this.localTracks=[],this.options=t,this._channel=null,this._lastN=void 0,this._forwardedSources=null,this._forwardedSourcesChangeListener=this._onForwardedSourcesChanged.bind(this),this._onDeviceListChanged=this._onDeviceListChanged.bind(this),this._updateAudioOutputForAudioTracks=this._updateAudioOutputForAudioTracks.bind(this),nc.isDeviceChangeAvailable("output")&&(nc.addListener(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,this._updateAudioOutputForAudioTracks),nc.addListener(ji.default.DEVICE_LIST_CHANGED,this._onDeviceListChanged))}destroy(){nc.removeListener(ji.default.AUDIO_OUTPUT_DEVICE_CHANGED,this._updateAudioOutputForAudioTracks),nc.removeListener(ji.default.DEVICE_LIST_CHANGED,this._onDeviceListChanged),this._channelOpenListener&&this.removeListener(ji.default.DATA_CHANNEL_OPEN,this._channelOpenListener)}static createLocalTracks(e){return ul(e)}static obtainAudioAndVideoPermissions(e){return nc.obtainAudioAndVideoPermissions(e).then((e=>ul(e)))}initializeBridgeChannel(e,t){this._channel=new ja(e,t,this.eventEmitter,this.conference),this._channelOpenListener=()=>{const e=(e,t,n)=>{dl.error(`Cannot send ${t}(${JSON.stringify(n)}) endpoint message`,e)};if(this._receiverVideoConstraints)try{this._channel.sendReceiverVideoConstraintsMessage(this._receiverVideoConstraints)}catch(t){e(t,"ReceiverVideoConstraints",this._receiverVideoConstraints)}if(void 0!==this._lastN&&-1!==this._lastN)try{this._channel.sendSetLastNMessage(this._lastN)}catch(t){e(t,"LastNChangedEvent",this._lastN)}},this.addListener(ji.default.DATA_CHANNEL_OPEN,this._channelOpenListener),this.addListener(ji.default.FORWARDED_SOURCES_CHANGED,this._forwardedSourcesChangeListener)}_onDeviceListChanged(){this._updateAudioOutputForAudioTracks(nc.getAudioOutputDevice())}_onForwardedSourcesChanged(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const t=this._forwardedSources||[];let n=[],i=[];const r=Date.now();this._forwardedSources=e,n=t.filter((e=>!this.isInForwardedSources(e))),i=e.filter((e=>-1===t.indexOf(e))),dl.debug(`Fowarded sources changed leaving=${n}, entering=${i} at ${r}`),this.conference.eventEmitter.emit(Re,n,i,r)}onCallEnded(){this._channel&&(this._channel&&"websocket"===this._channel.mode&&this._channel.close(),this._channel=null)}setDesktopSharingFrameRate(e){nc.setDesktopSharingFrameRate(e)}setReceiverVideoConstraints(e){this._receiverVideoConstraints=e,this._channel&&this._channel.isOpen()&&this._channel.sendReceiverVideoConstraintsMessage(e)}sendSourceVideoType(e,t){this._channel&&this._channel.isOpen()&&this._channel.sendSourceVideoTypeMessage(e,t)}static addListener(e,t){nc.addListener(e,t)}static removeListener(e,t){nc.removeListener(e,t)}static init(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.options=e,nc.init(this.options)}createPeerConnection(e,t,n,i){const r=Ss()(nc.pcConstraints);i.enableInsertableStreams&&(dl.debug("E2EE - setting insertable streams constraints"),t.encodedInsertableStreams=!0),i.forceTurnRelay&&(t.iceTransportPolicy="relay"),t.bundlePolicy="max-bundle",ll=yi(ll);const o=new ol(this,ll,e,t,r,n,i);return this.peerConnections.set(o.id,o),o}_removePeerConnection(e){const t=e.id;return!!this.peerConnections.has(t)&&(this.peerConnections.delete(t),!0)}addLocalTrack(e){if(!e)throw new Error("track must not be null nor undefined");this.localTracks.push(e),e.conference=this.conference}getForwardedSources(){return this._forwardedSources}getLocalVideoTrack(){const e=this.getLocalTracks(Ri.VIDEO);return e.length?e[0]:void 0}getLocalVideoTracks(){return this.getLocalTracks(Ri.VIDEO)}getLocalAudioTrack(){const e=this.getLocalTracks(Ri.AUDIO);return e.length?e[0]:void 0}getLocalEndpointId(){return this.conference.myUserId()}getLocalTracks(e){let t=this.localTracks.slice();return void 0!==e&&(t=t.filter((t=>t.getType()===e))),t}getRemoteTracks(e){let t=[];for(const n of this.peerConnections.values()){const i=n.getRemoteTracks(void 0,e);i&&(t=t.concat(i))}return t}setAudioMute(e){const t=[];return this.getLocalTracks(Ri.AUDIO).forEach((n=>{t.push(e?n.mute():n.unmute())})),Promise.all(t)}setVideoMute(e){const t=[];return this.getLocalTracks(Ri.VIDEO).forEach((n=>{t.push(e?n.mute():n.unmute())})),Promise.all(t)}removeLocalTrack(e){const t=this.localTracks.indexOf(e);-1!==t&&this.localTracks.splice(t,1)}static attachMediaStream(e,t){return nc.attachMediaStream(e,t)}static isDeviceListAvailable(){return nc.isDeviceListAvailable()}static isDeviceChangeAvailable(e){return nc.isDeviceChangeAvailable(e)}static isWebRtcSupported(){return ci.isSupported()}static getAudioOutputDevice(){return nc.getAudioOutputDevice()}static getCurrentlyAvailableMediaDevices(){return nc.getCurrentlyAvailableMediaDevices()}static arePermissionsGrantedForAvailableDevices(){return nc.arePermissionsGrantedForAvailableDevices()}static getEventDataForActiveDevice(e){return nc.getEventDataForActiveDevice(e)}static setAudioOutputDevice(e){return nc.setAudioOutputDevice(e)}static enumerateDevices(e){nc.enumerateDevices(e)}static stopMediaStream(e){nc.stopMediaStream(e)}static isDesktopSharingEnabled(){return nc.isDesktopSharingEnabled()}closeBridgeChannel(){this._channel&&(this._channel.close(),this._channel=null)}setAudioLevel(e,t,n,i){const r=e.getTrackBySSRC(t);r&&(r.isAudioTrack()?(r.isLocal()!==i&&dl.error(`${r} was expected to ${i?"be":"not be"} local`),r.setAudioLevel(n,e)):dl.warn(`Received audio level for non-audio track: ${t}`))}sendChannelMessage(e,t){if(!this._channel)throw new Error("Channel support is disabled!");this._channel.sendMessage(e,t)}sendEndpointStatsMessage(e){this._channel&&this._channel.isOpen()&&this._channel.sendEndpointStatsMessage(e)}setLastN(e){this._lastN!==e&&(this._lastN=e,this._channel&&this._channel.isOpen()&&this._channel.sendSetLastNMessage(e),this.eventEmitter.emit(ji.default.LASTN_VALUE_CHANGED,e))}isInForwardedSources(e){return!this._forwardedSources||this._forwardedSources.indexOf(e)>-1}_updateAudioOutputForAudioTracks(e){const t=this.getRemoteTracks(Ri.AUDIO);for(const n of t)n.setAudioOutput(e)}}!function(e){e.LOCAL_STATS_UPDATED="cq.local_stats_updated",e.REMOTE_STATS_UPDATED="cq.remote_stats_updated"}(cl||(cl={}));const ml=cl.LOCAL_STATS_UPDATED,gl=cl.REMOTE_STATS_UPDATED,fl=n(125),{VideoType:vl}=n(408),{XMPPEvents:_l}=n(609),yl=(0,E.getLogger)("modules/connectivity/ConnectionQuality.js");let El=800;class Sl{constructor(e,t,n){var i;this.eventEmitter=t,this._conference=e,this._localStats={connectionQuality:100,jvbRTT:void 0},this._lastConnectionQualityUpdate=-1,this._options=n,this._remoteStats={},this._timeIceConnected=-1,this._timeVideoUnmuted=-1,(null===(i=this._options.config)||void 0===i?void 0:i.startBitrate)>0&&(El=this._options.config.startBitrate),e.on(me,(()=>{this._updateLocalConnectionQuality(0),this.eventEmitter.emit(ml,this._localStats),this._broadcastLocalStats()})),e.room.addListener(_l.ICE_CONNECTION_STATE_CHANGED,((e,t)=>{e.isP2P||"connected"!==t||(this._timeIceConnected=window.performance.now())})),e.on(Ce,((e,t)=>{"stats"===t.type&&this._updateRemoteStats(e.getId(),t.values)})),e.on(xe,((e,t)=>{this._updateRemoteStats(e.getId(),t)})),this._options.config.disableLocalStats||e.statistics.addConnectionStatsListener(this._updateLocalStats.bind(this)),e.on(it,(e=>{e.isVideoTrack()&&(e.isMuted()?this._timeVideoUnmuted=-1:this._maybeUpdateUnmuteTime())})),e.on(tt,(e=>{e.isVideoTrack()&&!e.isMuted()&&this._maybeUpdateUnmuteTime()})),e.rtc.on(ji.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED,(e=>{this._localStats.maxEnabledResolution=e.maxEnabledResolution})),e.on(We,(e=>{this._localStats.serverRegion=e})),e.on(ze,(e=>{this._localStats.bridgeCount=Number((e||{})["bridge-count"])}))}_maybeUpdateUnmuteTime(){this._timeVideoUnmuted<0&&(this._timeVideoUnmuted=window.performance.now())}_calculateConnectionQuality(e,t,n){const i=fl[n];let r,o=100;if(this._localStats.packetLoss&&(r=this._localStats.packetLoss.upload,t&&(r*=.5)),t||!i||e===vl.DESKTOP||this._timeIceConnected<0||this._timeVideoUnmuted<0)void 0===r?(yl.error("Cannot calculate connection quality, unknown packet loss."),o=100):o=r<=2?100:r<=4?70:r<=6?50:r<=8?30:r<=12?10:0;else{const e=this._conference.getActivePeerConnection();if(e){var s,a;const t=window.performance.now()-Math.max(this._timeVideoUnmuted,this._timeIceConnected),n=null!==(s=null===(a=this._options.config)||void 0===a?void 0:a.pcStatsInterval)&&void 0!==s?s:1e4;let r=function(e,t,n,i){let r=0,o=Math.min(t.height,t.width),s=Pc.find((e=>e.height<=o));if(s&&e)for(o=s.height;o>=180;o/=2){const e=o;if(s=Pc.find((t=>t.height===e)),!s)break;r+=i[s.level]}else s&&(r=i[s.level]);return Math.min(r/1e3,function(e){return e>6e4?Number.MAX_SAFE_INTEGER:El*Math.pow(1.08,e/1e3)}(Math.max(0,n-1e3)))}(e.doesTrueSimulcast(),i,t,e.getTargetVideoBitrates());r=Math.min(r,2500),t>n&&(o=100*this._localStats.bitrate.upload/r)}r&&r>=10&&(o=Math.min(o,30))}if(this._lastConnectionQualityUpdate>0){const e=2,t=this._localStats.connectionQuality,n=(window.performance.now()-this._lastConnectionQualityUpdate)/1e3;o=Math.min(o,t+n*e)}return Math.min(100,o)}_updateLocalConnectionQuality(e){this._localStats.connectionQuality=e,this._lastConnectionQualityUpdate=window.performance.now()}_broadcastLocalStats(){const e={bitrate:this._localStats.bitrate,packetLoss:this._localStats.packetLoss,connectionQuality:this._localStats.connectionQuality,jvbRTT:this._localStats.jvbRTT,serverRegion:this._localStats.serverRegion,maxEnabledResolution:this._localStats.maxEnabledResolution,avgAudioLevels:this._localStats.localAvgAudioLevels};try{this._conference.sendEndpointStatsMessage(e)}catch(e){}}_updateLocalStats(e,t){if(!e.isP2P){const e=t.transport&&t.transport.length&&t.transport[0].rtt;this._localStats.jvbRTT=e||void 0}if(e!==this._conference.getActivePeerConnection())return;let n;const i=!this._conference.isConnectionInterrupted(),r=this._conference.getLocalVideoTrack(),o=r?r.videoType:void 0,s=!r||r.isMuted(),a=r?Math.min(r.resolution,r.maxEnabledResolution):null;for(n in s||this._maybeUpdateUnmuteTime(),t)t.hasOwnProperty(n)&&(this._localStats[n]=t[n]);i&&this._updateLocalConnectionQuality(this._calculateConnectionQuality(o,s,a)),this.eventEmitter.emit(ml,this._localStats),this._broadcastLocalStats()}_updateRemoteStats(e,t){this._remoteStats[e]={bitrate:t.bitrate,packetLoss:t.packetLoss,connectionQuality:t.connectionQuality,jvbRTT:t.jvbRTT,serverRegion:t.serverRegion,maxEnabledResolution:t.maxEnabledResolution,avgAudioLevels:t.avgAudioLevels},this.eventEmitter.emit(gl,e,this._remoteStats[e])}getStats(){return this._localStats}}const bl=(0,E.getLogger)("modules/connectivity/IceFailedHandling.js");class Tl{constructor(e){this._conference=e}_actOnIceFailed(){if(!this._conference.room)return;const{enableForcedReload:e,enableIceRestart:t}=this._conference.options.config,n=void 0!==t&&!t,i=this._conference.room.supportsRestartByTerminate(),r=i&&!t;if(bl.info(`ICE failed, enableForcedReload: ${e}, enableIceRestart: ${t}, supports restart by terminate: ${i}`),n||!t&&!i||e){bl.info("ICE failed, but ICE restarts are disabled");const t=e?I:F;return void this._conference.eventEmitter.emit(ae,t)}const o=this._conference.jvbJingleSession,s=o&&o.getIceConnectionState();o?"connected"===s?bl.info("ICE connection restored - not sending ICE failed"):(bl.info(`Sending ICE failed - the connection did not recover, ICE state: ${s}, use \'session-terminate\': ${r}`),r?this._conference._stopJvbSession({reason:"connectivity-error",reasonDescription:"ICE FAILED",requestRestart:!0,sendSessionTerminate:!0}):this._conference.jvbJingleSession.sendIceFailedNotification()):bl.warn("Not sending ICE failed - no JVB connection")}start(){this._conference.xmpp.ping(65e3).then((()=>{this._canceled||(this._iceFailedTimeout=window.setTimeout((()=>{this._iceFailedTimeout=void 0,this._actOnIceFailed()}),2e3))}),(e=>{bl.error("PING error/timeout - not sending ICE failed",e)}))}cancel(){this._canceled=!0,window.clearTimeout(this._iceFailedTimeout)}}let Cl;!function(e){e.DETECTOR_STATE_CHANGE="detector_state_change",e.AUDIO_INPUT_STATE_CHANGE="audio_input_state_changed",e.NO_AUDIO_INPUT="no_audio_input_detected",e.VAD_NOISY_DEVICE="detection.vad_noise_device",e.VAD_REPORT_PUBLISHED="vad-report-published",e.VAD_SCORE_PUBLISHED="detection.vad_score_published",e.VAD_TALK_WHILE_MUTED="detection.vad_talk_while_muted"}(Cl||(Cl={}));const xl=Cl.DETECTOR_STATE_CHANGE,Rl=Cl.AUDIO_INPUT_STATE_CHANGE,Al=Cl.NO_AUDIO_INPUT,wl=Cl.VAD_NOISY_DEVICE,Il=Cl.VAD_REPORT_PUBLISHED,Pl=Cl.VAD_SCORE_PUBLISHED,Dl=Cl.VAD_TALK_WHILE_MUTED;class Ol extends ii{constructor(e){super(),this._conference=e,this._timeoutTrigger=null,this._hasAudioInput=null,e.on(tt,this._trackAdded.bind(this))}_clearTriggerTimeout(){clearTimeout(this._timeoutTrigger),this._timeoutTrigger=null}_handleAudioInputStateChange(e){const t=0!==e;null!==this._hasAudioInput&&this._hasAudioInput===t||(this._hasAudioInput=t,this.emit(Rl,this._hasAudioInput))}_handleNoAudioInputDetection(e){this._eventFired||(0!==e||this._timeoutTrigger?0!==e&&this._timeoutTrigger&&this._clearTriggerTimeout():this._timeoutTrigger=setTimeout((()=>{this._eventFired=!0,this.emit(Al)}),4e3))}_audioLevel(e,t,n,i){if(!i||!this._audioTrack)return;const r=e.localSSRCs.get(this._audioTrack.rtcId);r&&r.ssrcs.includes(t)&&(this._handleAudioInputStateChange(n),this._handleNoAudioInputDetection(n))}_trackAdded(e){e.isLocalAudioTrack()&&(this._audioTrack=e,this._eventFired=!1,this._clearTriggerTimeout(),e.on(It,(e=>{this._handleNoAudioInputDetection(e)})),e.on(Ct,(e=>{this._handleNoAudioInputDetection(e),this._handleAudioInputStateChange(e)})))}}class kl{constructor(e){this.conference=e,e.addEventListener(nt,this._audioLevel.bind(this)),this.myUserID=this.conference.myUserId()}_audioLevel(e,t){!this.conference.isP2PActive()||t<=.6||e===this.myUserID&&this.conference.getLocalAudioTrack().isMuted()||this.conference.rtc.eventEmitter.emit(ji.default.DOMINANT_SPEAKER_CHANGED,e)}}function Nl(e){const t=window.AudioContext||window.webkitAudioContext;if(t)return new t(e)}class Ml extends ii{constructor(e,t,n){super(),this._procNodeSampleRate=e,this._vadProcessor=t,this._localTrack=n,this._bufferResidue=new Float32Array([]),this._audioContext=Nl({sampleRate:t.getRequiredPCMFrequency()}),this._vadSampleSize=t.getSampleLength(),this._onAudioProcess=this._onAudioProcess.bind(this),this._initializeAudioContext()}static create(e,t,n){return pl.obtainAudioAndVideoPermissions({devices:["audio"],micDeviceId:e}).then((i=>{if(!i[0])throw new Error(`Failed to create jitsi local track for device id: ${e}`);return new Ml(t,n,i[0])}))}_initializeAudioContext(){this._audioSource=this._audioContext.createMediaStreamSource(this._localTrack.stream),this._audioProcessingNode=this._audioContext.createScriptProcessor(this._procNodeSampleRate,1,1)}_onAudioProcess(e){const t=e.inputBuffer.getChannelData(0),n=[...this._bufferResidue,...t],i=Date.now();let r=0;for(;r+this._vadSampleSize{},this._audioProcessingNode.disconnect(),this._audioSource.disconnect()}_cleanupResources(){this._disconnectAudioGraph(),this._localTrack.stopStream()}getDeviceId(){return this._localTrack.getDeviceId()}getTrackLabel(){return this._localTrack.getDeviceLabel()}start(){this._connectAudioGraph()}stop(){this._disconnectAudioGraph(),this._bufferResidue=[]}destroy(){this._destroyed||(this._cleanupResources(),this._destroyed=!0)}}const Ll=(0,E.getLogger)("modules/detection/VADAudioAnalyser.js");class Fl extends ii{constructor(e,t){super(),this._createVADProcessor=t,this._vadEmitter=null,this._isVADEmitterRunning=!1,this._detectionServices=[],this._vadInitTracker=Promise.resolve(),this._processVADScore=this._processVADScore.bind(this),e.on(tt,this._trackAdded.bind(this)),e.on(rt,this._trackRemoved.bind(this)),e.on(it,this._trackMuteChanged.bind(this))}addVADDetectionService(e){this._detectionServices.push(e),e.on(xl,(()=>{!this._detectionServices.filter((e=>!0===e.isActive())).length&&this._isVADEmitterRunning?this._stopVADEmitter():this._isVADEmitterRunning||this._startVADEmitter()}))}_startVADEmitter(){this._vadEmitter&&(this._vadEmitter.on(Pl,this._processVADScore),this._vadEmitter.start(),this._isVADEmitterRunning=!0)}_stopVADEmitter(){this._vadEmitter&&(this._vadEmitter.removeListener(Pl,this._processVADScore),this._vadEmitter.stop()),this._isVADEmitterRunning=!1}_processVADScore(e){for(const t of this._detectionServices)t.processVADScore(e)}_changeDetectorsMuteState(e){for(const t of this._detectionServices)t.changeMuteState(e)}_trackAdded(e){e.isLocalAudioTrack()&&(this._vadInitTracker=this._vadInitTracker.then((()=>this._createVADProcessor())).then((t=>Ml.create(e.getDeviceId(),4096,t))).then((t=>{Ll.debug("Created VAD emitter for track: ",e.getTrackLabel()),this._vadEmitter=t,this._changeDetectorsMuteState(e.isMuted())})).catch((e=>{Ll.warn("Failed to start VADAudioAnalyser",e)})))}_trackMuteChanged(e){e.isLocalAudioTrack()&&(this._vadInitTracker=this._vadInitTracker.then((()=>{this._changeDetectorsMuteState(e.isMuted())})))}_trackRemoved(e){e.isLocalAudioTrack()&&(this._vadInitTracker=this._vadInitTracker.then((()=>{Ll.debug("Removing track from VAD detection - ",e.getTrackLabel()),this._vadEmitter&&(this._stopVADEmitter(),this._vadEmitter.destroy(),this._vadEmitter=null);for(const e of this._detectionServices)e.reset()})))}}class jl extends ii{constructor(){super(),this._processing=!1,this._scoreArray=[],this._audioLvlArray=[],this._active=!1,this._calculateNoisyScore=this._calculateNoisyScore.bind(this)}_calculateNoisyScore(){const e=Ei(this._scoreArray),t=Ei(this._audioLvlArray);e<.2&&t>.04&&(this.emit(wl),this._setActiveState(!1)),this.reset()}_recordValues(e,t){this._scoreArray.push(e),this._audioLvlArray.push(t)}_setActiveState(e){this._active=e,this.emit(xl,this._active)}changeMuteState(e){this._setActiveState(!e),this.reset()}isActive(){return this._active}reset(){this._processing=!1,this._scoreArray=[],this._audioLvlArray=[],clearTimeout(this._processTimeout)}processVADScore(e){if(this._active)if(this._processing){const t=Si(e.pcmData);this._recordValues(e.score,Ei(t))}else if(e.score<.2){const t=Ei(Si(e.pcmData));t>.02&&(this._processing=!0,this._recordValues(e.score,t),this._processTimeout=setTimeout(this._calculateNoisyScore,1500))}}}class Vl extends ii{constructor(){super(),this._processing=!1,this._scoreArray=[],this._active=!1,this._calculateVADScore=this._calculateVADScore.bind(this)}_calculateVADScore(){Ei(this._scoreArray)>.6&&(this.emit(Dl),this._setActiveState(!1)),this.reset()}_setActiveState(e){this._active=e,this.emit(xl,this._active)}changeMuteState(e){this._setActiveState(e),this.reset()}isActive(){return this._active}processVADScore(e){this._active&&(this._processing?this._scoreArray.push(e.score):e.score>.9&&(this._processing=!0,this._scoreArray.push(e.score),this._processTimeout=setTimeout(this._calculateVADScore,700)))}reset(){this._processing=!1,this._scoreArray=[],clearTimeout(this._processTimeout)}}let Ul;!function(e){e.E2E_RTT_CHANGED="e2eping.e2e_rtt_changed"}(Ul||(Ul={}));const Hl=Ul.E2E_RTT_CHANGED,$l=(0,E.getLogger)("modules/e2eping/e2eping.js"),Jl="e2e-ping-request",Bl="e2e-ping-response";class ql{constructor(e,t){this.participant=e,this.e2eping=t,this.id=e.getId(),this.requests={},this.lastRequestId=1,this.sendRequest=this.sendRequest.bind(this),this.handleResponse=this.handleResponse.bind(this),this.maybeLogRttAndStop=this.maybeLogRttAndStop.bind(this),this.scheduleNext=this.scheduleNext.bind(this),this.stop=this.stop.bind(this),this.getDelay=this.getDelay.bind(this),this.timeout=this.scheduleNext()}scheduleNext(){return window.setTimeout(this.sendRequest,this.getDelay())}stop(){this.timeout&&window.clearTimeout(this.timeout),this.e2eping.removeParticipant(this.id)}getDelay(){const e=this.e2eping.conference.getParticipants().length,t=e*(e-1)/2*this.e2eping.numRequests/this.e2eping.maxMessagesPerSecond;return(1.5-Math.random())*Math.max(t/this.e2eping.numRequests*1e3,1e3)}sendRequest(){const e=this.lastRequestId++,t={type:Jl,id:e};this.e2eping.sendMessage(t,this.id),this.requests[e]={id:e,timeSent:window.performance.now()}}handleResponse(e){const t=this.requests[e.id];t&&(t.rtt=window.performance.now()-t.timeSent),this.maybeLogRttAndStop()}maybeLogRttAndStop(){let e,t,n=1/0,i=0,r=0;for(t in this.requests)this.requests.hasOwnProperty(t)&&(e=this.requests[t],r++,e.rtt&&(i++,n=Math.min(n,e.rtt)));return i>=this.e2eping.numRequests?($l.info(`Measured RTT=${n} ms to ${this.id} (in ${this.participant.getProperty("region")})`),this.stop(),void this.e2eping.conference.eventEmitter.emit(Hl,this.participant,n)):r>2*this.e2eping.numRequests?($l.info(`Stopping e2eping for ${this.id} because we sent ${r} with only ${i} responses.`),void this.stop()):void(this.timeout=this.scheduleNext())}}class Gl{constructor(e,t,n){this.conference=e,this.eventEmitter=e.eventEmitter,this.sendMessage=n,this.participants={},this.numRequests=5,this.maxConferenceSize=200,this.maxMessagesPerSecond=250,t&&t.e2eping&&("number"==typeof t.e2eping.numRequests&&(this.numRequests=t.e2eping.numRequests),"number"==typeof t.e2eping.maxConferenceSize&&(this.maxConferenceSize=t.e2eping.maxConferenceSize),"number"==typeof t.e2eping.maxMessagesPerSecond&&(this.maxMessagesPerSecond=t.e2eping.maxMessagesPerSecond)),$l.info(`Initializing e2e ping with numRequests=${this.numRequests}, maxConferenceSize=${this.maxConferenceSize}, maxMessagesPerSecond=${this.maxMessagesPerSecond}.`),this.participantJoined=this.participantJoined.bind(this),this.participantLeft=this.participantLeft.bind(this),e.on(dt,this.participantLeft),this.messageReceived=this.messageReceived.bind(this),e.on(Ce,this.messageReceived),this.conferenceJoined=this.conferenceJoined.bind(this),e.on(ce,this.conferenceJoined)}conferenceJoined(){this.conference.getParticipants().forEach((e=>this.participantJoined(e.getId(),e))),this.conference.on(at,this.participantJoined)}messageReceived(e,t){t.type===Jl?this.handleRequest(e.getId(),t):t.type===Bl&&this.handleResponse(e.getId(),t)}participantJoined(e,t){this.participants[e]&&($l.info(`Participant wrapper already exists for ${e}. Clearing.`),this.participants[e].stop()),this.conference.getParticipants().length>this.maxConferenceSize||this.conference.myUserId()>e&&($l.info(`Starting e2eping for participant ${e}`),this.participants[e]=new ql(t,this))}removeParticipant(e){this.participants[e]&&delete this.participants[e]}participantLeft(e){this.participants[e]&&(this.participants[e].stop(),delete this.participants[e])}handleRequest(e,t){if(t&&t.id){const n={type:Bl,id:t.id};this.sendMessage(n,e)}else $l.info(`Received an invalid e2e ping request from ${e}.`)}handleResponse(e,t){const n=this.participants[e];n&&n.handleResponse(t)}stop(){$l.info("Stopping e2eping"),this.conference.off(at,this.participantJoined),this.conference.off(dt,this.participantLeft),this.conference.off(Ce,this.messageReceived);for(const e in this.participants)this.participants.hasOwnProperty(e)&&this.participants[e].stop();this.participants={}}}const zl=(0,E.getLogger)("modules/event/Jvb121EventGenerator.js");class Kl{constructor(e){this._conference=e,this._jvb121=!0,this._conference.addEventListener(at,(()=>this.evaluateStatus())),this._conference.addEventListener(dt,(()=>this.evaluateStatus())),this._conference.addEventListener(Ue,(()=>this.evaluateStatus()))}evaluateStatus(){const e=this._jvb121,t=!this._conference.isP2PActive()&&this._conference.getParticipantCount()<=2;e!==t&&(this._jvb121=t,zl.debug(`JVB121 status ${e} => ${t}`),this._conference.eventEmitter.emit(Ae,e,t))}}const Wl=Symbol("kJitsiLiteMode"),Xl=(0,E.getLogger)("modules/litemode/LiteModeContext.js");class Yl{constructor(e){this.enabled=Ai.isRunInLiteModeEnabled(),this.enabled&&e.rtc.on(ji.default.REMOTE_TRACK_ADDED,((e,t)=>this._setupLiteModeForTrack(t,e)))}_setupLiteModeForTrack(e,t){if(!this.enabled)return;const n=e.findReceiverForTrack(t.track);if(!n)return void Xl.warn(`Could not set up lite mode for ${t}: receiver not found in: ${e}`);if(n[Wl])return;n[Wl]=!0;const i=n.createEncodedStreams(),r=new TransformStream({transform:()=>{}});i.readable.pipeThrough(r).pipeTo(i.writable)}}const Ql=(0,E.getLogger)("modules/qualitycontrol/ReceiveVideoController.js"),Zl=2160;class eh{constructor(e){const{lastN:t,assumedBandwidthBps:n}=e;this._lastN=null!=t?t:-1,this._maxFrameHeight=Zl,this._assumedBandwidthBps=null!=n?n:-1,this._receiverVideoConstraints={assumedBandwidthBps:this._assumedBandwidthBps,constraints:{},defaultConstraints:{maxHeight:this._maxFrameHeight},lastN:this._lastN}}get constraints(){this._receiverVideoConstraints.assumedBandwidthBps=this._assumedBandwidthBps,this._receiverVideoConstraints.lastN=this._lastN;const e=this._receiverVideoConstraints.constraints;if(e&&Object.keys(e).length)for(const[t,n]of Object.entries(e))n.maxHeight=this._maxFrameHeight;else this._receiverVideoConstraints.defaultConstraints={maxHeight:this._maxFrameHeight};return this._receiverVideoConstraints}updateAssumedBandwidthBps(e){const t=this._assumedBandwidthBps!==e;return t&&(this._assumedBandwidthBps=e,Ql.debug(`Updating receive assumedBandwidthBps: ${e}`)),t}updateLastN(e){const t=this._lastN!==e;return t&&(this._lastN=e,Ql.debug(`Updating ReceiverVideoConstraints lastN(${e})`)),t}updateReceiveResolution(e){const t=this._maxFrameHeight!==e;return t&&(this._maxFrameHeight=e,Ql.debug(`Updating receive maxFrameHeight: ${e}`)),t}updateReceiverVideoConstraints(e){const t=!Et()(this._receiverVideoConstraints,e);var n;return t&&(this._receiverVideoConstraints=e,null!==(n=e.defaultConstraints)&&void 0!==n&&n.maxHeight&&this.updateReceiveResolution(e.defaultConstraints.maxHeight),Ql.debug(`Updating ReceiverVideoConstraints ${JSON.stringify(e)}`)),t}}class th{constructor(e,t){var n;this._conference=e,this._rtc=t;const{config:i}=e.options;this._lastN=null!==(n=null==i?void 0:i.startLastN)&&void 0!==n?n:(null==i?void 0:i.channelLastN)||-1,this._maxFrameHeight=Zl,this._sourceReceiverConstraints=new Map,this._assumedBandwidthBps=-1,this._receiverVideoConstraints=new eh({lastN:this._lastN,assumedBandwidthBps:this._assumedBandwidthBps}),this._conference.on(q,(e=>this._onMediaSessionStarted(e)))}_getDefaultSourceReceiverConstraints(e,t){var n;const i=null!=t?t:Zl,r=(null===(n=e.peerconnection)||void 0===n?void 0:n.getRemoteTracks(null,Ri.VIDEO))||[],o=new Map;for(const e of r)o.set(e.getSourceName(),i);return o}_onMediaSessionStarted(e){e.isP2P?e.setReceiverVideoConstraint(this._getDefaultSourceReceiverConstraints(e)):this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints)}getLastN(){return this._lastN}setAssumedBandwidthBps(e){this._receiverVideoConstraints.updateAssumedBandwidthBps(e)&&this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints)}setLastN(e){this._lastN!==e&&(this._lastN=e,this._receiverVideoConstraints.updateLastN(e)&&this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints))}setPreferredReceiveMaxFrameHeight(e){this._maxFrameHeight=e;for(const t of this._conference.getMediaSessions())t.isP2P?t.setReceiverVideoConstraint(this._getDefaultSourceReceiverConstraints(t,e)):this._receiverVideoConstraints.updateReceiveResolution(e)&&this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints)}setReceiverConstraints(e){if(e){if(Object.keys(e).includes("onStageEndpoints","selectedEndpoints"))throw new Error(\'"onStageEndpoints" and "selectedEndpoints" are not supported when sourceNameSignaling is enabled.\');if(this._receiverVideoConstraints.updateReceiverVideoConstraints(e)){var t,n;this._assumedBandwidthBps=null!==(t=e.assumedBandwidthBps)&&void 0!==t?t:this._assumedBandwidthBps,this._lastN=null!==(n=e.lastN)&&void 0!==n?n:this._lastN,this._rtc.setReceiverVideoConstraints(e);const i=this._conference.getMediaSessions().find((e=>e.isP2P));if(!i||!e.constraints)return;const r=Array.from(Object.entries(e.constraints)).map((e=>(e[1]=e[1].maxHeight,e)));this._sourceReceiverConstraints=new Map(r),i.setReceiverVideoConstraint(this._sourceReceiverConstraints)}}}}const nh=(0,E.getLogger)("modules/qualitycontrol/SendVideoController.js");class ih{constructor(e,t){this._conference=e,this._preferredSendMaxFrameHeight=2160,this._rtc=t,this._sourceSenderConstraints=new Map,this._conference.on(q,(e=>this._onMediaSessionStarted(e))),this._conference.on(G,(()=>this._configureConstraintsForLocalSources())),this._rtc.on(ji.default.SENDER_VIDEO_CONSTRAINTS_CHANGED,(e=>this._onSenderConstraintsReceived(e)))}_configureConstraintsForLocalSources(){for(const e of this._rtc.getLocalVideoTracks()){const t=e.getSourceName();t&&this._propagateSendMaxFrameHeight(t)}}_onMediaSessionStarted(e){e.addListener(da.REMOTE_SOURCE_CONSTRAINTS_CHANGED,((e,t)=>{e===this._conference.getActiveMediaSession()&&t.forEach((e=>this._onSenderConstraintsReceived(e)))}))}_onSenderConstraintsReceived(e){var t;const{maxHeight:n,sourceName:i}=e,r=null!==(t=this._conference.getLocalVideoTracks())&&void 0!==t?t:[];for(const e of r)e.getSourceName()===i&&this._sourceSenderConstraints.get(i)!==n&&(this._sourceSenderConstraints.set(i,-1===n?Math.min(2160,this._preferredSendMaxFrameHeight):n),nh.debug(`Sender constraints for source:${i} changed to maxHeight:${n}`),this._propagateSendMaxFrameHeight(i))}_propagateSendMaxFrameHeight(e){if(!e)throw new Error("sourceName missing for calculating the sendMaxHeight for video tracks");const t=this._selectSendMaxFrameHeight(e),n=[];if(t>=0)for(const i of this._conference.getMediaSessions())n.push(i.setSenderVideoConstraint(t,e));return Promise.all(n)}_selectSendMaxFrameHeight(e){if(!e)throw new Error("sourceName missing for calculating the sendMaxHeight for video tracks");const t=this._conference.getActiveMediaSession()?this._sourceSenderConstraints.get(e):void 0;return this._preferredSendMaxFrameHeight>=0&&t>=0?Math.min(this._preferredSendMaxFrameHeight,t):t>=0?t:this._preferredSendMaxFrameHeight}setPreferredSendMaxFrameHeight(e){this._preferredSendMaxFrameHeight=e;const t=[];for(const e of this._sourceSenderConstraints.keys())t.push(this._propagateSendMaxFrameHeight(e));return Promise.allSettled(t)}}const rh={getFocusRecordingUpdate(e){const t=e&&e.getElementsByTagName("jibri-recording-status")[0];if(t)return{error:t.getAttribute("failure_reason"),initiator:t.getAttribute("initiator"),recordingMode:t.getAttribute("recording_mode"),sessionID:t.getAttribute("session_id"),status:t.getAttribute("status")}},getHiddenDomainUpdate(e){const t=e.getElementsByTagName("live-stream-view-url")[0],n=t&&t.textContent,i=e.getElementsByTagName("mode")[0],r=i&&i.textContent&&i.textContent.toLowerCase(),o=e.getElementsByTagName("session_id")[0];return{liveStreamViewURL:n,mode:r,sessionID:o&&o.textContent}},getSessionIdFromIq(e){const t=e&&e.getElementsByTagName("jibri")[0];return t&&t.getAttribute("session_id")},getSessionId(e){const t=e.getElementsByTagName("session_id")[0];return t&&t.textContent},isFromFocus:e=>e.getAttribute("from").includes("focus")};class oh{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._connection=e.connection,this._mode=e.mode,this._jibriJid=null,this._statusFromJicofo="",this._setSessionID(e.sessionID),this.setStatus(e.status)}getError(){return this._error}getID(){return this._sessionID}getInitiator(){return this._initiator}getLiveStreamViewURL(){return this._liveStreamViewURL}getStatus(){return this._status?this._status:this._statusFromJicofo}getJibriJid(){return this._jibriJid}getTerminator(){return this._terminator}getMode(){return this._mode}setError(e){this._error=e}setLiveStreamViewURL(e){this._liveStreamViewURL=e}setStatus(e){this._status=e}setStatusFromJicofo(e){this._statusFromJicofo=e}setJibriJid(e){this._jibriJid=e}setInitiator(e){this._initiator=e}setTerminator(e){this._terminator=e}start(e){let{appData:t,broadcastId:n,focusMucJid:i,streamId:r}=e;return new Promise(((e,o)=>{this._connection.sendIQ(this._createIQ({action:"start",appData:t,focusMucJid:i,broadcastId:n,streamId:r}),(t=>{this.setStatus("pending"),this._setSessionID(rh.getSessionIdFromIq(t)),e()}),(e=>{this._setErrorFromIq(e),o(e)}))}))}stop(e){let{focusMucJid:t}=e;return new Promise(((e,n)=>{this._connection.sendIQ(this._createIQ({action:"stop",focusMucJid:t}),e,n)}))}_createIQ(e){let{action:t,appData:n,broadcastId:i,focusMucJid:r,streamId:o}=e;return(0,St.$iq)({to:r,type:"set"}).c("jibri",{xmlns:"http://jitsi.org/protocol/jibri",action:t,app_data:n,recording_mode:this._mode,streamid:o,you_tube_broadcast_id:i}).up()}_setErrorFromIq(e){const t=e.getElementsByTagName("error")[0];this.setError(t.children[0].tagName)}_setSessionID(e){this._sessionID=e}}const sh=(0,E.getLogger)("modules/recording/RecordingManager.js"),ah=class{constructor(e){this._sessions={},this._chatRoom=e,this.onPresence=this.onPresence.bind(this),this.onMemberLeft=this.onMemberLeft.bind(this),this._chatRoom.eventEmitter.addListener(Hi.XMPPEvents.PRESENCE_RECEIVED,this.onPresence),this._chatRoom.eventEmitter.addListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,this.onMemberLeft)}getSession(e){return this._sessions[e]}getSessionByJibriJid(e){let t;return Object.values(this._sessions).forEach((n=>{n.getJibriJid()===e&&(t=n)})),t}onPresence(e){let{fromHiddenDomain:t,presence:n}=e;rh.isFromFocus(n)?this._handleFocusPresence(n):t&&this._handleJibriPresence(n)}onMemberLeft(e){const t=this.getSessionByJibriJid(e);if(t){const e=t.getStatus();t.setStatus(""),t.setJibriJid(null),t.getStatus()!==e&&this._emitSessionUpdate(t)}}startRecording(e){const t=new oh({...e,connection:this._chatRoom.connection});return t.start({appData:e.appData,broadcastId:e.broadcastId,focusMucJid:this._chatRoom.focusMucJid,streamId:e.streamId}).then((()=>(this.getSession(t.getID())||(this._addSession(t),this._emitSessionUpdate(t)),t))).catch((e=>(this._emitSessionUpdate(t),Promise.reject(e))))}stopRecording(e){const t=this.getSession(e);return t?t.stop({focusMucJid:this._chatRoom.focusMucJid}):Promise.reject(new Error("Could not find session"))}_addSession(e){this._sessions[e.getID()]=e}_createSession(e,t,n){const i=new oh({connection:this._chatRoom.connection,focusMucJid:this._chatRoom.focusMucJid,mode:n,sessionID:e,status:t});return this._addSession(i),i}_emitSessionUpdate(e,t){this._chatRoom.eventEmitter.emit(Hi.XMPPEvents.RECORDER_STATE_CHANGED,e,t)}_handleFocusPresence(e){const t=rh.getFocusRecordingUpdate(e);if(!t)return;const{error:n,initiator:i,recordingMode:r,sessionID:o,status:s}=t;let a=this.getSession(o);a||"off"!==s?a&&a.getStatus()===s&&a.getError()===n?sh.warn("Ignoring duplicate presence update: ",JSON.stringify(t)):(a||(a=this._createSession(o,s,r)),a.setStatusFromJicofo(s),n&&a.setError(n),this._emitSessionUpdate(a,i)):sh.warn("Ignoring recording presence update","Received a new session with status off.")}_handleJibriPresence(e){const{liveStreamViewURL:t,mode:n,sessionID:i}=rh.getHiddenDomainUpdate(e);if(!i)return void sh.warn("Ignoring potential jibri presence due to no session id.");let r=this.getSession(i);r||(r=this._createSession(i,"on",n)),r.setStatus("on"),r.setJibriJid(e.getAttribute("from")),r.setLiveStreamViewURL(t),this._emitSessionUpdate(r)}},dh=(0,E.getLogger)("modules/statistics/AudioOutputProblemDetector.js");class ch{constructor(e){this._conference=e,this._localAudioLevelCache={},this._reportedParticipants=[],this._audioProblemCandidates={},this._numberOfRemoteAudioLevelsReceived={},this._onLocalAudioLevelsReport=this._onLocalAudioLevelsReport.bind(this),this._onRemoteAudioLevelReceived=this._onRemoteAudioLevelReceived.bind(this),this._clearUserData=this._clearUserData.bind(this),this._conference.on(gl,this._onRemoteAudioLevelReceived),this._conference.statistics.addConnectionStatsListener(this._onLocalAudioLevelsReport),this._conference.on(dt,this._clearUserData)}_onRemoteAudioLevelReceived(e,t){let{avgAudioLevels:n}=t;const i=this._numberOfRemoteAudioLevelsReceived[e]+1||0;if(this._numberOfRemoteAudioLevelsReceived[e]=i,-1!==this._reportedParticipants.indexOf(e)||e in this._audioProblemCandidates||n<=0||i<3)return;const r=this._conference.getParticipantById(e);if(r&&r.getTracksByMediaType(Ri.AUDIO).length>0&&r.isAudioMuted())return;const o=this._localAudioLevelCache[e];Array.isArray(o)&&!o.every((e=>0===e))||(this._audioProblemCandidates[e]={remoteAudioLevels:n,localAudioLevels:[]})}_onLocalAudioLevelsReport(e,t){let{avgAudioLevels:n}=t;e===this._conference.getActivePeerConnection()&&(Object.keys(n).forEach((e=>{if(-1!==this._reportedParticipants.indexOf(e))return;const t=this._localAudioLevelCache[e];Array.isArray(t)?t.length>=2&&t.shift():this._localAudioLevelCache[e]=[],this._localAudioLevelCache[e].push(n[e])})),Object.keys(this._audioProblemCandidates).forEach((e=>{const{localAudioLevels:t,remoteAudioLevels:i}=this._audioProblemCandidates[e];if(t.push(n[e]),2===t.length){if(t.every((e=>void 0===e||0===e))){const n=JSON.stringify(t);Mi.sendAnalytics(((e,t,n)=>({type:kt.TYPE_OPERATIONAL,action:"audio.output.problem",attributes:{userID:e,localAudioLevels:t,remoteAudioLevels:n}}))(e,n,i)),dh.warn(`A potential problem is detected with the audio output for participant ${e}, local audio levels: ${n}, remote audio levels: ${i}`),this._reportedParticipants.push(e),this._clearUserData(e)}delete this._audioProblemCandidates[e]}})))}_clearUserData(e){delete this._localAudioLevelCache[e]}dispose(){this._conference.off(gl,this._onRemoteAudioLevelReceived),this._conference.off(dt,this._clearUserData),this._conference.statistics.removeConnectionStatsListener(this._onLocalAudioLevelsReport),this._localAudioLevelCache=void 0,this._audioProblemCandidates=void 0,this._reportedParticipants=void 0,this._numberOfRemoteAudioLevelsReceived=void 0,this._conference=void 0}}const lh=(0,E.getLogger)("modules/statistics/AvgRTPStatsReporter.js");class hh{constructor(e){this.name=e,this.count=0,this.sum=0,this.samples=[]}addNext(e){void 0!==e&&("number"!=typeof e?lh.error(`${this.name} - invalid value for idx: ${this.count}`,e):isNaN(e)||(this.sum+=e,this.samples.push(e),this.count+=1))}calculate(){return this.sum/this.count}appendReport(e){e[`${this.name}_avg`]=this.calculate(),e[`${this.name}_samples`]=JSON.stringify(this.samples)}reset(){this.samples=[],this.sum=0,this.count=0}}class uh{constructor(e,t,n){this.isP2P=t,this._n=n,this._sampleIdx=0,this._avgRTT=new hh("rtt"),this._avgRemoteRTTMap=new Map,this._avgRtpStatsReporter=e,this._avgEnd2EndRTT=void 0,this._onConnectionStats=(e,t)=>{this.isP2P===e.isP2P&&this._calculateAvgStats(t)};const i=e._conference;i.statistics.addConnectionStatsListener(this._onConnectionStats),this.isP2P||(this._onUserLeft=e=>this._avgRemoteRTTMap.delete(e),i.on(dt,this._onUserLeft),this._onRemoteStatsUpdated=(e,t)=>this._processRemoteStats(e,t),i.on(gl,this._onRemoteStatsUpdated))}_calculateAvgStats(e){if(e){if(ci.supportsRTTStatistics()&&e.transport&&e.transport.length&&this._avgRTT.addNext(e.transport[0].rtt),this._sampleIdx+=1,this._sampleIdx>=this._n){if(ci.supportsRTTStatistics()){const t=this._avgRtpStatsReporter._conference,n={p2p:this.isP2P,conference_size:t.getParticipantCount()};if(e.transport&&e.transport.length&&Object.assign(n,{local_candidate_type:e.transport[0].localCandidateType,remote_candidate_type:e.transport[0].remoteCandidateType,transport_type:e.transport[0].type}),this._avgRTT.appendReport(n),this.isP2P){const e=this._avgRtpStatsReporter.jvbStatsMonitor._avgEnd2EndRTT;isNaN(e)||(n.rtt_diff=this._avgRTT.calculate()-e)}else{const e=this._calculateAvgRemoteRTT(),t=this._avgRTT.calculate();this._avgEnd2EndRTT=t+e,isNaN(t)||isNaN(e)||(n.end2end_rtt_avg=this._avgEnd2EndRTT)}Mi.sendAnalytics(hn(n))}this._resetAvgStats()}}else lh.error("No stats")}_calculateAvgRemoteRTT(){let e=0,t=0;for(const n of this._avgRemoteRTTMap.values()){const i=n.calculate();isNaN(i)||(t+=i,e+=1,n.reset())}return t/e}_processRemoteStats(e,t){const n="number"==typeof t.jvbRTT;let i=this._avgRemoteRTTMap.get(e);!i&&n&&(i=new hh(`${e}_stat_rtt`),this._avgRemoteRTTMap.set(e,i)),n?i.addNext(t.jvbRTT):i&&this._avgRemoteRTTMap.delete(e)}_resetAvgStats(){this._avgRTT.reset(),this._avgRemoteRTTMap&&this._avgRemoteRTTMap.clear(),this._sampleIdx=0}dispose(){const e=this._avgRtpStatsReporter._conference;e.statistics.removeConnectionStatsListener(this._onConnectionStats),this.isP2P||(e.off(gl,this._onRemoteStatsUpdated),e.off(dt,this._onUserLeft))}}class ph{constructor(e,t){this._n=t,t>0?(lh.info(`Avg RTP stats will be calculated every ${t} samples`),this._sampleIdx=0,this._conference=e,this._avgAudioBitrateUp=new hh("bitrate_audio_upload"),this._avgAudioBitrateDown=new hh("bitrate_audio_download"),this._avgVideoBitrateUp=new hh("bitrate_video_upload"),this._avgVideoBitrateDown=new hh("bitrate_video_download"),this._avgBandwidthUp=new hh("bandwidth_upload"),this._avgBandwidthDown=new hh("bandwidth_download"),this._avgPacketLossTotal=new hh("packet_loss_total"),this._avgPacketLossUp=new hh("packet_loss_upload"),this._avgPacketLossDown=new hh("packet_loss_download"),this._avgRemoteFPS=new hh("framerate_remote"),this._avgRemoteScreenFPS=new hh("framerate_screen_remote"),this._avgLocalFPS=new hh("framerate_local"),this._avgLocalScreenFPS=new hh("framerate_screen_local"),this._avgRemoteCameraPixels=new hh("pixels_remote"),this._avgRemoteScreenPixels=new hh("pixels_screen_remote"),this._avgLocalCameraPixels=new hh("pixels_local"),this._avgLocalScreenPixels=new hh("pixels_screen_local"),this._avgCQ=new hh("connection_quality"),this._cachedTransportStats=void 0,this._onLocalStatsUpdated=e=>{this._calculateAvgStats(e),this._maybeSendTransportAnalyticsEvent(e)},e.on(ml,this._onLocalStatsUpdated),this._onP2PStatusChanged=()=>{lh.debug("Resetting average stats calculation"),this._resetAvgStats(),this.jvbStatsMonitor._resetAvgStats(),this.p2pStatsMonitor._resetAvgStats()},e.on(Ue,this._onP2PStatusChanged),this._onJvb121StatusChanged=(e,t)=>{!0===t&&(lh.info("Resetting JVB avg RTP stats"),this._resetAvgJvbStats())},e.on(Ae,this._onJvb121StatusChanged),this.jvbStatsMonitor=new uh(this,!1,t),this.p2pStatsMonitor=new uh(this,!0,t)):lh.info("Avg RTP stats reports are disabled.")}_calculateAvgStats(e){if(!e)return void lh.error("No stats");const t=this._conference.isP2PActive(),n=this._conference.getParticipantCount();if(!t&&n<2)return;const i=e.bitrate,r=e.bandwidth,o=e.packetLoss,s=e.framerate,a=e.resolution;if(i)if(r)if(o)if(s)if(a){if(this._avgAudioBitrateUp.addNext(i.audio.upload),this._avgAudioBitrateDown.addNext(i.audio.download),this._avgVideoBitrateUp.addNext(i.video.upload),this._avgVideoBitrateDown.addNext(i.video.download),ci.supportsBandwidthStatistics()&&(this._avgBandwidthUp.addNext(r.upload),this._avgBandwidthDown.addNext(r.download)),this._avgPacketLossUp.addNext(o.upload),this._avgPacketLossDown.addNext(o.download),this._avgPacketLossTotal.addNext(o.total),this._avgCQ.addNext(e.connectionQuality),s&&(this._avgRemoteFPS.addNext(this._calculateAvgVideoFps(s,!1,Qo.VideoType.CAMERA)),this._avgRemoteScreenFPS.addNext(this._calculateAvgVideoFps(s,!1,Qo.VideoType.DESKTOP)),this._avgLocalFPS.addNext(this._calculateAvgVideoFps(s,!0,Qo.VideoType.CAMERA)),this._avgLocalScreenFPS.addNext(this._calculateAvgVideoFps(s,!0,Qo.VideoType.DESKTOP))),a&&(this._avgRemoteCameraPixels.addNext(this._calculateAvgVideoPixels(a,!1,Qo.VideoType.CAMERA)),this._avgRemoteScreenPixels.addNext(this._calculateAvgVideoPixels(a,!1,Qo.VideoType.DESKTOP)),this._avgLocalCameraPixels.addNext(this._calculateAvgVideoPixels(a,!0,Qo.VideoType.CAMERA)),this._avgLocalScreenPixels.addNext(this._calculateAvgVideoPixels(a,!0,Qo.VideoType.DESKTOP))),this._sampleIdx+=1,this._sampleIdx>=this._n){const i={p2p:t,conference_size:n};e.transport&&e.transport.length&&Object.assign(i,{local_candidate_type:e.transport[0].localCandidateType,remote_candidate_type:e.transport[0].remoteCandidateType,transport_type:e.transport[0].type}),this._avgAudioBitrateUp.appendReport(i),this._avgAudioBitrateDown.appendReport(i),this._avgVideoBitrateUp.appendReport(i),this._avgVideoBitrateDown.appendReport(i),ci.supportsBandwidthStatistics()&&(this._avgBandwidthUp.appendReport(i),this._avgBandwidthDown.appendReport(i)),this._avgPacketLossUp.appendReport(i),this._avgPacketLossDown.appendReport(i),this._avgPacketLossTotal.appendReport(i),this._avgRemoteFPS.appendReport(i),isNaN(this._avgRemoteScreenFPS.calculate())||this._avgRemoteScreenFPS.appendReport(i),this._avgLocalFPS.appendReport(i),isNaN(this._avgLocalScreenFPS.calculate())||this._avgLocalScreenFPS.appendReport(i),this._avgRemoteCameraPixels.appendReport(i),isNaN(this._avgRemoteScreenPixels.calculate())||this._avgRemoteScreenPixels.appendReport(i),this._avgLocalCameraPixels.appendReport(i),isNaN(this._avgLocalScreenPixels.calculate())||this._avgLocalScreenPixels.appendReport(i),this._avgCQ.appendReport(i),Mi.sendAnalytics(hn(i)),this._resetAvgStats()}}else lh.error("No resolution");else lh.error(\'No "framerate"\');else lh.error(\'No "packetloss"\');else lh.error(\'No "bandwidth"\');else lh.error(\'No "bitrate"\')}_calculateAvgVideoPixels(e,t,n){let i=0,r=0;const o=this._conference.myUserId();for(const s of Object.keys(e))if(t?s===o:s!==o){const o=t?null:this._conference.getParticipantById(s),a=e[s];if((t||o)&&a){const e=this._calculatePeerAvgVideoPixels(a,o,n);isNaN(e)||(i+=e,r+=1)}}return i/r}_calculatePeerAvgVideoPixels(e,t,n){let i=Object.keys(e).map((e=>Number(e))),r=null;const o=this._conference.getActivePeerConnection();t?(r=t.getTracksByMediaType(Ri.VIDEO),r&&(i=i.filter((e=>r.find((t=>!t.isMuted()&&t.getSSRC()===e&&t.videoType===n)))))):(r=this._conference.getLocalTracks(Ri.VIDEO),i=i.filter((e=>r.find((t=>!t.isMuted()&&o.getLocalSSRC(t)===e&&t.videoType===n)))));let s=0,a=0;for(const t of i){const n=Number(e[t].height)*Number(e[t].width);!isNaN(n)&&n>0&&(s+=n,a+=1)}return s/a}_calculateAvgVideoFps(e,t,n){let i=0,r=0;const o=this._conference.myUserId();for(const s of Object.keys(e))if(t?s===o:s!==o){const o=t?null:this._conference.getParticipantById(s),a=e[s];if((t||o)&&a){const e=this._calculatePeerAvgVideoFps(a,o,n);isNaN(e)||(i+=e,r+=1)}}return i/r}_calculatePeerAvgVideoFps(e,t,n){let i=Object.keys(e).map((e=>Number(e))),r=null;const o=this._conference.getActivePeerConnection();t?(r=t.getTracksByMediaType(Ri.VIDEO),r&&(i=i.filter((e=>r.find((t=>!t.isMuted()&&t.getSSRC()===e&&t.videoType===n)))))):(r=this._conference.getLocalTracks(Ri.VIDEO),i=i.filter((e=>r.find((t=>!t.isMuted()&&o.getLocalSSRC(t)===e&&t.videoType===n)))));let s=0,a=0;for(const t of i){const n=Number(e[t]);!isNaN(n)&&n>0&&(s+=n,a+=1)}return s/a}_maybeSendTransportAnalyticsEvent(e){if(!e||!e.transport||!e.transport.length)return;const t={p2p:e.transport[0].p2p,local_candidate_type:e.transport[0].localCandidateType,remote_candidate_type:e.transport[0].remoteCandidateType,transport_type:e.transport[0].type};var n;this._cachedTransportStats&&Et()(t,this._cachedTransportStats)||(this._cachedTransportStats=t,Mi.sendAnalytics((n=t,{type:kt.TYPE_OPERATIONAL,action:"transport.stats",attributes:n})))}_resetAvgJvbStats(){this._resetAvgStats(),this.jvbStatsMonitor._resetAvgStats()}_resetAvgStats(){this._avgAudioBitrateUp.reset(),this._avgAudioBitrateDown.reset(),this._avgVideoBitrateUp.reset(),this._avgVideoBitrateDown.reset(),this._avgBandwidthUp.reset(),this._avgBandwidthDown.reset(),this._avgPacketLossUp.reset(),this._avgPacketLossDown.reset(),this._avgPacketLossTotal.reset(),this._avgRemoteFPS.reset(),this._avgRemoteScreenFPS.reset(),this._avgLocalFPS.reset(),this._avgLocalScreenFPS.reset(),this._avgRemoteCameraPixels.reset(),this._avgRemoteScreenPixels.reset(),this._avgLocalCameraPixels.reset(),this._avgLocalScreenPixels.reset(),this._avgCQ.reset(),this._sampleIdx=0}dispose(){this._conference.off(Ue,this._onP2PStatusChanged),this._conference.off(ml,this._onLocalStatsUpdated),this._conference.off(Ae,this._onJvb121StatusChanged),this.jvbStatsMonitor.dispose(),this.p2pStatsMonitor.dispose()}}var mh=n(444),gh=n.n(mh);class fh{constructor(e){this.stats={users:{},dominantSpeakerId:null};const t=e.myUserId();this.stats.users[t]=new(gh())(t,null,!0),this.conference=e,e.addEventListener(ye,this._onDominantSpeaker.bind(this)),e.addEventListener(at,this._onUserJoin.bind(this)),e.addEventListener(dt,this._onUserLeave.bind(this)),e.addEventListener(_e,this._onDisplayNameChange.bind(this)),e.on(Ce,((e,t)=>{let{type:n,faceLandmarks:i}=t;"face-landmarks"===n&&this._onFaceLandmarkAdd(e.getId(),i)})),e.xmpp&&e.xmpp.addListener(Hi.XMPPEvents.SPEAKER_STATS_RECEIVED,this._updateStats.bind(this))}_onDominantSpeaker(e,t,n){const i=this.stats.users[this.stats.dominantSpeakerId],r=this.stats.users[e];i&&i.setDominantSpeaker(!1),r&&r.setDominantSpeaker(!0,n),this.stats.dominantSpeakerId=e}_onUserJoin(e,t){t.isHidden()||this.stats.users[e]||(this.stats.users[e]=new(gh())(e,t.getDisplayName()))}_onUserLeave(e){const t=this.stats.users[e];t&&t.markAsHasLeft()}_onDisplayNameChange(e,t){const n=this.stats.users[e];n&&n.setDisplayName(t)}_onFaceLandmarkAdd(e,t){const n=this.stats.users[e];n&&t&&n.addFaceLandmarks(t)}getStats(){return this.stats.users}_updateStats(e){for(const t in e){let n;const i=this.conference.getParticipantById(t);i&&i.isHidden()||(this.stats.users[t]?(n=this.stats.users[t],n.getDisplayName()||n.setDisplayName(e[t].displayName)):(n=new(gh())(t,e[t].displayName),this.stats.users[t]=n,n.markAsHasLeft()),n.totalDominantSpeakerTime=e[t].totalDominantSpeakerTime,Array.isArray(e[t].faceLandmarks)&&n.setFaceLandmarks(e[t].faceLandmarks))}}}const vh=n(810).getLogger("modules/version/ComponentsVersions.js");function _h(e){this.versions={},this.conference=e,this.conference.addCommandListener("versions",this.processVersions.bind(this))}let yh,Eh,Sh;_h.prototype.processVersions=function(e,t,n){this.conference.isFocus(n)?e.children.forEach((e=>{const t=e.attributes.name,n=e.value;this.versions[t]!==n&&(this.versions[t]=n,vh.info(`Got ${t} version: ${n}`))})):vh.warn(`Received versions not from the focus user: ${e}`,n)},_h.prototype.getComponentVersion=function(e){return this.versions[e]},function(e){e.STATUS_AVAILABLE="available",e.STATUS_UNDEFINED="undefined",e.STATUS_BUSY="busy"}(yh||(yh={})),function(e){e.STATE_ON="on",e.STATE_OFF="off",e.STATE_PENDING="pending",e.STATE_RETRYING="retrying",e.STATE_FAILED="failed"}(Eh||(Eh={})),function(e){e.ERROR_NO_CONNECTION="error_no_connection",e.ERROR_SESSION_EXISTS="error_session_already_exists"}(Sh||(Sh={}));const bh=yh.STATUS_AVAILABLE,Th=yh.STATUS_UNDEFINED,Ch=yh.STATUS_BUSY,xh=Eh.STATE_ON,Rh=Eh.STATE_OFF,Ah=Eh.STATE_PENDING,wh=Eh.STATE_RETRYING,Ih=Eh.STATE_FAILED,Ph=Sh.ERROR_NO_CONNECTION,Dh=Sh.ERROR_SESSION_EXISTS,Oh=(0,E.getLogger)("modules/videosipgw/JitsiVideoSIPGWSession.js"),kh="STATE_CHANGED";class Nh extends xr{constructor(e,t,n){super(),this.sipAddress=e,this.displayName=t,this.chatRoom=n,this.state=void 0}stop(){this.state!==Rh&&this.state!==Ih?this._sendJibriIQ("stop"):Oh.warn("Video SIP GW session already stopped or failed!")}start(){this.state!==xh&&this.state!==Rh&&this.state!==Ah&&this.state!==wh?this._sendJibriIQ("start"):Oh.warn("Video SIP GW session already started!")}setState(e,t){if(e===this.state)return;const n=this.state;this.state=e,this.eventEmitter.emit(kh,{address:this.sipAddress,failureReason:t,oldState:n,newState:this.state,displayName:this.displayName})}addStateListener(e){this.addListener(kh,e)}removeStateListener(e){this.removeListener(kh,e)}_sendJibriIQ(e){const t={xmlns:"http://jitsi.org/protocol/jibri",action:e,sipaddress:this.sipAddress};t.displayname=this.displayName;const n=(0,St.$iq)({to:this.chatRoom.focusMucJid,type:"set"}).c("jibri",t).up();Oh.debug(`${e} video SIP GW session`,n.nodeTree),this.chatRoom.connection.sendIQ(n,(()=>{}),(t=>{Oh.error(`Failed to ${e} video SIP GW session, error: `,t),this.setState(Ih)}))}}const Mh=(0,E.getLogger)("modules/videosipgw/VideoSIPGW.js");class Lh{constructor(e){this.chatRoom=e,this.eventEmitter=e.eventEmitter,Mh.debug("creating VideoSIPGW"),this.sessions={},this.sessionStateChangeListener=this.sessionStateChanged.bind(this),e.addPresenceListener("jibri-sip-call-state",this.handleJibriSIPState.bind(this))}handleJibriSIPState(e){const t=e.attributes;if(!t)return;Mh.debug("Handle video sip gw state : ",t);const n=t.state;if(n!==this.state)switch(n){case xh:case Rh:case Ah:case wh:case Ih:{const e=t.sipaddress;if(!e)return;const i=this.sessions[e];i?i.setState(n,t.failure_reason):Mh.warn("Video SIP GW session not found:",e)}}}createVideoSIPGWSession(e,t){if(this.sessions[e])return Mh.warn("There was already a Video SIP GW session for address",e),new Error(Dh);const n=new Nh(e,t,this.chatRoom);return n.addStateListener(this.sessionStateChangeListener),this.sessions[e]=n,n}sessionStateChanged(e){const t=e.address;if(e.newState===Rh||e.newState===Ih){const e=this.sessions[t];if(!e)return void Mh.error("Missing Video SIP GW session with address:",t);e.removeStateListener(this.sessionStateChangeListener),delete this.sessions[t]}this.eventEmitter.emit(Hi.XMPPEvents.VIDEO_SIP_GW_SESSION_STATE_CHANGED,e)}}const Fh=(0,E.getLogger)("modules/xmpp/SignalingLayerImpl.js"),jh="SourceInfo";class Vh extends Ac{constructor(){super(),this.ssrcOwners=new Map,this.chatRoom=null,this._localSourceState={},this._remoteSourceState={}}_addLocalSourceInfoToPresence(){return!!this.chatRoom&&this.chatRoom.addOrReplaceInPresence(jh,{value:JSON.stringify(this._localSourceState)})}_bindChatRoomEventHandlers(e){const t=(e,t)=>{this.eventEmitter.emit(yc,e,Ri.AUDIO,t)};this._audioMuteHandler=(e,n)=>{this._doesEndpointSendNewSourceInfo(n)||t(n,"true"===e.value)},e.addPresenceListener("audiomuted",this._audioMuteHandler);const n=(e,t)=>{this.eventEmitter.emit(yc,e,Ri.VIDEO,t)};this._videoMuteHandler=(e,t)=>{this._doesEndpointSendNewSourceInfo(t)||n(t,"true"===e.value)},e.addPresenceListener("videomuted",this._videoMuteHandler);const i=(e,t)=>{this.eventEmitter.emit(Ec,e,t)};this._videoTypeHandler=(e,t)=>{this._doesEndpointSendNewSourceInfo(t)||i(t,e.value)},e.addPresenceListener("videoType",this._videoTypeHandler),this._sourceInfoHandler=(e,t)=>{const n=t,{value:i}=e,r=_r(i),o=this._doesEndpointSendNewSourceInfo(n),s=this._remoteSourceState[n]||(this._remoteSourceState[n]={});for(const e of Object.keys(r)){var a;let n=!1;const i=xc(e),d=Boolean(r[e].muted),c=s[e]||(s[e]={sourceName:e});c.muted!==d&&(n=!0,c.muted=d,o&&!this._localSourceState[e]&&this.eventEmitter.emit(Sc,e,d));const l=i===Ri.VIDEO?null!==(a=r[e].videoType)&&void 0!==a?a:Qo.VideoType.CAMERA:void 0;c.videoType!==l&&(c.videoType=l,n=!0,o&&!this._localSourceState[e]&&this.eventEmitter.emit(Tc,e,l)),n&&Ai.isSsrcRewritingSupported()&&this.eventEmitter.emit(bc,e,t,d,l)}const d=Object.keys(r);for(const e of Object.keys(s))-1===d.indexOf(e)&&delete s[e]},e.addPresenceListener("SourceInfo",this._sourceInfoHandler),this._memberLeftHandler=e=>{const t=St.Strophe.getResourceFromJid(e);delete this._remoteSourceState[t]},e.addEventListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,this._memberLeftHandler)}_doesEndpointSendNewSourceInfo(e){var t;const n=null===(t=this.chatRoom)||void 0===t?void 0:t.getLastPresence(e);return Boolean(n&&n.find((e=>e.tagName===jh)))}_logOwnerChangedMessage(e){Ai.isSsrcRewritingSupported()?Fh.debug(e):Fh.error(e)}getPeerMediaInfo(e,t,n){var i;const r=null===(i=this.chatRoom)||void 0===i?void 0:i.getLastPresence(e);if(!r)return void Fh.warn(`getPeerMediaInfo - no presence stored for: ${e}`);if(!this._doesEndpointSendNewSourceInfo(e))return(()=>{if(this.chatRoom)return this.chatRoom.getMediaPresenceInfo(e,t);Fh.warn("Requested peer media info, before room was set")})();if(n)return this.getPeerSourceInfo(e,n);const o={muted:!0};if(t===Ri.VIDEO){o.videoType=void 0;const e=ms(r,"jitsi_participant_codecList"),t=ms(r,"jitsi_participant_codecType");var s,a;e.length?o.codecList=null!==(s=null===(a=e[0].value)||void 0===a?void 0:a.split(","))&&void 0!==s?s:[]:t.length>0&&(o.codecType=t[0].value)}return o}getPeerSourceInfo(e,t){var n;const i={muted:!0,videoType:xc(t)===Ri.VIDEO?Qo.VideoType.CAMERA:void 0};return this._remoteSourceState[e]?null!==(n=this._remoteSourceState[e][t])&&void 0!==n?n:i:void 0}getSSRCOwner(e){var t;return null===(t=this.ssrcOwners.get(e))||void 0===t?void 0:t.endpointId}getTrackSourceName(e){var t;return null===(t=this.ssrcOwners.get(e))||void 0===t?void 0:t.sourceName}removeSSRCOwners(e){if(null!=e&&e.length)for(const t of e)this.ssrcOwners.delete(t)}setChatRoom(e){const t=this.chatRoom;this.chatRoom=e,t&&(t.removePresenceListener("audiomuted",this._audioMuteHandler),t.removePresenceListener("videomuted",this._videoMuteHandler),t.removePresenceListener("videoType",this._videoTypeHandler),this._sourceInfoHandler&&t.removePresenceListener(jh,this._sourceInfoHandler),this._memberLeftHandler&&t.removeEventListener(Hi.XMPPEvents.MUC_MEMBER_LEFT,this._memberLeftHandler)),e&&(this._bindChatRoomEventHandlers(e),this._addLocalSourceInfoToPresence())}setSSRCOwner(e,t,n){if("number"!=typeof e)throw new TypeError(`SSRC(${e}) must be a number`);const i=this.ssrcOwners.get(e);if(i){const{endpointId:e,sourceName:r}=i;e===t&&r===n||this._logOwnerChangedMessage(`SSRC owner re-assigned from ${i}(source-name=${r}) to ${t}(source-name=${n})`)}this.ssrcOwners.set(e,{endpointId:t,sourceName:n})}setTrackMuteStatus(e,t){return this._localSourceState[e]||(this._localSourceState[e]={}),this._localSourceState[e].muted=t,Fh.debug(`Mute state of ${e} changed to muted=${t}`),!!this.chatRoom&&this._addLocalSourceInfoToPresence()}setTrackVideoType(e,t){return this._localSourceState[e]||(this._localSourceState[e]={}),this._localSourceState[e].videoType!==t&&(this._localSourceState[e].videoType=t===Qo.VideoType.CAMERA?void 0:t,this._addLocalSourceInfoToPresence())}updateSsrcOwnersOnLeave(e){const t=[];this.ssrcOwners.forEach(((n,i)=>{let{endpointId:r}=n;r===e&&t.push(i)})),null!=t&&t.length&&this.removeSSRCOwners(t)}}let Uh;!function(e){e.CAMERA="camera",e.DESKTOP="desktop",e.DESKTOP_HIGH_FPS="desktop_high_fps",e.NONE="none"}(Uh||(Uh={}));const Hh=(0,E.getLogger)("JitsiConference.js");function $h(e){return"string"==typeof e?Object.values(Ds).find((t=>t===e.toLowerCase())):null}function Jh(e){var t,n,i;if(!e.name||e.name.toLowerCase()!==e.name.toString()){const t="Invalid conference name (no conference name passed or it contains invalid characters like capital letters)!",n=e.name?`roomName=${e.name}; condition - ${e.name.toLowerCase()}!==${e.name.toString()}`:"No room name passed!";throw Hh.error(`${t} ${n}`),new Error(t)}if(this.connection=e.connection,this.xmpp=null===(t=this.connection)||void 0===t?void 0:t.xmpp,this.xmpp.isRoomCreated(e.name,e.customDomain)){const e="A conference with the same name has already been created!";throw delete this.connection,delete this.xmpp,Hh.error(e),new Error(e)}this.eventEmitter=new ii,this.options=e,this.eventManager=new Ji(this),this.participants=new Map,this._signalingLayer=new Vh,this._init(e),this.componentsVersions=new _h(this),this.jvbJingleSession=null,this.lastDominantSpeaker=null,this.dtmfManager=null,this.somebodySupportsDTMF=!1,this.authEnabled=!1,this.startAudioMuted=!1,this.startVideoMuted=!1,this.startMutedPolicy={audio:!1,video:!1},this.isMutedByFocus=!1,this.mutedByFocusActor=null,this.isVideoMutedByFocus=!1,this.mutedVideoByFocusActor=null,this.wasStopped=!1,this.properties={},this.connectionQuality=new Sl(this,this.eventEmitter,e),this.avgRtpStatsReporter=new ph(this,e.config.avgRtpStatsN||15),e.config.disableAudioLevels||(this._audioOutputProblemDetector=new ch(this)),this.isJvbConnectionInterrupted=!1,this.speakerStatsCollector=new fh(this),this.deferredStartP2PTask=null;const r=parseInt(e.config.p2p&&e.config.p2p.backToP2PDelay,10);this.backToP2PDelay=isNaN(r)?5:r,Hh.info(`backToP2PDelay: ${this.backToP2PDelay}`),this.isP2PConnectionInterrupted=!1,this.p2p=!1,this.p2pJingleSession=null,this.videoSIPGWHandler=new Lh(this.room),this.recordingManager=new ah(this.room),this._conferenceJoinAnalyticsEventSent=void 0,this.isE2EESupported()&&(Hh.info("End-to-End Encryption is supported"),this._e2eEncryption=new so(this)),Ai.isRunInLiteModeEnabled()&&(Hh.info("Lite mode enabled"),this._liteModeContext=new Yl(this)),this._audioSenderLimitReached=void 0,this._videoSenderLimitReached=void 0,this._firefoxP2pEnabled=ci.isVersionGreaterThan(109)&&(null===(n=null===(i=this.options.config.testing)||void 0===i?void 0:i.enableFirefoxP2p)||void 0===n||n)}function Bh(e,t,n){this.appID=e,this.token=t,this.options=n,Ai.init(n.flags||{}),this.xmpp=new Pa(n,t),this.addEventListener(ur,((e,t,n,i)=>{Mi.sendAnalyticsAndLog(rn(e,t,i))})),this.addEventListener(lr,(e=>{e&&Mi.sendAnalytics(Xt,{message:e})}))}let qh;Jh.prototype.constructor=Jh,Jh.resourceCreator=function(e,t){let n;var i;t?n=co().randomHexString(8).toLowerCase():(n=null===(i=St.Strophe.getNodeFromJid(e))||void 0===i?void 0:i.substr(0,8).toLowerCase(),n&&/[0-9a-f]{8}/g.test(n)||(n=co().randomHexString(8).toLowerCase()));return n},Jh.prototype._init=function(){var e,t,n,i,r,o,s,a,d;let c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.eventManager.setupXMPPListeners();const{config:l}=this.options,h={jvb:{preferenceOrder:ci.isMobileDevice()&&null!==(e=l.videoQuality)&&void 0!==e&&e.mobileCodecPreferenceOrder?l.videoQuality.mobileCodecPreferenceOrder:null===(t=l.videoQuality)||void 0===t?void 0:t.codecPreferenceOrder,disabledCodec:$h(null===(n=l.videoQuality)||void 0===n?void 0:n.disabledCodec),preferredCodec:$h(null===(i=l.videoQuality)||void 0===i?void 0:i.preferredCodec)},p2p:{preferenceOrder:ci.isMobileDevice()&&null!==(r=l.p2p)&&void 0!==r&&r.mobileCodecPreferenceOrder?l.p2p.mobileCodecPreferenceOrder:null===(o=l.p2p)||void 0===o?void 0:o.codecPreferenceOrder,disabledCodec:$h(null===(s=l.p2p)||void 0===s?void 0:s.disabledCodec),preferredCodec:$h(null===(a=l.p2p)||void 0===a?void 0:a.preferredCodec)}};if(this.codecSelection=new La(this,h),this._statsCurrentId=l.statisticsId?l.statisticsId:$o.callStatsUserName,this.room=this.xmpp.createRoom(this.options.name,{...l,statsId:this._statsCurrentId},Jh.resourceCreator),this._signalingLayer.setChatRoom(this.room),this._signalingLayer.on(_c.SOURCE_UPDATED,((e,t,n,i)=>{const r=this.participants.get(t),o=xc(e);r&&(r._setSources(o,n,e,i),this.eventEmitter.emit($e,r))})),this._onIceConnectionInterrupted=this._onIceConnectionInterrupted.bind(this),this.room.addListener(Hi.XMPPEvents.CONNECTION_INTERRUPTED,this._onIceConnectionInterrupted),this._onIceConnectionRestored=this._onIceConnectionRestored.bind(this),this.room.addListener(Hi.XMPPEvents.CONNECTION_RESTORED,this._onIceConnectionRestored),this._onIceConnectionEstablished=this._onIceConnectionEstablished.bind(this),this.room.addListener(Hi.XMPPEvents.CONNECTION_ESTABLISHED,this._onIceConnectionEstablished),this._updateProperties=this._updateProperties.bind(this),this.room.addListener(Hi.XMPPEvents.CONFERENCE_PROPERTIES_CHANGED,this._updateProperties),this._sendConferenceJoinAnalyticsEvent=this._sendConferenceJoinAnalyticsEvent.bind(this),this.room.addListener(Hi.XMPPEvents.MEETING_ID_SET,this._sendConferenceJoinAnalyticsEvent),this._removeLocalSourceOnReject=this._removeLocalSourceOnReject.bind(this),this._updateRoomPresence=this._updateRoomPresence.bind(this),this.room.addListener(Hi.XMPPEvents.SESSION_ACCEPT,this._updateRoomPresence),this.room.addListener(Hi.XMPPEvents.SOURCE_ADD,this._updateRoomPresence),this.room.addListener(Hi.XMPPEvents.SOURCE_ADD_ERROR,this._removeLocalSourceOnReject),this.room.addListener(Hi.XMPPEvents.SOURCE_REMOVE,this._updateRoomPresence),null!==(d=l.e2eping)&&void 0!==d&&d.enabled&&(this.e2eping=new Gl(this,l,((e,t)=>{try{this.sendMessage(e,t,!0)}catch(e){Hh.warn("Failed to send E2E ping request or response.",e&&e.msg)}}))),this.rtc||(this.rtc=new pl(this,c),this.eventManager.setupRTCListeners(),this._registerRtcListeners(this.rtc)),this.receiveVideoController=new th(this,this.rtc),this.sendVideoController=new ih(this,this.rtc),this.statistics||(this.statistics=new Mi(this,{aliasName:this._statsCurrentId,userName:l.statisticsDisplayName?l.statisticsDisplayName:this.myUserId(),confID:l.confID||`${this.connection.options.hosts.domain}/${this.options.name}`,roomName:this.options.name,applicationName:l.applicationName}),Mi.analytics.addPermanentProperties({callstats_name:this._statsCurrentId}),l.longTasksStatsInterval&&this.statistics.attachLongTasksStats()),this.eventManager.setupChatRoomListeners(),this.eventManager.setupStatisticsListeners(),l.enableTalkWhileMuted&&ci.supportsVADDetection())if(l.createVADProcessor){Hh.info("Using VAD detection for generating talk while muted events"),this._audioAnalyser||(this._audioAnalyser=new Fl(this,l.createVADProcessor));const e=new Vl;e.on(Dl,(()=>this.eventEmitter.emit(et))),this._audioAnalyser.addVADDetectionService(e)}else Hh.warn("No VAD Processor was provided. Talk while muted detection service was not initialized!");if(l.enableNoisyMicDetection&&ci.supportsVADDetection())if(l.createVADProcessor){this._audioAnalyser||(this._audioAnalyser=new Fl(this,l.createVADProcessor));const e=new jl;e.on(wl,(()=>this.eventEmitter.emit(je))),this._audioAnalyser.addVADDetectionService(e)}else Hh.warn("No VAD Processor was provided. Noisy microphone detection service was not initialized!");l.enableNoAudioDetection&&!l.disableAudioLevels&&_i.isLocalStatsSupported()&&(this._noAudioSignalDetection=new Ol(this),this._noAudioSignalDetection.on(Al,(()=>{this.eventEmitter.emit(Fe)})),this._noAudioSignalDetection.on(Rl,(e=>{this.eventEmitter.emit(z,e)}))),"channelLastN"in l&&this.setLastN(l.channelLastN),this.jvb121Status=new Kl(this),this.p2pDominantSpeakerDetection=new kl(this),l&&l.deploymentInfo&&l.deploymentInfo.userRegion&&this.setLocalParticipantProperty("region",l.deploymentInfo.userRegion),this.setLocalParticipantProperty("codecList",this.codecSelection.getCodecPreferenceList("jvb")),l&&l.transcriptionLanguage&&"en-US"!==l.transcriptionLanguage&&this.setLocalParticipantProperty("transcription_language",l.transcriptionLanguage)},Jh.prototype.join=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.room&&this.room.join(e,t).then((()=>this._maybeSetSITimeout()))},Jh.prototype.authenticateAndUpgradeRole=function(e){return Da.call(this,{...e,onCreateResource:Jh.resourceCreator})},Jh.prototype.isJoined=function(){return this.room&&this.room.joined},Jh.prototype.isP2PEnabled=function(){return Boolean(this.options.config.p2p&&this.options.config.p2p.enabled)||void 0===this.options.config.p2p},Jh.prototype.isP2PTestModeEnabled=function(){return Boolean(this.options.config.testing&&this.options.config.testing.p2pTestMode)},Jh.prototype.leave=async function(e){if(this.avgRtpStatsReporter&&(this.avgRtpStatsReporter.dispose(),this.avgRtpStatsReporter=null),this._audioOutputProblemDetector&&(this._audioOutputProblemDetector.dispose(),this._audioOutputProblemDetector=null),this.e2eping&&(this.e2eping.stop(),this.e2eping=null),this.getLocalTracks().forEach((e=>this.onLocalTrackRemoved(e))),this.rtc.closeBridgeChannel(),this._sendConferenceLeftAnalyticsEvent(),this.statistics&&this.statistics.dispose(),this._delayedIceFailed&&this._delayedIceFailed.cancel(),this._maybeClearSITimeout(),this._maybeClearDeferredStartP2P(),this.jvbJingleSession&&(this.jvbJingleSession.close(),this.jvbJingleSession=null),this.p2pJingleSession&&(this.p2pJingleSession.close(),this.p2pJingleSession=null),!this.room)throw new Error("You have already left the conference");const t=this.room;let n;t.removeListener(Hi.XMPPEvents.CONNECTION_INTERRUPTED,this._onIceConnectionInterrupted),t.removeListener(Hi.XMPPEvents.CONNECTION_RESTORED,this._onIceConnectionRestored),t.removeListener(Hi.XMPPEvents.CONNECTION_ESTABLISHED,this._onIceConnectionEstablished),t.removeListener(Hi.XMPPEvents.CONFERENCE_PROPERTIES_CHANGED,this._updateProperties),t.removeListener(Hi.XMPPEvents.MEETING_ID_SET,this._sendConferenceJoinAnalyticsEvent),t.removeListener(Hi.XMPPEvents.SESSION_ACCEPT,this._updateRoomPresence),t.removeListener(Hi.XMPPEvents.SOURCE_ADD,this._updateRoomPresence),t.removeListener(Hi.XMPPEvents.SOURCE_ADD_ERROR,this._removeLocalSourceOnReject),t.removeListener(Hi.XMPPEvents.SOURCE_REMOVE,this._updateRoomPresence),this.eventManager.removeXMPPListeners(),this._signalingLayer.setChatRoom(null),this.room=null;try{await t.leave(e)}catch(e){n=e,this.getParticipants().forEach((e=>this.onMemberLeft(e.getJid())))}if(this.rtc&&this.rtc.destroy(),n)throw n},Jh.prototype.isEndConferenceSupported=function(){return Boolean(this.room&&this.room.xmpp.endConferenceComponentAddress)},Jh.prototype.end=function(){if(this.isEndConferenceSupported()){if(!this.room)throw new Error("You have already left the conference");this.room.end()}else Hh.warn("Cannot end conference: is not supported.")},Jh.prototype.getActiveMediaSession=function(){return this.isP2PActive()?this.p2pJingleSession:this.jvbJingleSession},Jh.prototype.getMediaSessions=function(){const e=[];return this.jvbJingleSession&&e.push(this.jvbJingleSession),this.p2pJingleSession&&e.push(this.p2pJingleSession),e},Jh.prototype._registerRtcListeners=function(e){e.addListener(ji.default.DATA_CHANNEL_OPEN,(()=>{for(const e of this.rtc.localTracks)e.isVideoTrack()&&this._sendBridgeVideoTypeMessage(e)}))},Jh.prototype._sendBridgeVideoTypeMessage=function(e){let t=!e||e.isMuted()?Uh.NONE:e.getVideoType();t===Uh.DESKTOP&&this._desktopSharingFrameRate>5&&(t=Uh.DESKTOP_HIGH_FPS),e&&this.rtc.sendSourceVideoType(e.getSourceName(),t)},Jh.prototype.getName=function(){return this.options.name.toString()},Jh.prototype.getConnection=function(){return this.connection},Jh.prototype.isAuthEnabled=function(){return this.authEnabled},Jh.prototype.isLoggedIn=function(){return Boolean(this.authIdentity)},Jh.prototype.getAuthLogin=function(){return this.authIdentity},Jh.prototype.getLocalTracks=function(e){let t=[];return this.rtc&&(t=this.rtc.getLocalTracks(e)),t},Jh.prototype.getLocalAudioTrack=function(){return this.rtc?this.rtc.getLocalAudioTrack():null},Jh.prototype.getLocalVideoTrack=function(){return this.rtc?this.rtc.getLocalVideoTrack():null},Jh.prototype.getLocalVideoTracks=function(){return this.rtc?this.rtc.getLocalVideoTracks():null},Jh.prototype.getPerformanceStats=function(){return{longTasksStats:this.statistics.getLongTasksStats()}},Jh.prototype.on=function(e,t){this.eventEmitter&&this.eventEmitter.on(e,t)},Jh.prototype.once=function(e,t){this.eventEmitter&&this.eventEmitter.once(e,t)},Jh.prototype.off=function(e,t){this.eventEmitter&&this.eventEmitter.removeListener(e,t)},Jh.prototype.addEventListener=Jh.prototype.on,Jh.prototype.removeEventListener=Jh.prototype.off,Jh.prototype.addCommandListener=function(e,t){this.room&&this.room.addPresenceListener(e,t)},Jh.prototype.removeCommandListener=function(e,t){this.room&&this.room.removePresenceListener(e,t)},Jh.prototype.sendTextMessage=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"body";this.room&&this.room.sendMessage(e,t)},Jh.prototype.sendPrivateTextMessage=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"body";this.room&&this.room.sendPrivateMessage(e,t,n)},Jh.prototype.sendCommand=function(e,t){this.room?this.room.addOrReplaceInPresence(e,t)&&this.room.sendPresence():Hh.warn("Not sending a command, room not initialized.")},Jh.prototype.sendCommandOnce=function(e,t){this.sendCommand(e,t),this.removeCommand(e)},Jh.prototype.removeCommand=function(e){this.room&&this.room.removeFromPresence(e)},Jh.prototype.setDisplayName=function(e){if(this.room){const t="nick";e?this.room.addOrReplaceInPresence(t,{attributes:{xmlns:"http://jabber.org/protocol/nick"},value:e})&&this.room.sendPresence():this.room.getFromPresence(t)&&(this.room.removeFromPresence(t),this.room.sendPresence())}},Jh.prototype.setSubject=function(e){this.room&&this.isModerator()?this.room.setSubject(e):Hh.warn(`Failed to set subject, ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator"}`)},Jh.prototype.getTranscriptionStatus=function(){return this.room.transcriptionStatus},Jh.prototype.addTrack=function(e){if(!e)throw new Error("addTrack - a track is required");const t=e.getType(),n=this.rtc.getLocalTracks(t);if(n.length>0){if(e===n[0])return Promise.resolve(e);if(t===Ri.VIDEO&&!n.find((t=>t.getVideoType()===e.getVideoType()))){var i;const n=Cc(this.myUserId(),t,null===(i=this.getLocalTracks(t))||void 0===i?void 0:i.length);e.setSourceName(n);const r=[];return this.p2pJingleSession&&r.push(this.p2pJingleSession.addTracks([e])),this.jvbJingleSession&&r.push(this.jvbJingleSession.addTracks([e])),Promise.all(r).then((()=>{this._setupNewTrack(e),this._sendBridgeVideoTypeMessage(e),this._updateRoomPresence(this.getActiveMediaSession()),(this.isMutedByFocus||this.isVideoMutedByFocus)&&this._fireMuteChangeEvent(e)}))}return Promise.reject(new Error(`Cannot add second ${t} track to the conference`))}return this.replaceTrack(null,e).then((()=>{e.getVideoType()===Qo.VideoType.DESKTOP&&this._updateRoomPresence(this.getActiveMediaSession())}))},Jh.prototype._fireAudioLevelChangeEvent=function(e,t){const n=this.getActivePeerConnection();t&&n!==t||this.eventEmitter.emit(nt,this.myUserId(),e)},Jh.prototype._fireMuteChangeEvent=function(e){let t;if(this.isMutedByFocus&&e.isAudioTrack()&&!e.isMuted()?(this.isMutedByFocus=!1,this.room.muteParticipant(this.room.myroomjid,!1,Ri.AUDIO)):this.isVideoMutedByFocus&&e.isVideoTrack()&&!e.isMuted()&&(this.isVideoMutedByFocus=!1,this.room.muteParticipant(this.room.myroomjid,!1,Ri.VIDEO)),this.mutedByFocusActor&&e.isAudioTrack()){const e=St.Strophe.getResourceFromJid(this.mutedByFocusActor);t=this.participants.get(e)}else if(this.mutedVideoByFocusActor&&e.isVideoTrack()){const e=St.Strophe.getResourceFromJid(this.mutedVideoByFocusActor);t=this.participants.get(e)}const n=ci.isReactNative()?e.videoType===Qo.VideoType.DESKTOP:ci.doesVideoMuteByStreamRemove();e.isVideoTrack()&&!n&&this._sendBridgeVideoTypeMessage(e),this.eventEmitter.emit(it,e,t)},Jh.prototype._getInitialLocalTracks=function(){return this.getLocalTracks().filter((e=>{const t=e.getType();return!(t!==Ri.AUDIO||(this.isStartAudioMuted()||this.startMutedPolicy.audio)&&!ci.isWebKitBased()&&!ci.isReactNative())||t===Ri.VIDEO&&!this.isStartVideoMuted()&&!this.startMutedPolicy.video||(this.onLocalTrackRemoved(e),!1)}))},Jh.prototype.onLocalTrackRemoved=function(e){e.setConference(null),this.rtc.removeLocalTrack(e),e.removeEventListener(Rt,e.muteHandler),e.isAudioTrack()&&e.removeEventListener(Ct,e.audioLevelHandler),this.eventEmitter.emit(rt,e)},Jh.prototype.removeTrack=function(e){return this.replaceTrack(e,null)},Jh.prototype.replaceTrack=function(e,t){const n=null==e?void 0:e.getVideoType(),i=(null==e?void 0:e.getType())||(null==t?void 0:t.getType()),r=null==t?void 0:t.getVideoType();if(e&&t&&n!==r)throw new Error(`Replacing a track of videoType=${n} with a track of videoType=${r} is not supported in this mode.`);if(t){var o;const n=e?e.getSourceName():Cc(this.myUserId(),i,null===(o=this.getLocalTracks(i))||void 0===o?void 0:o.length);t.setSourceName(n)}const s=this===(null==e?void 0:e.conference);return s&&e.disposed||null!=t&&t.disposed?Promise.reject(new dr(tr)):(e&&!s&&Hh.warn(`JitsiConference.replaceTrack oldTrack (${e} does not belong to this conference`),this._doReplaceTrack(s?e:null,t).then((()=>(!s||e.isMuted()||t||e._sendMuteStatus(!0),s&&this.onLocalTrackRemoved(e),t&&this._setupNewTrack(t),(s&&null!=e&&e.isVideoTrack()||null!=t&&t.isVideoTrack())&&this._sendBridgeVideoTypeMessage(t),this._updateRoomPresence(this.getActiveMediaSession()),null!==t&&(this.isMutedByFocus||this.isVideoMutedByFocus)&&this._fireMuteChangeEvent(t),Promise.resolve()))).catch((e=>(Hh.error(`replaceTrack failed: ${null==e?void 0:e.stack}`),Promise.reject(e)))))},Jh.prototype._doReplaceTrack=function(e,t){const n=[];return this.jvbJingleSession?n.push(this.jvbJingleSession.replaceTrack(e,t)):Hh.info("_doReplaceTrack - no JVB JingleSession"),this.p2pJingleSession?n.push(this.p2pJingleSession.replaceTrack(e,t)):Hh.info("_doReplaceTrack - no P2P JingleSession"),Promise.all(n)},Jh.prototype._removeLocalSourceOnReject=function(e,t,n){if(!e)return;Hh.warn(`Source-add rejected on ${e}, reason="${null==t?void 0:t.reason}", message="${null==t?void 0:t.msg}"`);const i=this.getLocalTracks(n)[0];this.eventEmitter.emit(ot,i)},Jh.prototype._setupNewTrack=function(e){const t=e.getType();if(!e.getSourceName()){var n;const i=Cc(this.myUserId(),t,null===(n=this.getLocalTracks(t))||void 0===n?void 0:n.length);e.setSourceName(i)}this.rtc.addLocalTrack(e),e.setConference(this),e.muteHandler=this._fireMuteChangeEvent.bind(this,e),e.addEventListener(Rt,e.muteHandler),e.isAudioTrack()&&(e.audioLevelHandler=this._fireAudioLevelChangeEvent.bind(this),e.addEventListener(Ct,e.audioLevelHandler)),this.eventEmitter.emit(tt,e)},Jh.prototype._setNewVideoType=function(e){let t=!1;return e&&(t=this._signalingLayer.setTrackVideoType(e.getSourceName(),e.videoType)),t},Jh.prototype._setTrackMuteStatus=function(e,t,n){let i=!1;return t&&(i=this._signalingLayer.setTrackMuteStatus(t.getSourceName(),n),i&&Hh.debug(`Mute state of ${t} changed to muted=${n}`)),i},Jh.prototype._addLocalTrackToPc=function(e){const t=[];return e.conference===this?(this.jvbJingleSession?t.push(this.jvbJingleSession.addTrackToPc(e)):Hh.debug("Add local MediaStream - no JVB Jingle session started yet"),this.p2pJingleSession?t.push(this.p2pJingleSession.addTrackToPc(e)):Hh.debug("Add local MediaStream - no P2P Jingle session started yet")):t.push(this.addTrack(e)),Promise.allSettled(t)},Jh.prototype._removeLocalTrackFromPc=function(e){const t=[];return e.conference===this&&(this.jvbJingleSession?t.push(this.jvbJingleSession.removeTrackFromPc(e)):Hh.debug("Remove local MediaStream - no JVB JingleSession started yet"),this.p2pJingleSession?t.push(this.p2pJingleSession.removeTrackFromPc(e)):Hh.debug("Remove local MediaStream - no P2P JingleSession started yet")),Promise.allSettled(t)},Jh.prototype.getRole=function(){return this.room.role},Jh.prototype.isHidden=function(){return this.connection?St.Strophe.getDomainFromJid(this.connection.getJid())===this.options.config.hiddenDomain:null},Jh.prototype.isModerator=function(){return this.room?this.room.isModerator():null},Jh.prototype.lock=function(e){return this.isModerator()?new Promise(((t,n)=>{this.room.lockRoom(e||"",(()=>t()),(e=>n(e)),(()=>n(U)))})):Promise.reject(new Error("You are not moderator."))},Jh.prototype.unlock=function(){return this.lock()},Jh.prototype.getLastN=function(){return this.receiveVideoController.getLastN()},Jh.prototype.getForwardedSources=function(){return this.rtc.getForwardedSources()},Jh.prototype.setLastN=function(e){if(!Number.isInteger(e)&&!Number.parseInt(e,10))throw new Error(`Invalid value for lastN: ${e}`);const t=Number(e);if(t<-1)throw new RangeError("lastN cannot be smaller than -1");if(this.receiveVideoController.setLastN(t),this.p2pJingleSession){const e=0!==t;this.p2pJingleSession.setP2pVideoTransferActive(e).catch((t=>{Hh.error(`Failed to adjust video transfer status (${e})`,t)}))}},Jh.prototype.getParticipants=function(){return Array.from(this.participants.values())},Jh.prototype.getParticipantCount=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.getParticipants();return e||(t=t.filter((e=>!e.isHidden()))),t.length+1},Jh.prototype.getParticipantById=function(e){return this.participants.get(e)},Jh.prototype.grantOwner=function(e){const t=this.getParticipantById(e);t&&this.room.setAffiliation(t.getConnectionJid(),"owner")},Jh.prototype.revokeOwner=function(e){const t=this.getParticipantById(e),n=this.myUserId()===e,i=this.isMembersOnly()?"member":"none";n?this.room.setAffiliation(this.connection.getJid(),i):t&&this.room.setAffiliation(t.getConnectionJid(),i)},Jh.prototype.kickParticipant=function(e,t){const n=this.getParticipantById(e);n&&this.room.kick(n.getJid(),t)},Jh.prototype._maybeClearSITimeout=function(){this._sessionInitiateTimeout&&(this.jvbJingleSession||this.getParticipantCount()<2)&&(window.clearTimeout(this._sessionInitiateTimeout),this._sessionInitiateTimeout=null)},Jh.prototype._maybeSetSITimeout=function(){!this.jvbJingleSession&&this.getParticipantCount()>=2&&!this._sessionInitiateTimeout&&(this._sessionInitiateTimeout=window.setTimeout((()=>{this._sessionInitiateTimeout=null,Mi.sendAnalytics(dn(Ht,{p2p:!1,value:5e3}))}),5e3))},Jh.prototype.muteParticipant=function(e,t){const n=t||Ri.AUDIO;if(n!==Ri.AUDIO&&n!==Ri.VIDEO)return void Hh.error(`Unsupported media type: ${n}`);const i=this.getParticipantById(e);i&&this.room.muteParticipant(i.getJid(),!0,n)},Jh.prototype.onMemberJoined=function(e,t,n,i,r,o,s,a,d,c,l){var h,u,p,m;const g=St.Strophe.getResourceFromJid(e);if("focus"===g||this.myUserId()===g)return;const f=new Bi(e,this,t,i,r,o,s);f.setConnectionJid(d),f.setRole(n),f.setBotType(a),f.setFeatures(c),f.setIsReplacing(l);const v=this.isP2PActive()?null!==(h=null===(u=this.p2pJingleSession)||void 0===u?void 0:u.peerconnection.getRemoteTracks(g))&&void 0!==h?h:[]:null!==(p=null===(m=this.jvbJingleSession)||void 0===m?void 0:m.peerconnection.getRemoteTracks(g))&&void 0!==p?p:[];for(const e of v)f._tracks.push(e);this.participants.set(g,f),this.eventEmitter.emit(at,g,f),this._updateFeatures(f),this.isJoined()&&this._maybeStartOrStopP2P(),this._maybeSetSITimeout()},Jh.prototype._onMucJoined=function(){this._numberOfParticipantsOnJoin=this.getParticipantCount(),this._maybeStartOrStopP2P()},Jh.prototype._updateFeatures=function(e){e.getFeatures().then((t=>{e._supportsDTMF=t.has("urn:xmpp:jingle:dtmf:0"),this.updateDTMFSupport(),t.has(wa)&&e.setProperty("features_jigasi",!0),t.has(Ia)&&e.setProperty("features_e2ee",!0)})).catch((()=>!1))},Jh.prototype._onMemberBotTypeChanged=function(e,t){const n=this.getParticipants().find((t=>t.getJid()===e));if(n){n.setBotType(t);const i=St.Strophe.getResourceFromJid(e);this.eventEmitter.emit(ne,i,t)}n.getBotType()||this._maybeStartOrStopP2P()},Jh.prototype.onMemberLeft=function(e,t){const n=St.Strophe.getResourceFromJid(e);if("focus"===n||this.myUserId()===n)return;const i=this.getMediaSessions();let r=[];for(const e of i){const t=e.peerconnection.getRemoteTracks(n);t&&(r=[...r,...t]),e._signalingLayer.updateSsrcOwnersOnLeave(n),Ai.isSsrcRewritingSupported()||e.removeRemoteStreamsOnLeave(n)}r.forEach((e=>{Ai.isSsrcRewritingSupported()?(e.setSourceName(null),e.setOwner(null)):this.eventEmitter.emit(rt,e)}));const o=this.participants.get(n);o&&(this.participants.delete(n),this.eventEmitter.emit(dt,n,o,t)),null!==this.room&&(this._maybeStartOrStopP2P(!0),this._maybeClearSITimeout())},Jh.prototype.onMemberKicked=function(e,t,n,i,r){if(t===this.myUserId())return;const o=this.participants.get(t);if(e)return this.leave().finally((()=>this.xmpp.disconnect())),void this.eventEmitter.emit(we,o,i,r);const s=this.participants.get(n);s.setIsReplaced(r),this.eventEmitter.emit(He,o,s,i)},Jh.prototype.onLocalRoleChanged=function(e){this.eventEmitter.emit(ct,this.myUserId(),e)},Jh.prototype.onUserRoleChanged=function(e,t){const n=St.Strophe.getResourceFromJid(e),i=this.getParticipantById(n);i&&(i.setRole(t),this.eventEmitter.emit(ct,n,t))},Jh.prototype.onDisplayNameChanged=function(e,t){const n=St.Strophe.getResourceFromJid(e),i=this.getParticipantById(n);i&&i._displayName!==t&&(i._displayName=t,this.eventEmitter.emit(_e,n,t))},Jh.prototype.onRemoteTrackAdded=function(e){if(e.isP2P&&!this.isP2PActive())return void Hh.info("Trying to add remote P2P track, when not in P2P - IGNORED");if(!e.isP2P&&this.isP2PActive())return void Hh.info("Trying to add remote JVB track, when in P2P - IGNORED");const t=e.getParticipantId(),n=this.getParticipantById(t);n?n._tracks.push(e):Hh.info(`Source signaling received before presence for ${t}`);const i=this.eventEmitter;e.addEventListener(Rt,(()=>i.emit(it,e))),e.isAudioTrack()&&e.addEventListener(Ct,((e,n)=>{this.getActivePeerConnection()===n&&i.emit(nt,t,e)})),i.emit(tt,e)},Jh.prototype.onCallAccepted=function(e,t){this.p2pJingleSession===e&&(Hh.info("P2P setAnswer"),this.p2pJingleSession.setAnswer(t),this.eventEmitter.emit(q,this.p2pJingleSession))},Jh.prototype.onTransportInfo=function(e,t){this.p2pJingleSession===e&&(Hh.info("P2P addIceCandidates"),this.p2pJingleSession.addIceCandidates(t))},Jh.prototype.onRemoteTrackRemoved=function(e){this.getParticipants().forEach((t=>{const n=t.getTracks();for(let i=0;icontent").attr("name");"0"===i||"1"===i?!this.isP2PEnabled()&&!this.isP2PTestModeEnabled()||ci.isFirefox()&&!this._firefoxP2pEnabled?n={reason:"decline",reasonDescription:"P2P disabled",errorMsg:"P2P mode disabled in the configuration or browser unsupported"}:this.p2pJingleSession?n={reason:"busy",reasonDescription:"P2P already in progress",errorMsg:\'Duplicated P2P "session-initiate"\'}:this._shouldBeInP2PMode()||(n={reason:"decline",reasonDescription:"P2P requirements not met",errorMsg:\'Received P2P "session-initiate" when should not be in P2P mode\'},Mi.sendAnalytics(dn(qt))):n={reason:"decline",reasonDescription:"P2P disabled",errorMsg:"P2P across two endpoints in different SDP modes is disabled"},n?this._rejectIncomingCall(e,n):this._acceptP2PIncomingCall(e,t)},Jh.prototype.onIncomingCall=function(e,t,n){if(e.isP2P)this._onIncomingCallP2P(e,t);else{if(!this.isFocus(e.remoteJid)){const t="Rejecting session-initiate from non-focus.";return void this._rejectIncomingCall(e,{reason:"security-error",reasonDescription:t,errorMsg:t})}this._acceptJvbIncomingCall(e,t,n)}},Jh.prototype._acceptJvbIncomingCall=function(e,t,n){this.jvbJingleSession=e,this.room.connectionTimes["session.initiate"]=n,this._sendConferenceJoinAnalyticsEvent(),this.wasStopped&&Mi.sendAnalyticsAndLog(dn(jt,{p2p:!1}));const i=_t()(t).find(\'>bridge-session[xmlns="http://jitsi.org/protocol/focus"]\').attr("region");this.eventEmitter.emit(We,i),this._maybeClearSITimeout(),Mi.sendAnalytics(dn(Ut,{p2p:!1,value:n}));try{e.initialize(this.room,this.rtc,this._signalingLayer,{...this.options.config,codecSettings:{mediaType:Ri.VIDEO,codecList:this.codecSelection.getCodecPreferenceList("jvb")},enableInsertableStreams:this.isE2EEEnabled()||Ai.isRunInLiteModeEnabled()})}catch(e){return void Hh.error(e)}this._setBridgeChannel(t,e.peerconnection);const r=this._getInitialLocalTracks();try{e.acceptOffer(t,(()=>{this.isP2PActive()&&this.jvbJingleSession&&this._suspendMediaTransferForJvbConnection(),this.eventEmitter.emit(q,e),this.isP2PActive()||this.eventEmitter.emit(G,e)}),(e=>{Hh.error("Failed to accept incoming Jingle session",e)}),r),this._desktopSharingFrameRate&&e.peerconnection.setDesktopSharingFrameRate(this._desktopSharingFrameRate),this.statistics.startRemoteStats(this.jvbJingleSession.peerconnection)}catch(e){Hh.error(e)}},Jh.prototype._setBridgeChannel=function(e,t){var n,i,r,o,s,a,d;const c=null===(n=this.connection)||void 0===n||null===(i=n.options)||void 0===i||null===(r=i.bridgeChannel)||void 0===r?void 0:r.ignoreDomain,l=null!==(o=null===(s=this.connection)||void 0===s||null===(a=s.options)||void 0===a||null===(d=a.bridgeChannel)||void 0===d?void 0:d.preferSctp)&&void 0!==o&&o,h=1===_t()(e).find(\'>content[name="data"]\').first().length;let u=null;if(Hh.info(`SCTP: offered=${h}, prefered=${l}`),!(h&&l||(_t()(e).find(">content>transport>web-socket").toArray().map((e=>e.getAttribute("url"))).forEach((e=>{u||c&&c===new URL(e).hostname?u||Hh.info(`Ignoring colibri-ws url with domain ${c}`):(u=e,Hh.info(`Using colibri-ws url ${e}`))})),u))){const t=_t()(e).find(">content>transport>web-socket").first();1===t.length&&(u=t[0].getAttribute("url"),Hh.info(`Falling back to ${u}`))}!u||h&&l?h?this.rtc.initializeBridgeChannel(t,null):Hh.warn("Neither SCTP nor a websocket is available. Will not initialize bridge channel."):this.rtc.initializeBridgeChannel(null,u)},Jh.prototype._rejectIncomingCall=function(e,t){null!=t&&t.errorMsg&&Hh.warn(t.errorMsg),e.terminate(null,(e=>{Hh.warn("An error occurred while trying to terminate invalid Jingle session",e)}),{reason:t&&t.reason,reasonDescription:t&&t.reasonDescription,sendSessionTerminate:!0})},Jh.prototype.onCallEnded=function(e,t,n){if(Hh.info(`Call ended: ${t} - ${n} P2P ?${e.isP2P}`),e===this.jvbJingleSession)this.wasStopped=!0,Mi.sendAnalytics(dn($t,{p2p:!1})),this.statistics&&this.statistics.stopRemoteStats(this.jvbJingleSession.peerconnection),this.jvbJingleSession=null,this.rtc.onCallEnded();else if(e===this.p2pJingleSession){const e={};"connectivity-error"===t&&"ICE FAILED"===n?Mi.analytics.addPermanentProperties({p2pFailed:!0}):"success"===t&&"restart"===n&&(e.requestRestart=!0),this._stopP2PSession(e)}else Hh.error("Received onCallEnded for invalid session",e.sid,e.remoteJid,t,n)},Jh.prototype.onSuspendDetected=function(e){e.isP2P||(this.leave(),this.eventEmitter.emit(Ze))},Jh.prototype.updateDTMFSupport=function(){let e=!1;const t=this.getParticipants();for(let n=0;nt.tagName===`jitsi_participant_${e}`));return t?t.value:void 0},Jh.prototype.sendFeedback=function(e,t){return this.statistics.sendFeedback(e,t)},Jh.prototype.isCallstatsEnabled=function(){return Hh.warn("Callstats is no longer supported"),!1},Jh.prototype.getSsrcByTrack=function(e){var t;return e.isLocal()?null===(t=this.getActivePeerConnection())||void 0===t?void 0:t.getLocalSSRC(e):e.getSSRC()},Jh.prototype.sendApplicationLog=function(){},Jh.prototype.isFocus=function(e){return this.room?this.room.isFocus(e):null},Jh.prototype._fireIncompatibleVersionsEvent=function(){this.eventEmitter.emit(ae,j)},Jh.prototype.sendEndpointMessage=function(e,t){this.rtc.sendChannelMessage(e,t)},Jh.prototype.sendEndpointStatsMessage=function(e){this.rtc.sendEndpointStatsMessage(e)},Jh.prototype.broadcastEndpointMessage=function(e){this.sendEndpointMessage("",e)},Jh.prototype.sendMessage=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=typeof e;if("object"===i||!n&&"string"===i)if(n)this.sendEndpointMessage(t,e);else{let n=e,r="body";if("object"===i){r="json-message",n.hasOwnProperty(Aa)||(n[Aa]="");try{n=JSON.stringify(n)}catch(e){return void Hh.error("Can not send a message, stringify failed: ",e)}}t?this.sendPrivateTextMessage(t,n,r):this.sendTextMessage(n,r)}else Hh.error(`Can not send a message of type ${i}`)},Jh.prototype.isConnectionInterrupted=function(){return this.isP2PActive()?this.isP2PConnectionInterrupted:this.isJvbConnectionInterrupted},Jh.prototype._onConferenceRestarted=function(e){!e.isP2P&&this.options.config.enableForcedReload&&this.eventEmitter.emit(ae,I)},Jh.prototype._onIceConnectionInterrupted=function(e){e.isP2P?this.isP2PConnectionInterrupted=!0:this.isJvbConnectionInterrupted=!0,e.isP2P===this.isP2PActive()&&this.eventEmitter.emit(me)},Jh.prototype._onIceConnectionFailed=function(e){e.isP2P?(Mi.analytics.addPermanentProperties({p2pFailed:!0}),this.p2pJingleSession&&Mi.sendAnalyticsAndLog(cn(zt,{initiator:this.p2pJingleSession.isInitiator})),this._stopP2PSession({reason:"connectivity-error",reasonDescription:"ICE FAILED"})):e&&this.jvbJingleSession===e&&(this._delayedIceFailed=new Tl(this),this._delayedIceFailed.start(e))},Jh.prototype._onIceConnectionRestored=function(e){e.isP2P?this.isP2PConnectionInterrupted=!1:(this.isJvbConnectionInterrupted=!1,this._delayedIceFailed&&this._delayedIceFailed.cancel()),e.isP2P===this.isP2PActive()&&this.eventEmitter.emit(ge)},Jh.prototype._acceptP2PIncomingCall=function(e,t){this.isP2PConnectionInterrupted=!1,this.p2pJingleSession=e,this._sendConferenceJoinAnalyticsEvent(),this.p2pJingleSession.initialize(this.room,this.rtc,this._signalingLayer,{...this.options.config,codecSettings:{mediaType:Ri.VIDEO,codecList:this.codecSelection.getCodecPreferenceList("p2p")},enableInsertableStreams:this.isE2EEEnabled()||Ai.isRunInLiteModeEnabled()});const n=this.getLocalTracks();this.p2pJingleSession.acceptOffer(t,(()=>{Hh.debug(\'Got RESULT for P2P "session-accept"\'),this.eventEmitter.emit(q,e)}),(e=>{Hh.error("Failed to accept incoming P2P Jingle session",e)}),n)},Jh.prototype._addRemoteJVBTracks=function(){this._addRemoteTracks("JVB",this.jvbJingleSession.peerconnection.getRemoteTracks())},Jh.prototype._addRemoteP2PTracks=function(){this._addRemoteTracks("P2P",this.p2pJingleSession.peerconnection.getRemoteTracks())},Jh.prototype._addRemoteTracks=function(e,t){for(const n of t)(Ai.isSsrcRewritingSupported()||this.participants.has(n.ownerEndpointId))&&(Hh.info(`Adding remote ${e} track: ${n}`),this.onRemoteTrackAdded(n))},Jh.prototype._onIceConnectionEstablished=function(e){null!==this.p2pJingleSession&&(this.p2pEstablishmentDuration=this.p2pJingleSession.establishmentDuration),null!==this.jvbJingleSession&&(this.jvbEstablishmentDuration=this.jvbJingleSession.establishmentDuration);let t=!1;if(e.isP2P?this.p2pJingleSession!==e&&(Hh.error("CONNECTION_ESTABLISHED - wrong P2P session instance ?!"),t=!0):t=!0,!isNaN(this.p2pEstablishmentDuration)&&!isNaN(this.jvbEstablishmentDuration)){const e=this.p2pEstablishmentDuration-this.jvbEstablishmentDuration;Mi.sendAnalytics(Zt,{value:e})}e.isP2P===this.isP2PActive()&&this.eventEmitter.emit(pe),t||(this._setP2PStatus(!0),this.jvbJingleSession?this._removeRemoteJVBTracks():Hh.info("Not removing remote JVB tracks - no session yet"),this._addRemoteP2PTracks(),this.jvbJingleSession&&this._suspendMediaTransferForJvbConnection(),Hh.info("Starting remote stats with p2p connection"),this.statistics.startRemoteStats(this.p2pJingleSession.peerconnection),Mi.sendAnalyticsAndLog(cn(Gt,{initiator:this.p2pJingleSession.isInitiator})))},Jh.prototype._updateProperties=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=!Et()(e,this.properties);if(this.properties=e,t){var n,i;this.eventEmitter.emit(ze,this.properties);const t="true"===this.properties["audio-limit-reached"],r="true"===this.properties["video-limit-reached"];this._audioSenderLimitReached!==t&&(this._audioSenderLimitReached=t,this.eventEmitter.emit(K,t),Hh.info(`Audio unmute permissions set by Jicofo to ${t}`)),this._videoSenderLimitReached!==r&&(this._videoSenderLimitReached=r,this.eventEmitter.emit(pt,r),Hh.info(`Video unmute permissions set by Jicofo to ${r}`)),["bridge-count"].forEach((t=>{void 0!==e[t]&&Mi.analytics.addPermanentProperties({[t.replace("-","_")]:e[t]})}));let o=null===(n=this.properties["visitor-codecs"])||void 0===n?void 0:n.split(",");null!==(i=o)&&void 0!==i&&i.length&&(o=o.filter((e=>"string"==typeof e&&e.trim().length&&Object.values(Ds).find((t=>t===e))))),this._visitorCodecs!==o&&(this._visitorCodecs=o,this.eventEmitter.emit(ue,this._visitorCodecs));const s=this._hasVisitors;this._hasVisitors=this.properties["visitor-count"]>0,s!==this._hasVisitors&&this._maybeStartOrStopP2P(!0)}},Jh.prototype.getProperty=function(e){return this.properties[e]},Jh.prototype._maybeClearDeferredStartP2P=function(){this.deferredStartP2PTask&&(Hh.info("Cleared deferred start P2P task"),clearTimeout(this.deferredStartP2PTask),this.deferredStartP2PTask=null)},Jh.prototype._removeRemoteJVBTracks=function(){this._removeRemoteTracks("JVB",this.jvbJingleSession.peerconnection.getRemoteTracks())},Jh.prototype._removeRemoteP2PTracks=function(){this._removeRemoteTracks("P2P",this.p2pJingleSession.peerconnection.getRemoteTracks())},Jh.prototype._removeRemoteTracks=function(e,t){for(const n of t)Hh.info(`Removing remote ${e} track: ${n}`),this.onRemoteTrackRemoved(n)},Jh.prototype._resumeMediaTransferForJvbConnection=function(){Hh.info("Resuming media transfer over the JVB connection..."),this.jvbJingleSession.setMediaTransferActive(!0).then((()=>{Hh.info("Resumed media transfer over the JVB connection!")})).catch((e=>{Hh.error("Failed to resume media transfer over the JVB connection:",e)}))},Jh.prototype._setP2PStatus=function(e){if(this.p2p!==e){if(this.p2p=e,e){Hh.info("Peer to peer connection established!"),Mi.analytics.addPermanentProperties({p2pFailed:!1});const e=0!==this.getLastN();this.p2pJingleSession.setP2pVideoTransferActive(e).catch((t=>{Hh.error(`Failed to sync up P2P video transfer status (${e}), ${t}`)}))}else Hh.info("Peer to peer connection closed!");this.dtmfManager=null,this.eventEmitter.emit(Ue,this,this.p2p),this.eventEmitter.emit(G,this.getActiveMediaSession()),this.eventEmitter.emit(this.isConnectionInterrupted()?me:ge)}else Hh.debug(`Called _setP2PStatus with the same status: ${e}`)},Jh.prototype._startP2PSession=function(e){if(this._maybeClearDeferredStartP2P(),this.p2pJingleSession)return void Hh.error("P2P session already started!");if(!this.room)return void Hh.warn("Cannot start P2P session - conference has been left");this.isP2PConnectionInterrupted=!1,this.p2pJingleSession=this.xmpp.connection.jingle.newP2PJingleSession(this.room.myroomjid,e),Hh.info("Created new P2P JingleSession",this.room.myroomjid,e),this._sendConferenceJoinAnalyticsEvent(),this.p2pJingleSession.initialize(this.room,this.rtc,this._signalingLayer,{...this.options.config,codecSettings:{mediaType:Ri.VIDEO,codecList:this.codecSelection.getCodecPreferenceList("p2p")},enableInsertableStreams:this.isE2EEEnabled()||Ai.isRunInLiteModeEnabled()});const t=this.getLocalTracks();this.p2pJingleSession.invite(t)},Jh.prototype._suspendMediaTransferForJvbConnection=function(){Hh.info("Suspending media transfer over the JVB connection..."),this.jvbJingleSession.setMediaTransferActive(!1).then((()=>{Hh.info("Suspended media transfer over the JVB connection !")})).catch((e=>{Hh.error("Failed to suspend media transfer over the JVB connection:",e)}))},Jh.prototype._maybeStartOrStopP2P=function(e){if(!this.isP2PEnabled()||this.isP2PTestModeEnabled()||ci.isFirefox()&&!this._firefoxP2pEnabled||this.isE2EEEnabled())return void Hh.info("Auto P2P disabled");const t=this.getParticipants(),n=t.length,i=this._shouldBeInP2PMode();if(!i&&this.deferredStartP2PTask&&this._maybeClearDeferredStartP2P(),!this.p2pJingleSession&&i){const i=n&&t[0],r=this.myUserId(),o=i.getId();if(r>o)return void Hh.debug("I\'m the bigger peersId - the other peer should start P2P",r,o);if(r===o)return void Hh.error("The same IDs ? ",r,o);const s=i.getJid();if(e){if(this.deferredStartP2PTask)return void Hh.error("Deferred start P2P task\'s been set already!");Hh.info(`Will start P2P with: ${s} after ${this.backToP2PDelay} seconds...`),this.deferredStartP2PTask=setTimeout(this._startP2PSession.bind(this,s),1e3*this.backToP2PDelay)}else Hh.info(`Will start P2P with: ${s}`),this._startP2PSession(s)}else this.p2pJingleSession&&!i&&(Hh.info(`Will stop P2P with: ${this.p2pJingleSession.remoteJid}`),this.p2pJingleSession.isInitiator&&n>1&&Mi.sendAnalyticsAndLog(cn(Kt)),this._stopP2PSession())},Jh.prototype._shouldBeInP2PMode=function(){const e=this.getParticipants(),t=e.length,n=void 0!==e.find((e=>"poltergeist"===e.getBotType()||e.hasFeature(wa))),i=1===t&&!n&&!this._hasVisitors;return Hh.debug(`P2P? peerCount: ${t}, hasBotPeer: ${n} => ${i}`),i},Jh.prototype._stopJvbSession=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{requestRestart:t=!1,sendSessionTerminate:n=!1}=e;this.jvbJingleSession?(!this.isP2PActive()&&this._removeRemoteJVBTracks(),Hh.info("Stopping stats for jvb connection"),this.statistics.stopRemoteStats(this.jvbJingleSession.peerconnection),this.jvbJingleSession.terminate((()=>{t&&n&&Hh.info("session-terminate for ice restart - done"),this.jvbJingleSession=null}),(e=>{t&&n&&(Hh.error("session-terminate for ice restart failed: reloading the client"),this.eventEmitter.emit(ae,F)),Hh.error(`An error occurred while trying to terminate the JVB session\', reason=${e.reason},msg=${e.msg}`)}),e)):Hh.error("No JVB session to be stopped")},Jh.prototype._stopP2PSession=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{reason:t="success",reasonDescription:n="Turning off P2P session",requestRestart:i=!1}=e;if(!this.p2pJingleSession)return void Hh.error("No P2P session to be stopped!");const r=this.isP2PActive();r&&(this.jvbJingleSession&&!i&&this._resumeMediaTransferForJvbConnection(),this._removeRemoteP2PTracks()),Hh.info("Stopping remote stats for P2P connection"),this.statistics.stopRemoteStats(this.p2pJingleSession.peerconnection),this.p2pJingleSession.terminate((()=>{Hh.info("P2P session terminate RESULT"),this.p2pJingleSession=null}),(e=>{"success"!==t&&Hh.error("An error occurred while trying to terminate P2P Jingle session",e)}),{reason:t,reasonDescription:n,sendSessionTerminate:this.room&&this.getParticipantById(St.Strophe.getResourceFromJid(this.p2pJingleSession.remoteJid))}),this.p2pJingleSession=null,this._setP2PStatus(!1),r&&(this.jvbJingleSession&&!i?this._addRemoteJVBTracks():Hh.info("Not adding remote JVB tracks - no session yet"))},Jh.prototype._updateRoomPresence=function(e,t){if(!e)return;if(t){if(t.skip)return;t.skip=!0}let n,i,r=!1;const o=e.peerconnection.getLocalTracks();for(const e of o){const t=e.isMuted();n=this._setTrackMuteStatus(e.getType(),e,t),n&&Hh.debug(`Updating mute state of ${e} in presence to muted=${t}`),e.getType()===Ri.VIDEO&&(i=this._setNewVideoType(e),i&&Hh.debug(`Updating videoType in presence to ${e.getVideoType()}`)),r=r||n||i}r&&this.room.sendPresence()},Jh.prototype.isP2PActive=function(){return this.p2p},Jh.prototype.getP2PConnectionState=function(){return this.isP2PActive()?this.p2pJingleSession.peerconnection.getConnectionState():null},Jh.prototype.setDesktopSharingFrameRate=function(e){return"number"!=typeof e||isNaN(e)?(Hh.error(`Invalid value ${e} specified for desktop capture frame rate`),!1):(this._desktopSharingFrameRate=e,this.jvbJingleSession&&this.jvbJingleSession.peerconnection.setDesktopSharingFrameRate(e),this.rtc.setDesktopSharingFrameRate(e),!0)},Jh.prototype.startP2PSession=function(){const e=this.getParticipants();if(1!==e.length)throw new Error("There must be exactly 1 participant to start the P2P session !");{const t=e[0].getJid();this._startP2PSession(t)}},Jh.prototype.stopP2PSession=function(e){this._stopP2PSession(e)},Jh.prototype.getSpeakerStats=function(){return this.speakerStatsCollector.getStats()},Jh.prototype.sendFaceLandmarks=function(e){e.faceExpression&&this.xmpp.sendFaceLandmarksEvent(this.room.roomjid,e)},Jh.prototype.setReceiverConstraints=function(e){this.receiveVideoController.setReceiverConstraints(e)},Jh.prototype.setAssumedBandwidthBps=function(e){this.receiveVideoController.setAssumedBandwidthBps(e)},Jh.prototype.setReceiverVideoConstraint=function(e){this.receiveVideoController.setPreferredReceiveMaxFrameHeight(e)},Jh.prototype.setSenderVideoConstraint=function(e){return this.sendVideoController.setPreferredSendMaxFrameHeight(e)},Jh.prototype.createVideoSIPGWSession=function(e,t){return this.room?this.videoSIPGWHandler.createVideoSIPGWSession(e,t):new Error(Ph)},Jh.prototype._sendConferenceJoinAnalyticsEvent=function(){var e,t,n;const i=this.getMeetingUniqueId();if(this._conferenceJoinAnalyticsEventSent||!i||null===this.getActivePeerConnection())return;const r=this.getConnectionTimes(),o=this.connection.getConnectionTimes(),s=window.connectionTimes["firstObtainPermissions.start"],a=window.connectionTimes["firstObtainPermissions.end"],d=null!==(e=null===(t=window.JitsiMeetJS)||void 0===t||null===(n=t.app)||void 0===n?void 0:n.connectionTimes)&&void 0!==e?e:{},c={...r,...o,...d,gumDuration:Ti(a,s),xmppConnectingTime:Ti(o.connected,o.connecting),connectedToMUCJoinedTime:Ti(r["muc.joined"],o.connected),connectingToMUCJoinedTime:Ti(r["muc.joined"],o.connecting),numberOfParticipantsOnJoin:this._numberOfParticipantsOnJoin};Mi.sendAnalytics(on("joined",{...c,meetingId:i,participantId:`${i}.${this._statsCurrentId}`})),this._conferenceJoinAnalyticsEventSent=Date.now()},Jh.prototype._sendConferenceLeftAnalyticsEvent=function(){const e=this.getMeetingUniqueId();e&&this._conferenceJoinAnalyticsEventSent&&Mi.sendAnalytics(on("left",{meetingId:e,participantId:`${e}.${this._statsCurrentId}`,stats:{duration:Math.floor((Date.now()-this._conferenceJoinAnalyticsEventSent)/1e3),perf:this.getPerformanceStats()}}))},Jh.prototype._restartMediaSessions=function(){this.p2pJingleSession&&this._stopP2PSession({reasonDescription:"restart",requestRestart:!0}),this.jvbJingleSession&&this._stopJvbSession({reason:"success",reasonDescription:"restart required",requestRestart:!0,sendSessionTerminate:!0}),this._maybeStartOrStopP2P(!1)},Jh.prototype.isE2EEEnabled=function(){return Boolean(this._e2eEncryption&&this._e2eEncryption.isEnabled())},Jh.prototype.isE2EESupported=function(){return so.isSupported(this.options.config)},Jh.prototype.toggleE2EE=function(e){this.isE2EESupported()?this._e2eEncryption.setEnabled(e):Hh.warn("Cannot enable / disable E2EE: platform is not supported.")},Jh.prototype.setMediaEncryptionKey=function(e){this._e2eEncryption.setEncryptionKey(e)},Jh.prototype.startVerification=function(e){const t=this.getParticipantById(e);t&&this._e2eEncryption.startVerification(t)},Jh.prototype.markParticipantVerified=function(e,t){const n=this.getParticipantById(e);n&&this._e2eEncryption.markParticipantVerified(n,t)},Jh.prototype.isLobbySupported=function(){return Boolean(this.room&&this.room.getLobby().isSupported())},Jh.prototype.isMembersOnly=function(){return Boolean(this.room&&this.room.membersOnlyEnabled)},Jh.prototype.isVisitorsSupported=function(){return Boolean(this.room&&this.room.visitorsSupported)},Jh.prototype.enableLobby=function(){return this.room&&this.isModerator()?this.room.getLobby().enable():Promise.reject(new Error("The conference not started or user is not moderator"))},Jh.prototype.disableLobby=function(){this.room&&this.isModerator()?this.room.getLobby().disable():Hh.warn(`Failed to disable lobby, ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator"}`)},Jh.prototype.joinLobby=function(e,t){return this.room?this.room.getLobby().join(e,t):Promise.reject(new Error("The conference not started"))},Jh.prototype.myLobbyUserId=function(){if(this.room)return this.room.getLobby().getLocalId()},Jh.prototype.sendLobbyMessage=function(e,t){if(this.room)return t?this.room.getLobby().sendPrivateMessage(t,e):this.room.getLobby().sendMessage(e)},Jh.prototype.addLobbyMessageListener=function(e){if(this.room)return this.room.getLobby().addMessageListener(e)},Jh.prototype.removeLobbyMessageHandler=function(e){if(this.room)return this.room.getLobby().removeMessageHandler(e)},Jh.prototype.lobbyDenyAccess=function(e){this.room&&this.room.getLobby().denyAccess(e)},Jh.prototype.lobbyApproveAccess=function(e){this.room&&this.room.getLobby().approveAccess(e)},Jh.prototype.isAVModerationSupported=function(){return Boolean(this.room&&this.room.getAVModeration().isSupported())},Jh.prototype.enableAVModeration=function(e){this.room&&this.isModerator()&&(e===Ri.AUDIO||e===Ri.VIDEO)?this.room.getAVModeration().enable(!0,e):Hh.warn(`Failed to enable AV moderation, ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator, "}${this.room&&this.isModerator()?"wrong media type passed":""}`)},Jh.prototype.disableAVModeration=function(e){this.room&&this.isModerator()&&(e===Ri.AUDIO||e===Ri.VIDEO)?this.room.getAVModeration().enable(!1,e):Hh.warn(`Failed to disable AV moderation, ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator, "}${this.room&&this.isModerator()?"wrong media type passed":""}`)},Jh.prototype.avModerationApprove=function(e,t){if(this.room&&this.isModerator()&&(e===Ri.AUDIO||e===Ri.VIDEO)){const n=this.getParticipantById(t);if(!n)return;this.room.getAVModeration().approve(e,n.getJid())}else Hh.warn(`AV moderation approve skipped , ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator, "}${this.room&&this.isModerator()?"wrong media type passed":""}`)},Jh.prototype.avModerationReject=function(e,t){if(this.room&&this.isModerator()&&(e===Ri.AUDIO||e===Ri.VIDEO)){const n=this.getParticipantById(t);if(!n)return;this.room.getAVModeration().reject(e,n.getJid())}else Hh.warn(`AV moderation reject skipped , ${this.room?"":"not in a room, "}${this.isModerator()?"":"participant is not a moderator, "}${this.room&&this.isModerator()?"wrong media type passed":""}`)},Jh.prototype.getBreakoutRooms=function(){var e;return null===(e=this.room)||void 0===e?void 0:e.getBreakoutRooms()},Jh.prototype.getMetadataHandler=function(){var e;return null===(e=this.room)||void 0===e?void 0:e.getMetadataHandler()},Bh.prototype.connect=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.xmpp.moderator.targetUrl&&!this.options.disableFocus&&e.name?this.xmpp.moderator.sendConferenceRequest(this.xmpp.getRoomJid(e.name)).then((()=>{this.xmpp.connect(e.id,e.password)})):this.xmpp.connect(e.id,e.password)},Bh.prototype.attach=function(e){this.xmpp.attach(e)},Bh.prototype.disconnect=function(){return this.xmpp.disconnect(...arguments)},Bh.prototype.getJid=function(){return this.xmpp.getJid()},Bh.prototype.setToken=function(e){this.token=e},Bh.prototype.initJitsiConference=function(e,t){return new Jh({name:e,config:t,connection:this})},Bh.prototype.addEventListener=function(e,t){this.xmpp.addListener(e,t)},Bh.prototype.removeEventListener=function(e,t){this.xmpp.removeListener(e,t)},Bh.prototype.getConnectionTimes=function(){return this.xmpp.connectionTimes},Bh.prototype.addFeature=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.xmpp.caps.addFeature(e,t,!0)},Bh.prototype.removeFeature=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.xmpp.caps.removeFeature(e,t,!0)},Bh.prototype.getLogs=function(){const e=this.xmpp.getJingleLog(),t={};t.time=new Date,t.url=window.location.href,t.ua=navigator.userAgent;const n=this.xmpp.getXmppLog();return n&&(t.xmpp=n),e.metadata=t,e},function(e){e.DEVICE_LIST_CHANGED="mediaDevices.devicechange",e.PERMISSIONS_CHANGED="rtc.permissions_changed",e.PERMISSION_PROMPT_IS_SHOWN="mediaDevices.permissionPromptIsShown",e.SLOW_GET_USER_MEDIA="mediaDevices.slowGetUserMedia"}(qh||(qh={}));const Gh=qh.DEVICE_LIST_CHANGED,zh=qh.PERMISSIONS_CHANGED,Kh=qh.PERMISSION_PROMPT_IS_SHOWN,Wh=qh.SLOW_GET_USER_MEDIA,Xh="microphone",Yh="camera",Qh=new class extends xr{constructor(){super(),this._permissions={},pl.addListener(ji.default.DEVICE_LIST_CHANGED,(e=>this.eventEmitter.emit(Gh,e))),pl.addListener(ji.default.PERMISSIONS_CHANGED,(e=>this._handlePermissionsChange(e))),this._permissionsApiSupported=new Promise((e=>{if(!navigator.permissions)return void e(!1);const t=this,n=[];n.push(navigator.permissions.query({name:Yh}).then((e=>(this._handlePermissionsChange({[Ri.VIDEO]:this._parsePermissionState(e)}),e.onchange=function(){try{t._handlePermissionsChange({[Ri.VIDEO]:t._parsePermissionState(this)})}catch(e){}},!0))).catch((()=>!1))),n.push(navigator.permissions.query({name:Xh}).then((e=>(this._handlePermissionsChange({[Ri.AUDIO]:this._parsePermissionState(e)}),e.onchange=function(){try{t._handlePermissionsChange({[Ri.AUDIO]:t._parsePermissionState(this)})}catch(e){}},!0))).catch((()=>!1))),Promise.all(n).then((t=>e(t.every((e=>e)))))}))}_parsePermissionState(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=e.state||e.status;if("string"!=typeof t)throw new TypeError;return"granted"===t}_handlePermissionsChange(e){[Ri.AUDIO,Ri.VIDEO].some((t=>t in e&&e[t]!==this._permissions[t]))&&(this._permissions={...this._permissions,...e},this.eventEmitter.emit(zh,this._permissions),(this._permissions[Ri.AUDIO]||this._permissions[Ri.VIDEO])&&this.enumerateDevices((()=>{})))}enumerateDevices(e){pl.enumerateDevices(e)}isDeviceListAvailable(){return pl.isDeviceListAvailable()}isDeviceChangeAvailable(e){return pl.isDeviceChangeAvailable(e)}isDevicePermissionGranted(e){return new Promise((t=>{e in this._permissions?t(this._permissions[e]):this._permissionsApiSupported.then((n=>{if(!n)return void t(!1);const i=[];switch(e){case Ri.VIDEO:i.push(navigator.permissions.query({name:Yh}));break;case Ri.AUDIO:i.push(navigator.permissions.query({name:Xh}));break;default:i.push(navigator.permissions.query({name:Yh})),i.push(navigator.permissions.query({name:Xh}))}Promise.all(i).then((e=>t(e.every((e=>{try{return this._parsePermissionState(e)}catch{return!1}})))),(()=>t(!1)))}))}))}isMultipleAudioInputSupported(){return!(ci.isFirefox()&&ci.isVersionLessThan("101")||ci.isIosBrowser())}getAudioOutputDevice(){return pl.getAudioOutputDevice()}setAudioOutputDevice(e){return pl.setAudioOutputDevice(e)}},Zh=(0,E.getLogger)("modules/detection/ActiveDeviceDetector.js");function eu(e){for(const t of e)t.stopStream()}const tu=(0,E.getLogger)("modules/proxyconnection/CustomSignalingLayer.js");class nu extends Ac{constructor(){super(),this.ssrcOwners=new Map,this.chatRoom=null}getPeerMediaInfo(e,t,n){return{}}getPeerSourceInfo(e,t){}getSSRCOwner(e){return this.ssrcOwners.get(e)}getTrackSourceName(e){}removeSSRCOwners(e){if(null!=e&&e.length)for(const t of e)this.ssrcOwners.delete(t)}setChatRoom(e){this.chatRoom=e}setSSRCOwner(e,t){if("number"!=typeof e)throw new TypeError(`SSRC(${e}) must be a number`);const n=this.ssrcOwners.get(e);n&&n!==t&&tu.error(`SSRC owner re-assigned from ${n} to ${t}`),this.ssrcOwners.set(e,t)}setTrackMuteStatus(e,t){return!1}setTrackVideoType(e,t){return!1}updateSsrcOwnersOnLeave(e){const t=Array.from(this.ssrcOwners).filter((t=>t[1]===e)).map((e=>e[0]));null!=t&&t.length&&this.removeSSRCOwners(t)}}let iu;!function(e){e.ACCEPT="session-accept",e.CONNECTION_ERROR="connection-error-encountered",e.INITIATE="session-initiate",e.TERMINATE="session-terminate",e.TRANSPORT_INFO="transport-info",e.UNAVAILABLE="unavailable"}(iu||(iu={}));const ru=(0,E.getLogger)("modules/proxyconnection/ProxyConnectionPC.js");class ou{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._options={pcConfig:{},isInitiator:!1,receiveAudio:!1,receiveVideo:!1,...e},this._tracks=[],this._peerConnection=null,this._onError=this._onError.bind(this),this._onRemoteStream=this._onRemoteStream.bind(this),this._onSendMessage=this._onSendMessage.bind(this)}getPeerJid(){return this._options.peerJid}processMessage(e){switch(e.attr("action")){case iu.ACCEPT:this._onSessionAccept(e);break;case iu.INITIATE:this._onSessionInitiate(e);break;case iu.TERMINATE:this._onSessionTerminate(e);break;case iu.TRANSPORT_INFO:this._onTransportInfo(e)}}start(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this._peerConnection||(this._tracks=this._tracks.concat(e),this._peerConnection=this._createPeerConnection(),this._peerConnection.invite(e))}stop(){this._peerConnection&&this._peerConnection.terminate(),this._onSessionTerminate()}_createPeerConnection(){const e={connected:!0,jingle:{terminate:()=>{}},sendIQ:this._onSendMessage,addEventListener:()=>()=>{},addCancellableListener:()=>()=>{}},t={iceServers:Ra,...this._options.pcConfig},n={addEventListener:()=>{},addPresenceListener:()=>{},connectionTimes:[],eventEmitter:{emit:e=>{switch(e){case Hi.XMPPEvents.CONNECTION_ICE_FAILED:case Hi.XMPPEvents.CONNECTION_FAILED:this._onError(iu.CONNECTION_ERROR,e)}}},removeEventListener:()=>{},removePresenceListener:()=>{},supportsRestartByTerminate:()=>!1};this._rtc=new pl({myUserId:()=>""},{}),this._rtc.addListener(ji.default.REMOTE_TRACK_ADDED,this._onRemoteStream);const i=new ua(void 0,void 0,this._options.peerJid,e,{offerToReceiveAudio:this._options.receiveAudio,offerToReceiveVideo:this._options.receiveVideo},t,!0,this._options.isInitiator),r=new nu;return r.setChatRoom(n),i.initialize(n,this._rtc,r,{}),i}_onError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";this._options.onError(this._options.peerJid,e,t)}_onRemoteStream(e){this._tracks.push(e),this._options.onRemoteStream(e)}_onSendMessage(e,t){this._options.onSendMessage(this._options.peerJid,e),t&&setTimeout(t,250)}_onSessionAccept(e){this._peerConnection?this._peerConnection.setAnswer(e):ru.error("Received an answer when no peer connection exists.")}_onSessionInitiate(e){this._peerConnection?ru.error("Received an offer when an offer was already sent."):(this._peerConnection=this._createPeerConnection(),this._peerConnection.acceptOffer(e,(()=>{}),(()=>this._onError(this._options.peerJid,iu.CONNECTION_ERROR,"session initiate error")),[]))}_onSessionTerminate(){this._tracks.forEach((e=>e.dispose())),this._tracks=[],this._peerConnection&&this._peerConnection.onTerminated(),this._rtc&&(this._rtc.removeListener(ji.default.REMOTE_TRACK_ADDED,this._onRemoteStream),this._rtc.destroy())}_onTransportInfo(e){this._peerConnection.addIceCandidates(e)}}const su=(0,E.getLogger)("modules/proxyconnection/ProxyConnectionService.js");var au=n(549),du=n.n(au);const cu=(0,E.getLogger)("modules/webaudio/AudioMixer.js");class lu{constructor(){this._started=!1,this._streamsToMix=[],this._streamMSSArray=[]}addMediaStream(e){e.getAudioTracks()||cu.warn("Added MediaStream doesn\'t contain audio tracks."),this._streamsToMix.push(e)}start(){if(this._started)return this._mixedMSD.stream;if(this._audioContext=Nl(),!this._streamsToMix.length)return cu.warn("No MediaStream\'s added to AudioMixer, nothing will happen."),null;this._started=!0,this._mixedMSD=this._audioContext.createMediaStreamDestination();for(const e of this._streamsToMix){const t=this._audioContext.createMediaStreamSource(e);t.connect(this._mixedMSD),this._streamMSSArray.push(t)}return this._mixedMSD.stream}reset(){this._started=!1,this._streamsToMix=[];for(const e of this._streamMSSArray)e.disconnect();this._streamMSSArray=[],this._audioContext&&(this._audioContext=void 0)}}const hu=S().getLogger("JitsiMeetJS.ts");let uu=!1;function pu(e){const t={};return t.audio_requested=e.devices.includes("audio"),t.video_requested=e.devices.includes("video"),t.screen_sharing_requested=e.devices.includes("desktop"),t.video_requested&&(t.resolution=e.resolution),t}const mu={version:"bbd9796e",JitsiConnection:Bh,ProxyConnectionService:class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{jitsiConnection:t,...n}=e;this._options={pcConfig:t&&t.xmpp.connection.jingle.p2pIceConfig,...n},this._peerConnection=null,this._onFatalError=this._onFatalError.bind(this),this._onSendMessage=this._onSendMessage.bind(this),this._onRemoteStream=this._onRemoteStream.bind(this)}processMessage(e){const t=e.from;if(!t)return;if(this._peerConnection&&this._peerConnection.getPeerJid()!==t)return void this._onFatalError(t,iu.CONNECTION_ERROR,"rejected");const n=this._convertStringToXML(e.data.iq),i=n&&n.find("jingle"),r=i&&i.attr("action");r===iu.INITIATE&&(this._peerConnection=this._createPeerConnection(t,{isInitiator:!1,receiveVideo:!0})),this._peerConnection&&this._peerConnection.processMessage(i),r!==iu.CONNECTION_ERROR&&r!==iu.UNAVAILABLE&&r!==iu.TERMINATE||this._selfCloseConnection()}start(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];this._peerConnection=this._createPeerConnection(e,{isInitiator:!0,receiveVideo:!1}),t.forEach(((e,t)=>{const n=Cc("peer",e.getType(),t);e.setSourceName(n)})),this._peerConnection.start(t)}stop(){this._peerConnection&&this._peerConnection.stop(),this._peerConnection=null}_convertStringToXML(e){try{const t=(new DOMParser).parseFromString(e,"text/xml");return _t()(t)}catch(e){return su.error("Attempted to convert incorrectly formatted xml"),null}}_createPeerConnection(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Cannot create ProxyConnectionPC without a peer.");const n={pcConfig:this._options.pcConfig,onError:this._onFatalError,onRemoteStream:this._onRemoteStream,onSendMessage:this._onSendMessage,peerJid:e,...t};return new ou(n)}_onFatalError(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";su.error("Received a proxy connection error",e,t,n);const i=(0,St.$iq)({to:e,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:t}).c("details").t(n).up();this._onSendMessage(e,i),this._peerConnection&&this._peerConnection.getPeerJid()===e&&this._selfCloseConnection()}_onRemoteStream(e){if(!this._options.onRemoteStream)return su.error("Remote track received without callback."),void e.dispose();const t=e.isVideoTrack();let n;t&&(n=this._options.convertVideoToDesktop?Qo.VideoType.DESKTOP:Qo.VideoType.CAMERA);const i=e.getOriginalStream(),r=pl.createLocalTracks([{deviceId:`proxy:${this._peerConnection.getPeerJid()}`,mediaType:t?Ri.VIDEO:Ri.AUDIO,sourceType:"proxy",stream:i,track:i.getVideoTracks()[0],videoType:n}]);this._options.onRemoteStream(r[0])}_onSendMessage(e,t){if(this._options.onSendMessage)try{const n=(new XMLSerializer).serializeToString(t.nodeTree||t);this._options.onSendMessage(e,{iq:n})}catch(e){su.error("Attempted to send an incorrectly formatted iq.")}}_selfCloseConnection(){this.stop(),this._options.onConnectionClosed&&this._options.onConnectionClosed()}},constants:{recording:{error:{BUSY:"busy",ERROR:"error",RESOURCE_CONSTRAINT:"resource-constraint",UNEXPECTED_REQUEST:"unexpected-request",SERVICE_UNAVAILABLE:"service-unavailable"},mode:{FILE:"file",STREAM:"stream"},status:{OFF:"off",ON:"on",PENDING:"pending"}},sipVideoGW:_,transcriptionStatus:l,trackStreamingStatus:Jc},events:{conference:r,connection:d,detection:f,track:o,mediaDevices:y,connectionQuality:g,e2eping:v,rtcstats:s},errors:{conference:i,connection:c,track:a},errorTypes:{JitsiTrackError:dr},logLevels:S().levels,mediaDevices:Qh,analytics:Mi.analytics,init(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return S().setLogLevel(S().levels.INFO),hu.info(`This appears to be ${ci.getName()}, ver: ${ci.getVersion()}`),$o.init(e.externalStorage),Mi.init(e),window.connectionTimes||(window.connectionTimes={}),!0!==e.enableAnalyticsLogging&&(hu.warn("Analytics disabled, disposing."),this.analytics.dispose()),pl.init(e)},isDesktopSharingEnabled:()=>pl.isDesktopSharingEnabled(),isWebRtcSupported:()=>pl.isWebRtcSupported(),setLogLevel(e){S().setLogLevel(e)},rtcstats:{sendIdentityEntry(e){si.sendIdentity(e)},sendStatsEntry(e,t){si.sendStatsEntry(e,null,t)},on(e,t){si.events.on(e,t)}},setLogLevelById(e,t){S().setLogLevelById(e,t)},addGlobalLogTransport(e){S().addGlobalTransport(e)},removeGlobalLogTransport(e){S().removeGlobalTransport(e)},setGlobalLogOptions(e){S().setGlobalOptions(e)},createLocalTracks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=!1;const{firePermissionPromptIsShownEvent:n,fireSlowPromiseEvent:i,...r}=e;n&&!pl.arePermissionsGrantedForAvailableDevices()?Qh.emit(Kh,ci.getName()):i&&window.setTimeout((()=>{t||Qh.emit(Wh)}),1e3);let o=!1,s=window.performance.now();return window.connectionTimes||(window.connectionTimes={}),uu||(uu=!0,o=!0,window.connectionTimes["firstObtainPermissions.start"]=s),window.connectionTimes["obtainPermissions.start"]=s,pl.obtainAudioAndVideoPermissions(r).then((e=>{t=!0;let n=window.performance.now();if(window.connectionTimes["obtainPermissions.end"]=n,o&&(window.connectionTimes["firstObtainPermissions.end"]=n),Mi.sendAnalytics(an("success",pu(r))),this.isCollectingLocalStats())for(let t=0;t{if(t=!0,n.name===Zi)Mi.sendAnalytics(an("warning",{reason:"extension install user canceled"}));else if(n.name===Xi){const t=pu(e);t.reason="device not found",t.devices=n.gum.devices.join("."),Mi.sendAnalytics(an("error",t))}else{const t=pu(e);t.reason=n.name,Mi.sendAnalytics(an("error",t))}let i=window.performance.now();return window.connectionTimes["obtainPermissions.end"]=i,o&&(window.connectionTimes["firstObtainPermissions.end"]=i),Promise.reject(n)}))},createLocalTracksFromMediaStreams:e=>pl.createLocalTracks(e.map((e=>{const t=e.stream.getTracks().filter((t=>t.kind===e.mediaType));if(!t||0===t.length)throw new dr(or,null,null);if(t.length>1)throw new dr(rr,null,null);return e.track=t[0],e}))),createTrackVADEmitter:(e,t,n)=>Ml.create(e,t,n),createAudioMixer:()=>new lu,getActiveAudioDevice:()=>new Promise((e=>{pl.enumerateDevices((t=>{const n=t.filter((e=>"audioinput"===e.kind)),i=[];for(const e of n){const t=pl.obtainAudioAndVideoPermissions({devices:["audio"],micDeviceId:e.deviceId}).then((e=>{const t=e[0];return Mi.startLocalStats(t,t.setAudioLevel.bind(t)),t}));i.push(t)}Promise.allSettled(i).then((t=>{const n=t.filter((e=>"fulfilled"===e.status)),i=t.filter((e=>"rejected"===e.status)),r=n.map((e=>e.value)),o=i.map((e=>e.value));for(const e of o)Zh.error("Failed to acquire audio device with error: ",e);for(const t of r)t.on(Ct,(n=>{n>.008&&(eu(r),e({deviceId:t.deviceId,deviceLabel:t.track.label}))}));setTimeout((()=>{eu(r),e({deviceId:"",deviceLabel:""})}),3e3)}))}))})),isDeviceListAvailable(){return hu.warn("This method is deprecated, use JitsiMeetJS.mediaDevices.isDeviceListAvailable instead"),this.mediaDevices.isDeviceListAvailable()},isDeviceChangeAvailable(e){return hu.warn("This method is deprecated, use JitsiMeetJS.mediaDevices.isDeviceChangeAvailable instead"),this.mediaDevices.isDeviceChangeAvailable(e)},isMultipleAudioInputSupported(){return this.mediaDevices.isMultipleAudioInputSupported()},isCollectingLocalStats:()=>Mi.audioLevelsEnabled&&_i.isLocalStatsSupported(),enumerateDevices(e){hu.warn("This method is deprecated, use JitsiMeetJS.mediaDevices.enumerateDevices instead"),this.mediaDevices.enumerateDevices(e)},setNetworkInfo(e){let{isOnline:t}=e;xo.updateNetworkInfo({isOnline:t})},util:{ScriptUtil:du(),browser:ci}}}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.loaded=!0,n.exports}__webpack_require__.amdO={},__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var __webpack_exports__=__webpack_require__(449);return __webpack_exports__})()));\n//# sourceMappingURL=lib-jitsi-meet.min.map'; if (!window.JitsiMeetJS) { - const c = document.createElement("script"); - c.text = QT, document.head.appendChild(c); + const l = document.createElement("script"); + l.text = IT, document.head.appendChild(l); } process.env.NODE_ENV === "production" && JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR); window.APP = { conference: { getConnectionState: () => { - var c; - return (c = window.APP.conference._room) == null ? void 0 : c.getConnectionState(); + var l; + return (l = window.APP.conference._room) == null ? void 0 : l.getConnectionState(); }, getStats: () => { - var c, s; - return (s = (c = window.APP.conference._room) == null ? void 0 : c.connectionQuality) == null ? void 0 : s.getStats(); + var l, s; + return (s = (l = window.APP.conference._room) == null ? void 0 : l.connectionQuality) == null ? void 0 : s.getStats(); } } }; JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR); -const Ye = JitsiMeetJS; -function DT(c, s) { - if (c !== "default") - return c; - const u = s === "audio" ? K.getState().audioInputDevices : K.getState().videoInputDevices, p = u.find((S) => S.deviceId === "default"); - if (!p) - return c; +const je = JitsiMeetJS; +function WT(l, s) { + if (l !== "default") + return l; + const u = s === "audio" ? X.getState().audioInputDevices : X.getState().videoInputDevices, m = u.find((S) => S.deviceId === "default"); + if (!m) + return l; const g = u.find( - (S) => S.deviceId !== "default" && S.groupId === p.groupId + (S) => S.deviceId !== "default" && S.groupId === m.groupId ); - return (g == null ? void 0 : g.deviceId) ?? c; + return (g == null ? void 0 : g.deviceId) ?? l; } -async function gR(c, s = null, u = null, p = {}) { - if (et.getState().iAmRecorder) +async function y6(l, s = null, u = null, m = {}) { + if (Xe.getState().iAmRecorder) return; - const { data: S, error: U } = await Xo( - Ye.createLocalTracks({ - devices: [c], + const { data: S, error: U } = await fo( + je.createLocalTracks({ + devices: [l], cameraDeviceId: s, micDeviceId: s, timeout: u, - ...p + ...m }) ); if (U) throw U; return S[0]; } -async function Yl(c, s = null, u = pd.USER) { - const g = K.getState().isMobile() ? null : s, S = DT(g, c), { data: U, error: Q } = await Xo( - gR(c, S, null, { +async function Xl(l, s = null, u = gd.USER) { + const g = X.getState().isMobile() ? null : s, S = WT(g, l), { data: U, error: M } = await fo( + y6(l, S, null, { facingMode: u }) ); - U ? (g === "default" && (U._realDeviceId = U.deviceId = "default"), bR(U)) : (c === "video" ? dv() : c === "audio" && cv(), Q instanceof Error && Q.name === "gum.permission_denied" && ze.publish({ - type: Fn.notification, + U ? (g === "default" && (U._realDeviceId = U.deviceId = "default"), D6(U)) : (l === "video" ? hv() : l === "audio" && uv(), M instanceof Error && M.name === "gum.permission_denied" && We.publish({ + type: fn.notification, payload: { type: "error", - message: `Permission denied for ${c} track. Please allow access to your device.` + message: `Permission denied for ${l} track. Please allow access to your device.` } })); } -function xT() { - var u, p; - if (!et.getState().enableCompanionMode) { - const g = et.getState().audioInputDeviceId ?? ((u = K.getState().audioInputDevice) == null ? void 0 : u.deviceId); - Yl("audio", g); +function HT() { + var u, m; + if (!Xe.getState().enableCompanionMode) { + const g = Xe.getState().audioInputDeviceId ?? ((u = X.getState().audioInputDevice) == null ? void 0 : u.deviceId); + Xl("audio", g); } - if (et.getState().sessionType === Bh.VIDEO) { - const g = et.getState().videoInputDeviceId, S = (p = K.getState().videoInputDevice) == null ? void 0 : p.deviceId, U = et.getState().initialCameraFacing, Q = K.getState().cameraFacing; - g ? Yl("video", g) : U ? Yl("video", null, Q) : Yl("video", S, Q); + if (Xe.getState().sessionType === wh.VIDEO) { + const g = Xe.getState().videoInputDeviceId, S = (m = X.getState().videoInputDevice) == null ? void 0 : m.deviceId, U = Xe.getState().initialCameraFacing, M = X.getState().cameraFacing; + g ? Xl("video", g) : U ? Xl("video", null, M) : Xl("video", S, M); } } -function ZT(c) { - K.getState().audioInputDevices.filter((u) => u.deviceId !== "").length > 0 && Yl("audio", c); +function zT(l) { + X.getState().audioInputDevices.filter((u) => u.deviceId !== "").length > 0 && Xl("audio", l); } -function au(c, s = !1) { - K.getState().isMobileSDK() || c && K.setState({ - audioInputDevice: { ...c.toJSON(), skipSubscribe: s } +function ou(l, s = !1) { + X.getState().isMobileSDK() || l && X.setState({ + audioInputDevice: { ...l.toJSON(), skipSubscribe: s } }); } -async function q5(c, s) { - var p; - if (K.getState().videoInputDevices.filter((g) => g.deviceId !== "").length > 0) - Yl("video", c, s); - else if (c === null) { - const g = (p = fn(He.VIDEO)) == null ? void 0 : p.originalTrack; +async function rE(l, s) { + var m; + if (X.getState().videoInputDevices.filter((g) => g.deviceId !== "").length > 0) + Xl("video", l, s); + else if (l === null) { + const g = (m = gn(He.VIDEO)) == null ? void 0 : m.originalTrack; if (g) { await g.dispose(); - const S = Ie.getState().conference; + const S = Je.getState().conference; S && S.replaceTrack(g, null); } - Yl("video", c, s); + Xl("video", l, s); } } -function wh(c, s = !1) { - if (!K.getState().isMobileSDK() && c) { - const p = c.toJSON ? c.toJSON() : c; - K.setState({ - videoInputDevice: { ...p, skipSubscribe: s } +function Ah(l, s = !1) { + if (!X.getState().isMobileSDK() && l) { + const m = l.toJSON ? l.toJSON() : l; + X.setState({ + videoInputDevice: { ...m, skipSubscribe: s } }); } } -function vR(c) { - Ye.mediaDevices.isDeviceChangeAvailable("output") && Ye.mediaDevices.setAudioOutputDevice(c).then(() => { - const u = K.getState().audioOutputDevices.find((p) => p.deviceId === c); - u && K.setState({ +function N6(l) { + je.mediaDevices.isDeviceChangeAvailable("output") && je.mediaDevices.setAudioOutputDevice(l).then(() => { + const u = X.getState().audioOutputDevices.find((m) => m.deviceId === l); + u && X.setState({ audioOutputDevice: u }); }); } -const OT = /* @__PURE__ */ di({ - low: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - standard: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - high: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - fullHd: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - ultraHd: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - ssHigh: /* @__PURE__ */ $e(/* @__PURE__ */ ma()) -}), Jg = /* @__PURE__ */ di({ - maxBitratesVideo: /* @__PURE__ */ $e(OT), - scalabilityModeEnabled: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()), - useSimulcast: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()), - useKSVC: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()) -}), BT = /* @__PURE__ */ di({ - codecPreferenceOrder: /* @__PURE__ */ $e(/* @__PURE__ */ If(/* @__PURE__ */ Xt())), - screenshareCodec: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - mobileScreenshareCodec: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - enableAdaptiveMode: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()), - av1: /* @__PURE__ */ $e(Jg), - h264: /* @__PURE__ */ $e(Jg), - vp8: /* @__PURE__ */ $e(Jg), - vp9: /* @__PURE__ */ $e(Jg), - minHeightForQualityLvl: /* @__PURE__ */ $e(/* @__PURE__ */ H5(/* @__PURE__ */ Xt(), /* @__PURE__ */ Xt())), - mobileCodecPreferenceOrder: /* @__PURE__ */ $e(/* @__PURE__ */ If(/* @__PURE__ */ Xt())) -}), wT = /* @__PURE__ */ di({ +const jT = /* @__PURE__ */ di({ + low: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + standard: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + high: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + fullHd: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + ultraHd: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + ssHigh: /* @__PURE__ */ et(/* @__PURE__ */ ma()) +}), Ig = /* @__PURE__ */ di({ + maxBitratesVideo: /* @__PURE__ */ et(jT), + scalabilityModeEnabled: /* @__PURE__ */ et(/* @__PURE__ */ Qa()), + useSimulcast: /* @__PURE__ */ et(/* @__PURE__ */ Qa()), + useKSVC: /* @__PURE__ */ et(/* @__PURE__ */ Qa()) +}), PT = /* @__PURE__ */ di({ + codecPreferenceOrder: /* @__PURE__ */ et(/* @__PURE__ */ zf(/* @__PURE__ */ Xt())), + screenshareCodec: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + mobileScreenshareCodec: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + enableAdaptiveMode: /* @__PURE__ */ et(/* @__PURE__ */ Qa()), + av1: /* @__PURE__ */ et(Ig), + h264: /* @__PURE__ */ et(Ig), + vp8: /* @__PURE__ */ et(Ig), + vp9: /* @__PURE__ */ et(Ig), + minHeightForQualityLvl: /* @__PURE__ */ et(/* @__PURE__ */ K5(/* @__PURE__ */ Xt(), /* @__PURE__ */ Xt())), + mobileCodecPreferenceOrder: /* @__PURE__ */ et(/* @__PURE__ */ zf(/* @__PURE__ */ Xt())) +}), GT = /* @__PURE__ */ di({ uid: /* @__PURE__ */ Xt(), name: /* @__PURE__ */ Xt(), - avatar: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - status: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - role: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - lastActiveAt: /* @__PURE__ */ $e(/* @__PURE__ */ ma()) -}), AT = /* @__PURE__ */ di({ - WEBRTC_HOST: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - ANALYTICS_HOST: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - ANALYTICS_VERSION: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - PRESENTER_MODE_ENABLED: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()), + avatar: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + status: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + role: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + lastActiveAt: /* @__PURE__ */ et(/* @__PURE__ */ ma()) +}), YT = /* @__PURE__ */ di({ + WEBRTC_HOST: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + ANALYTICS_HOST: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + ANALYTICS_VERSION: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + PRESENTER_MODE_ENABLED: /* @__PURE__ */ et(/* @__PURE__ */ Qa()), connectionConfig: /* @__PURE__ */ di({ - audioQuality: /* @__PURE__ */ $e( + audioQuality: /* @__PURE__ */ et( /* @__PURE__ */ di({ - stereo: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()) + stereo: /* @__PURE__ */ et(/* @__PURE__ */ Qa()) }) ), - bridgeChannel: /* @__PURE__ */ $e( + bridgeChannel: /* @__PURE__ */ et( /* @__PURE__ */ di({ - preferSctp: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()) + preferSctp: /* @__PURE__ */ et(/* @__PURE__ */ Qa()) }) ), - constraints: /* @__PURE__ */ $e( + constraints: /* @__PURE__ */ et( /* @__PURE__ */ di({ - video: /* @__PURE__ */ $e( + video: /* @__PURE__ */ et( /* @__PURE__ */ di({ - height: /* @__PURE__ */ $e( + height: /* @__PURE__ */ et( /* @__PURE__ */ di({ - ideal: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - max: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - min: /* @__PURE__ */ $e(/* @__PURE__ */ ma()) + ideal: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + max: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + min: /* @__PURE__ */ et(/* @__PURE__ */ ma()) }) ), - width: /* @__PURE__ */ $e( + width: /* @__PURE__ */ et( /* @__PURE__ */ di({ - ideal: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - max: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - min: /* @__PURE__ */ $e(/* @__PURE__ */ ma()) + ideal: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + max: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + min: /* @__PURE__ */ et(/* @__PURE__ */ ma()) }) ) }) ) }) ), - e2ee: /* @__PURE__ */ $e(/* @__PURE__ */ If(/* @__PURE__ */ j5())), - e2eping: /* @__PURE__ */ $e( + e2ee: /* @__PURE__ */ et(/* @__PURE__ */ zf(/* @__PURE__ */ $5())), + e2eping: /* @__PURE__ */ et( /* @__PURE__ */ di({ - enabled: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()) + enabled: /* @__PURE__ */ et(/* @__PURE__ */ Qa()) }) ), - flags: /* @__PURE__ */ $e( + flags: /* @__PURE__ */ et( /* @__PURE__ */ di({ - receiveMultipleVideoStreams: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()), - sendMultipleVideoStreams: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()), - sourceNameSignaling: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()), - ssrcRewritingEnabled: /* @__PURE__ */ $e(/* @__PURE__ */ Qa()) + receiveMultipleVideoStreams: /* @__PURE__ */ et(/* @__PURE__ */ Qa()), + sendMultipleVideoStreams: /* @__PURE__ */ et(/* @__PURE__ */ Qa()), + sourceNameSignaling: /* @__PURE__ */ et(/* @__PURE__ */ Qa()), + ssrcRewritingEnabled: /* @__PURE__ */ et(/* @__PURE__ */ Qa()) }) ), hosts: /* @__PURE__ */ di({ - domain: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - muc: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()) + domain: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + muc: /* @__PURE__ */ et(/* @__PURE__ */ Xt()) }), - hiddenDomain: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - bosh: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - websocket: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), + hiddenDomain: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + bosh: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + websocket: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), serviceUrl: /* @__PURE__ */ Xt(), p2p: /* @__PURE__ */ di({ enabled: /* @__PURE__ */ Qa() }), - resolution: /* @__PURE__ */ $e(/* @__PURE__ */ ma()), - videoQuality: /* @__PURE__ */ $e(BT), - pcStatsInterval: /* @__PURE__ */ $e(/* @__PURE__ */ ma()) + resolution: /* @__PURE__ */ et(/* @__PURE__ */ ma()), + videoQuality: /* @__PURE__ */ et(PT), + pcStatsInterval: /* @__PURE__ */ et(/* @__PURE__ */ ma()) }) -}), $5 = /* @__PURE__ */ di({ +}), oE = /* @__PURE__ */ di({ callToken: /* @__PURE__ */ Xt(), - settings: AT, + settings: YT, sessionId: /* @__PURE__ */ Xt(), - user: wT -}), eE = /* @__PURE__ */ di({ + user: GT +}), sE = /* @__PURE__ */ di({ pid: /* @__PURE__ */ Xt(), name: /* @__PURE__ */ Xt(), uid: /* @__PURE__ */ Xt(), // audioMuted: v.boolean(), // videoPaused: v.boolean(), - avatar: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()) + avatar: /* @__PURE__ */ et(/* @__PURE__ */ Xt()) }); -function Ko(c, s) { - const u = We.getState().getParticipantById(s); +function Er(l, s) { + const u = ze.getState().getParticipantById(s); if (u) { - const p = /* @__PURE__ */ sv(eE, u); - p.success && ze.publish({ - type: c, - payload: p.output + const m = /* @__PURE__ */ lv(sE, u); + m.success && We.publish({ + type: l, + payload: m.output }); } } -function JT() { - const c = We.getState().participants, s = /* @__PURE__ */ sv( - /* @__PURE__ */ If(eE), - c +function XT() { + const l = ze.getState().participants, s = /* @__PURE__ */ lv( + /* @__PURE__ */ zf(sE), + l ); - s.success && ze.publish({ - type: gt.ParticipantEventsListner.onParticipantListChanged, + s.success && We.publish({ + type: lt.ParticipantEventsListner.onParticipantListChanged, payload: s.output }); } -const W3 = { +const KT = { layouts: { tileView: "Tile View", sideLayout: "Side Layout", spotlight: "Spotlight" } }, qT = { audioControl: { muteMicrophone: "Mute microphone", unmuteMicrophone: "Unmute microphone", audioDeviceOptions: "Audio device options", audioSettings: "Audio settings" }, videoControl: { turnOffCamera: "Turn off camera", turnOnCamera: "Turn on camera", videoDeviceOptions: "Video device options", videoSettings: "Video settings" }, settingsDialog: { todo: "// TODO: Revisit this section", title: "Settings", tabs: { audio: "Audio", video: "Video" }, deviceLabels: { microphone: "Microphone", speaker: "Speaker", camera: "Camera", frameRate: "Desktop sharing frame rate" }, deviceStates: { noMicrophoneSelected: "No microphone selected", noSpeakerSelected: "No speaker selected", noCameraSelected: "No camera selected" }, audioSettings: { enableNoiseReduction: "Enable noise reduction" }, videoSettings: { mirrorMyVideo: "Mirror my video", selectCameraToSeePreview: "Select a camera to see preview", loadingCameraPreview: "Loading camera preview...", frameRateUnit: "frames per second", frameRateNotice: "You need to restart the screen share for the new settings to take effect." }, permissions: { errorTitle: "Some permissions are missing", microphoneBlocked: "Access to your microphone is blocked. Please check your browser settings.", cameraBlocked: "Access to your camera is blocked. Please check your browser settings.", microphoneAndCameraBlocked: "Access to your microphone and camera is blocked. Please check your browser settings." }, buttons: { cancel: "Cancel", done: "Done" } }, recording: { startRecording: "Start recording", stopRecording: "Stop recording", startRecordingConfirmation: "Recording will capture video, audio, and screen sharing from this call.", stopRecordingConfirmation: "Stopping will end the recording of video, audio, and screen sharing from this call.", cancel: "Cancel" }, streaming: { startStreaming: "Start streaming", stopStreaming: "Stop streaming", startStreamingConfirmation: "Enter the RTMP stream URL and stream key to start live streaming.", stopStreamingConfirmation: "Are you sure you want to stop the live stream?", streamUrlPlaceholder: "Enter stream URL", streamKeyPlaceholder: "Enter stream key (optional)", cancel: "Cancel" }, raiseHand: "Raise hand", lowerHand: "Lower hand", startScreenSharing: "Start screen sharing", stopScreenSharing: "Stop screen sharing", moreOptions: "More options", leaveSession: "Leave session", reactions: "Reactions" }, $T = { title: "Are you still there?", subtitle: "You are the only one here, so this call will end in less than {minutes} minute{plural}. Do you want to stay in this call?", buttons: { stayInCall: "Stay in the call", leaveNow: "Leave now" } }, ey = { header: { title: "Participants", closeButton: "Close participants list" }, search: { placeholder: "Search Participant" }, emptyState: { title: "No participants found", subtitle: "No participants match your search" } }, ty = { title: "Virtual Background", addBackground: "Add Background", noCameraFeed: "No camera feed detected", buttons: { cancel: "Cancel", done: "Done" } }, ny = { recording: { label: "REC", tooltip: "This session is being recorded" }, streaming: { label: "LIVE", tooltip: "This session is being streamed" } }, iy = { recordingStarted: "The session is being recorded", recordingStopped: "Recording has been stopped", streamingStarted: "Live streaming has started", streamingStopped: "Live streaming has stopped" }, ay = { error: "Something went wrong, please try again." }, ry = {}, oy = { + header: KT, + controlPanel: qT, + idealTimeout: $T, + participantList: ey, + virtualBackground: ty, + indicators: ny, + notifications: iy, + general: ay, + other: ry +}, K3 = { + translations: { + "en-US": oy + }, + currentLocale: "en-US" +}, lE = vd( + cu( + du(K3, (l) => ({ + reset: () => l(K3), + setLocale: (s) => l(() => ({ + currentLocale: s + })) + })) + ) +); +function cE(l, s) { + const u = s.split("."); + let m = l; + for (const g of u) { + if (m == null || typeof m != "object") + return ""; + m = m[g]; + } + return m; +} +function rv(l) { + const { translations: s, currentLocale: u } = lE.getState(); + return cE(s, `${u}.${l}`); +} +const er = () => { + const { translations: l, currentLocale: s } = lE(); + return { + t: (m) => cE(l, `${s}.${m}`), + currentLocale: s, + translations: l + }; +}, q3 = { sessionType: "VIDEO", autoStartRecording: !1, layout: pa.TILE, hideRecordingButton: !0, + hideStreamingButton: !0, hideVirtualBackgroundButton: !1, hideAudioModeButton: !1, hideSwitchCameraButton: !1, @@ -2721,6 +2798,7 @@ const W3 = { hideSessionTimer: !1, hideNetworkIndicator: !0, hideRecordingStatusIndicator: !1, + hideStreamingStatusIndicator: !1, enableParticipantContextMenu: !0, // lowBandwidthMode: false, displayName: "", @@ -2733,19 +2811,20 @@ const W3 = { idleTimeoutPeriodAfterPrompt: 18e4, enableSpotlightDrag: !0, enableSpotlightSwap: !0, + enableIOSPictureInPicture: !1, showFrameRate: !1, enableCompanionMode: !1, isPeerCall: !1, enableNotifications: !0 -}, et = fd()( - su( - lu(W3, (c) => ({ - reset: () => c(W3) +}, Xe = vd()( + cu( + du(q3, (l) => ({ + reset: () => l(q3) })) ) -), LT = (c) => { - et.setState(c); -}, IT = { +), sy = (l) => { + Xe.setState(l); +}, ly = { avatar: void 0, isLocal: !0, name: "", @@ -2755,312 +2834,313 @@ const W3 = { sources: /* @__PURE__ */ new Map(), type: "human", uid: "unknown" -}, H3 = { +}, $3 = { dominantSpeakers: [], - localParticipant: IT, + localParticipant: ly, participants: [], virtualParticipants: [] -}, We = fd()( - su( - lu(H3, (c, s) => ({ +}, ze = vd()( + cu( + du($3, (l, s) => ({ addParticipant: (u) => { - c((p) => ({ - participants: p.participants.some((g) => g.pid === u.pid) ? p.participants.map( + l((m) => ({ + participants: m.participants.some((g) => g.pid === u.pid) ? m.participants.map( (g) => g.pid === u.pid ? { ...g, ...u } : g - ) : [...p.participants, u] + ) : [...m.participants, u] })); }, addVirtualParticipant: (u) => { - c((p) => ({ - virtualParticipants: p.virtualParticipants.some( + l((m) => ({ + virtualParticipants: m.virtualParticipants.some( (g) => g.pid === u.pid && g.type === u.type - ) ? p.virtualParticipants.map( + ) ? m.virtualParticipants.map( (g) => g.pid === u.pid && g.type === u.type ? { ...g, ...u } : g - ) : [...p.virtualParticipants, u] + ) : [...m.virtualParticipants, u] })); }, - clearParticipants: () => c({ participants: [], virtualParticipants: [] }), + clearParticipants: () => l({ participants: [], virtualParticipants: [] }), removeParticipant: (u) => { - const g = We.getState().participants.find((S) => S.pid === u); + const g = ze.getState().participants.find((S) => S.pid === u); if (g) { - Ko( - gt.ParticipantEventsListner.onParticipantLeft, + Er( + lt.ParticipantEventsListner.onParticipantLeft, g.pid ); - const S = We.getState().pinnedParticipant; - (S == null ? void 0 : S.pid) === g.pid && We.getState().unpinParticipant(); + const S = ze.getState().pinnedParticipant; + (S == null ? void 0 : S.pid) === g.pid && ze.getState().unpinParticipant(); } - c((S) => ({ + l((S) => ({ participants: S.participants.filter((U) => U.pid !== u) })); }, - removeVirtualParticipant: (u, p = "screen-share") => { - const g = We.getState().pinnedParticipant; - (g == null ? void 0 : g.pid) === u && g.type === p && We.getState().unpinParticipant(), c((S) => ({ + removeVirtualParticipant: (u, m = "screen-share") => { + const g = ze.getState().pinnedParticipant; + (g == null ? void 0 : g.pid) === u && g.type === m && ze.getState().unpinParticipant(), l((S) => ({ virtualParticipants: S.virtualParticipants.filter( - (U) => !(U.pid === u && U.type === p) + (U) => !(U.pid === u && U.type === m) ) })); }, updateLocalParticipant: (u) => { - c((p) => ({ + l((m) => ({ localParticipant: { - ...p.localParticipant, + ...m.localParticipant, ...u } })); }, - updateParticipant: (u, p) => { - c((g) => u === g.localParticipant.pid ? { + updateParticipant: (u, m) => { + l((g) => u === g.localParticipant.pid ? { localParticipant: { ...g.localParticipant, - ...p + ...m } } : { participants: g.participants.map( - (S) => S.pid === u ? { ...S, ...p } : S + (S) => S.pid === u ? { ...S, ...m } : S ) }); }, - updateParticipantRole: (u, p) => { - c((g) => ({ + updateParticipantRole: (u, m) => { + l((g) => ({ participants: g.participants.map( - (S) => S.pid === u ? { ...S, role: p } : S + (S) => S.pid === u ? { ...S, role: m } : S ) })); }, - pinParticipant: (u, p) => { - const S = tR().find( - (U) => U.pid === u && U.type === p + pinParticipant: (u, m) => { + const S = a6().find( + (U) => U.pid === u && U.type === m ); - S && c({ pinnedParticipant: S }); + S && l({ pinnedParticipant: S }); }, unpinParticipant: () => { - c({ pinnedParticipant: void 0 }); + l({ pinnedParticipant: void 0 }); }, getParticipantById: (u) => { - const p = s().localParticipant; - return u === p.pid ? p : s().participants.find((g) => g.pid === u); + const m = s().localParticipant; + return u === m.pid ? m : s().participants.find((g) => g.pid === u); }, - reset: () => c(H3) + reset: () => l($3) })) ) ); function Wh() { - const c = We((g) => g.localParticipant), s = We((g) => g.participants), u = We( + const l = ze((g) => g.localParticipant), s = ze((g) => g.participants), u = ze( (g) => g.virtualParticipants - ), p = et.getState().iAmRecorder; - return re.useMemo(() => p ? [...u, ...s] : [c, ...u, ...s], [p, c, s, u]); + ), m = Xe.getState().iAmRecorder; + return re.useMemo(() => m ? [...u, ...s] : [l, ...u, ...s], [m, l, s, u]); } -function tR() { - const c = We.getState().localParticipant, s = We.getState().participants, u = We.getState().virtualParticipants; - return [c, ...u, ...s]; +function a6() { + const l = ze.getState().localParticipant, s = ze.getState().participants, u = ze.getState().virtualParticipants; + return [l, ...u, ...s]; } -const WT = () => { - const c = We.getState().dominantSpeakers, s = We.getState().participants; - We.setState({ - dominantSpeakers: c.filter( - (u) => s.some((p) => p.pid === u) +const cy = () => { + const l = ze.getState().dominantSpeakers, s = ze.getState().participants; + ze.setState({ + dominantSpeakers: l.filter( + (u) => s.some((m) => m.pid === u) ) }); -}, HT = () => { - const { participants: c, dominantSpeakers: s } = We.getState(), u = s[0]; - if (!u || c.slice(0, 4).some((S) => S.pid === u)) +}, dy = () => { + const { participants: l, dominantSpeakers: s } = ze.getState(), u = s[0]; + if (!u || l.slice(0, 4).some((S) => S.pid === u)) return; - const g = [...c].sort((S, U) => { - const Q = s.indexOf(S.pid), T = s.indexOf(U.pid); - return Q === -1 && T === -1 ? 0 : Q === -1 ? 1 : T === -1 ? -1 : Q - T; + const g = [...l].sort((S, U) => { + const M = s.indexOf(S.pid), T = s.indexOf(U.pid); + return M === -1 && T === -1 ? 0 : M === -1 ? 1 : T === -1 ? -1 : M - T; }); - We.setState({ participants: g }); + ze.setState({ participants: g }); }; -We.subscribe( - (c) => c.dominantSpeakers, - HT +ze.subscribe( + (l) => l.dominantSpeakers, + dy ); -const tE = (c, s) => { - We.getState().pinParticipant(c, s); -}, nE = () => { - We.getState().unpinParticipant(); +const dE = (l, s) => { + ze.getState().pinParticipant(l, s); +}, uE = () => { + ze.getState().unpinParticipant(); }; -We.subscribe( - (c) => c.virtualParticipants, - (c) => { - c && c.length > 0 ? ru(pa.SIDEBAR, !0) : K.getState().sidebarLayoutSetProgrammatically && ru(pa.TILE); +ze.subscribe( + (l) => l.virtualParticipants, + (l) => { + l && l.length > 0 ? su(pa.SIDEBAR, !0) : X.getState().sidebarLayoutSetProgrammatically && su(pa.TILE); } ); -We.subscribe( - (c) => c.participants.length, +ze.subscribe( + (l) => l.participants.length, () => { - WT(); + cy(); } ); -We.subscribe( - (c) => c.participants.map(({ pid: s, name: u, avatar: p, uid: g }) => ({ +ze.subscribe( + (l) => l.participants.map(({ pid: s, name: u, avatar: m, uid: g }) => ({ pid: s, name: u, - avatar: p, + avatar: m, uid: g })), () => { - JT(); + XT(); }, { - equalityFn: fR + equalityFn: T6 } ); -We.subscribe( - (c) => c.localParticipant.pid, - (c) => { - st.getState().updateLocalTrack(He.AUDIO, { - pid: c - }), st.getState().updateLocalTrack(He.VIDEO, { - pid: c +ze.subscribe( + (l) => l.localParticipant.pid, + (l) => { + rt.getState().updateLocalTrack(He.AUDIO, { + pid: l + }), rt.getState().updateLocalTrack(He.VIDEO, { + pid: l }); } ); -We.subscribe( - (c) => !!c.pinnedParticipant, - (c) => { - c ? K.getState().layout === pa.TILE && ru(pa.SIDEBAR, !0) : K.getState().sidebarLayoutSetProgrammatically && ru(pa.TILE); +ze.subscribe( + (l) => !!l.pinnedParticipant, + (l) => { + l ? X.getState().layout === pa.TILE && su(pa.SIDEBAR, !0) : X.getState().sidebarLayoutSetProgrammatically && su(pa.TILE); } ); -We.subscribe( - (c) => c.participants.length, - (c) => { - c === 0 ? K.getState().restartIdealTimeoutTimer() : K.getState().clearIdealTimeoutTimer(); +ze.subscribe( + (l) => l.participants.length, + (l) => { + l === 0 ? X.getState().restartIdealTimeoutTimer() : X.getState().clearIdealTimeoutTimer(); } ); -ze.subscribe( - gt.SessionStatusListener.onSessionJoined, +We.subscribe( + lt.SessionStatusListener.onSessionJoined, () => { - We.getState().participants.length === 0 && K.getState().restartIdealTimeoutTimer(); + ze.getState().participants.length === 0 && X.getState().restartIdealTimeoutTimer(); } ); -const SR = (c) => { +const b6 = (l) => { const { pinnedParticipant: s, participants: u, - virtualParticipants: p, + virtualParticipants: m, dominantSpeakers: g, localParticipant: S - } = c; + } = l; if (s) return s; - if (p.length > 0) - return p[0]; + if (m.length > 0) + return m[0]; for (const U of g) { - const Q = u.find((T) => T.pid === U); - if (Q) - return Q; + const M = u.find((T) => T.pid === U); + if (M) + return M; } return u.length > 0 ? u[0] : S; -}; -We.subscribe( - (c) => c.participants.filter((s) => s.uid), - (c, s) => { - c.length > s.length && eR( - c, +}, uy = (l) => (l == null ? void 0 : l.type) === "screen-share" ? He.SCREENSHARE : He.VIDEO; +ze.subscribe( + (l) => l.participants.filter((s) => s.uid), + (l, s) => { + l.length > s.length && i6( + l, s, - (p) => p.uid - ).forEach((p) => { - Ko( - gt.ParticipantEventsListner.onParticipantJoined, - p.pid + (m) => m.uid + ).forEach((m) => { + Er( + lt.ParticipantEventsListner.onParticipantJoined, + m.pid ); }); } ); -const z3 = 3, AS = { +const e5 = 3, LS = { toasts: [] }; -let zT = 0; -const Zh = fd((c) => ({ - ...AS, +let hy = 0; +const au = vd((l) => ({ + ...LS, addToast: (s) => { - if (!sE() || !et.getState().enableNotifications) + if (!RE() || !Xe.getState().enableNotifications) return ""; - const u = s.id ?? `toast-${++zT}-${Date.now()}`, p = { + const u = s.id ?? `toast-${++hy}-${Date.now()}`, m = { ...s, id: u, createdAt: Date.now() }; - return c((g) => { - const S = g.toasts.findIndex((Q) => Q.id === u); + return l((g) => { + const S = g.toasts.findIndex((M) => M.id === u); if (S !== -1) { - const Q = [...g.toasts]; - return Q[S] = p, { toasts: Q }; + const M = [...g.toasts]; + return M[S] = m, { toasts: M }; } - const U = [...g.toasts, p]; - return U.length > z3 ? { toasts: U.slice(-z3) } : { toasts: U }; + const U = [...g.toasts, m]; + return U.length > e5 ? { toasts: U.slice(-e5) } : { toasts: U }; }), u; }, removeToast: (s) => { - c((u) => ({ - toasts: u.toasts.filter((p) => p.id !== s) + l((u) => ({ + toasts: u.toasts.filter((m) => m.id !== s) })); }, clearAll: () => { - c(AS); + l(LS); }, reset: () => { - c(AS); + l(LS); } })); -function Xg(c) { - return Zh.getState().addToast({ - id: c.id, - message: c.message, - type: c.type ?? "info", - duration: c.duration ?? 3e3, - position: c.position ?? "bottom", - action: c.action +function If(l) { + return au.getState().addToast({ + id: l.id, + message: l.message, + type: l.type ?? "info", + duration: l.duration ?? 3e3, + position: l.position ?? "bottom", + action: l.action }); } -const jT = 8, PT = 5e3; -let Kg = 0, Oh = null; -function av() { - Oh && (clearTimeout(Oh), Oh = null), Kg = 0; +const my = 8, py = 5e3; +let qg = 0, Bh = null; +function cv() { + Bh && (clearTimeout(Bh), Bh = null), qg = 0; } -function GT() { - if (Oh) +function fy() { + if (Bh) return; - if (Kg >= jT) { - av(), Xg({ + if (qg >= my) { + cv(), If({ id: "recording-failed", type: "error", message: "Recording failed" }); return; } - const c = PT * 2 ** Math.max(0, Kg - 2); - Kg += 1, Oh = setTimeout(() => { - Oh = null, lv(); - }, c); + const l = py * 2 ** Math.max(0, qg - 2); + qg += 1, Bh = setTimeout(() => { + Bh = null, dv(); + }, l); } -function YT() { +function gy() { var g, S, U; - const c = Ie.getState().conference; - if (!(c != null && c.room)) + const l = Je.getState().conference; + if (!(l != null && l.room)) return; - const s = et.getState(), u = We.getState().localParticipant, p = { + const s = Xe.getState(), u = ze.getState().localParticipant, m = { session_id: s.sessionId, is_audio_only: String(s.sessionType === "VOICE"), is_audio_muted: String(s.startAudioMuted), is_video_muted: String(s.startVideoPaused), + is_peer_call: String(s.isPeerCall), start_recording_on_call_start: String(s.autoStartRecording), uid: u.uid, - platform: K.getState().sdkPlatform, - platform_version: K.getState().platformVersion, - user_agent: K.getState().userAgent, - meeting_id: ((U = (S = (g = c.room) == null ? void 0 : g.xmpp) == null ? void 0 : S.getJid) == null ? void 0 : U.call(S)) ?? s.sessionId, + platform: X.getState().sdkPlatform, + platform_version: X.getState().platformVersion, + user_agent: X.getState().userAgent, + meeting_id: ((U = (S = (g = l.room) == null ? void 0 : g.xmpp) == null ? void 0 : S.getJid) == null ? void 0 : U.call(S)) ?? s.sessionId, mode: s.layout, - commit_id: "85fc08b" + commit_id: "65efcec" }; - c.room.addOrReplaceInPresence(pR.initialConfig, { - attributes: p + l.room.addOrReplaceInPresence(U6.initialConfig, { + attributes: m }); } -const j3 = { +const t5 = { conference: null, conferenceJoined: !1, conferenceJoinedAt: null, @@ -3071,163 +3151,165 @@ const j3 = { remoteStatsTimestamps: /* @__PURE__ */ new Map(), raiseHandMap: /* @__PURE__ */ new Map(), recording: { - status: Ye.constants.recording.status.OFF, - mode: Ye.constants.recording.mode.FILE + status: je.constants.recording.status.OFF, + mode: je.constants.recording.mode.FILE }, - isRecording: !1 -}, Ie = fd()( - su( - lu(j3, (c) => ({ + isRecording: !1, + isStreaming: !1 +}, Je = vd()( + cu( + du(t5, (l) => ({ conferenceWillJoin: (s) => { - typeof (window == null ? void 0 : window.APP) < "u" && (window.APP.conference._room = s), c({ conference: s, conferenceStatus: "joining" }); + typeof (window == null ? void 0 : window.APP) < "u" && (window.APP.conference._room = s), l({ conference: s, conferenceStatus: "joining" }); }, reset: () => { - av(), c(j3); + cv(), l(t5); }, raiseHand: (s, u) => { - c((p) => ({ - raiseHandMap: new Map(p.raiseHandMap).set( + l((m) => ({ + raiseHandMap: new Map(m.raiseHandMap).set( s, u ) - })), Ko( - gt.ParticipantEventsListner.onParticipantHandRaised, + })), Er( + lt.ParticipantEventsListner.onParticipantHandRaised, s ); }, lowerHand: (s) => { - Ie.getState().raiseHandMap.has(s) && (c((p) => { - const g = new Map(p.raiseHandMap); + Je.getState().raiseHandMap.has(s) && (l((m) => { + const g = new Map(m.raiseHandMap); return g.delete(s), { raiseHandMap: g }; - }), Ko( - gt.ParticipantEventsListner.onParticipantHandLowered, + }), Er( + lt.ParticipantEventsListner.onParticipantHandLowered, s )); }, leaveConference: async () => { - const s = Ie.getState().conference; + const s = Je.getState().conference; if (s) { - const { error: u } = await Xo(s.leave(), 500); - u && ze.publish({ - type: gt.SessionStatusListener.onSessionLeft + const { error: u } = await fo(s.leave(), 500); + u && We.publish({ + type: lt.SessionStatusListener.onSessionLeft }); } }, endConference: async () => { - const s = Ie.getState().conference; + const s = Je.getState().conference; if (s) { - const { error: u } = await Xo(s.end()); - } - }, - stopRecording: async () => { - av(); - const s = Ie.getState().conference; - if (s) { - const u = Ie.getState().recording; - if (u.sessionId) { - const { error: p } = await Xo( - s.stopRecording(u.sessionId) - ); - } + const { error: u } = await fo(s.end()); } } })) ) -), XT = () => { - const [c, s] = re.useState(0), u = Ie( - (p) => p.conferenceStartedAt +), vy = () => { + const [l, s] = re.useState(0), u = Je( + (m) => m.conferenceStartedAt ); return re.useEffect(() => { - const p = setInterval(() => { + const m = setInterval(() => { if (!u) { s(0); return; } s(Math.max(Date.now() - u, 0)); }, 1e3); - return () => clearInterval(p); - }, [u]), c; + return () => clearInterval(m); + }, [u]), l; }; -function iE() { - const c = Ie.getState().conference; - if (c) { - const s = Date.now(), u = We.getState().localParticipant.pid; - c == null || c.setLocalParticipantProperty("raisedHand", s), Ie.getState().raiseHand(u, s); +function hE() { + const l = Je.getState().conference; + if (l) { + const s = Date.now(), u = ze.getState().localParticipant.pid; + l == null || l.setLocalParticipantProperty("raisedHand", s), Je.getState().raiseHand(u, s); } } -function rv() { - const c = Ie.getState().conference; - if (c) { - const s = We.getState().localParticipant.pid; - c.setLocalParticipantProperty("raisedHand", 0), Ie.getState().lowerHand(s); +function ov() { + const l = Je.getState().conference; + if (l) { + const s = ze.getState().localParticipant.pid; + l.setLocalParticipantProperty("raisedHand", 0), Je.getState().lowerHand(s); } } -function RR() { - const c = Ie.getState().conference; - (c == null ? void 0 : c.getLocalParticipantProperty("raisedHand")) ? rv() : iE(); +function V6() { + const l = Je.getState().conference; + (l == null ? void 0 : l.getLocalParticipantProperty("raisedHand")) ? ov() : hE(); } -const aE = () => { - const c = Ie((u) => u.isRecording); - return !et((u) => u.iAmRecorder) && c; +const mE = () => { + const l = Je((u) => u.isRecording); + return !Xe((u) => u.iAmRecorder) && l; +}, pE = () => { + const l = Je((u) => u.isStreaming); + return !Xe((u) => u.iAmRecorder) && l; }; -Ie.subscribe( - (c) => c.recording, - (c) => { - const s = c.status, u = c.mode, p = c.error, g = c.initiator, S = Ye.constants.recording.error; - p && (p === S.UNEXPECTED_REQUEST || (p === S.RESOURCE_CONSTRAINT ? (Xg({ - id: "recording-failed", - type: "error", - duration: 0, - message: "Recorders busy, retrying..." - }), GT()) : p === S.SERVICE_UNAVAILABLE ? Xg({ - id: "recording-failed", - type: "error", - message: "Recording unavailable" - }) : Xg({ - id: "recording-failed", - type: "error", - message: "Recording failed" - }))), !p && g && u === Ye.constants.recording.mode.FILE && (s === Ye.constants.recording.status.ON || s === Ye.constants.recording.status.PENDING) ? (av(), Zh.getState().removeToast("recording-failed"), Ie.setState({ isRecording: !0 })) : Ie.setState({ isRecording: !1 }); +Je.subscribe( + (l) => l.recording, + (l) => { + const s = l.status, u = l.mode, m = l.error, g = l.initiator, S = !m && g && (s === je.constants.recording.status.ON || s === je.constants.recording.status.PENDING), U = je.constants.recording.error; + if (m) { + const F = u === je.constants.recording.mode.STREAM, b = F ? "streaming-failed" : "recording-failed"; + m === U.UNEXPECTED_REQUEST || (m === U.RESOURCE_CONSTRAINT ? F ? If({ + id: b, + type: "error", + message: "Streaming failed" + }) : (If({ + id: b, + type: "error", + duration: 0, + message: "Recorders busy, retrying..." + }), fy()) : m === U.SERVICE_UNAVAILABLE ? If({ + id: b, + type: "error", + message: F ? "Streaming unavailable" : "Recording unavailable" + }) : If({ + id: b, + type: "error", + message: F ? "Streaming failed" : "Recording failed" + })); + } + const M = S && u === je.constants.recording.mode.FILE, T = S && u === je.constants.recording.mode.STREAM; + M && (cv(), au.getState().removeToast("recording-failed")), T && au.getState().removeToast("streaming-failed"), Je.setState({ + isRecording: !!M, + isStreaming: !!T + }); } ); -Ie.subscribe( - (c) => c.isRecording, - (c) => { - var p, g; - const s = (g = (p = Ie.getState().recording.initiator) == null ? void 0 : p.getId) == null ? void 0 : g.call(p), u = We.getState().localParticipant.pid; - c ? (s && s !== u ? Ko( - gt.ParticipantEventsListner.onParticipantStartedRecording, +Je.subscribe( + (l) => l.isRecording, + (l) => { + var m, g; + const s = (g = (m = Je.getState().recording.initiator) == null ? void 0 : m.getId) == null ? void 0 : g.call(m), u = ze.getState().localParticipant.pid; + l ? (s && s !== u ? Er( + lt.ParticipantEventsListner.onParticipantStartedRecording, s - ) : ze.publish({ - type: gt.MediaEventsListener.onRecordingStarted - }), ze.publish({ - type: Fn.notification, + ) : We.publish({ + type: lt.MediaEventsListener.onRecordingStarted + }), We.publish({ + type: fn.notification, payload: { type: "info", - // TODO: Localize this message - message: "The session is being recorded" + message: rv("notifications.recordingStarted") } - })) : (s && s !== u ? Ko( - gt.ParticipantEventsListner.onParticipantStoppedRecording, + })) : (s && s !== u ? Er( + lt.ParticipantEventsListner.onParticipantStoppedRecording, s - ) : ze.publish({ - type: gt.MediaEventsListener.onRecordingStopped - }), ze.publish({ - type: Fn.notification, + ) : We.publish({ + type: lt.MediaEventsListener.onRecordingStopped + }), We.publish({ + type: fn.notification, payload: { type: "info", - // TODO: Localize this message - message: "Recording has been stopped" + message: rv("notifications.recordingStopped") } })); } ); -async function lv() { - const c = Ie.getState().conference; - if (c) { - const { data: s, error: u } = await Xo( - c.startRecording({ - mode: Ye.constants.recording.mode.FILE, +async function dv() { + const { conference: l, isStreaming: s } = Je.getState(); + if (!s && l) { + const { data: u, error: m } = await fo( + l.startRecording({ + mode: je.constants.recording.mode.FILE, appData: JSON.stringify({ startedAt: Date.now() }) @@ -3235,97 +3317,158 @@ async function lv() { ); } } -async function rE() { - Ie.getState().stopRecording(); +async function fE() { + cv(); + const { conference: l, recording: s } = Je.getState(); + if (!l || !s.sessionId) + return; + const { error: u } = await fo( + l.stopRecording(s.sessionId) + ); +} +async function gE() { + const { recording: l } = Je.getState(); + l.mode !== je.constants.recording.mode.STREAM && await fE(); +} +async function vE() { + Je.getState().isRecording ? await gE() : await dv(); +} +Je.subscribe( + (l) => l.isStreaming, + (l) => { + var m, g; + const s = (g = (m = Je.getState().recording.initiator) == null ? void 0 : m.getId) == null ? void 0 : g.call(m), u = ze.getState().localParticipant.pid; + l ? (X.getState().clearIdealTimeoutTimer(), s && s !== u ? Er( + lt.ParticipantEventsListner.onParticipantStartedStreaming, + s + ) : We.publish({ + type: lt.MediaEventsListener.onStreamingStarted + }), We.publish({ + type: fn.notification, + payload: { + type: "info", + message: rv("notifications.streamingStarted") + } + })) : (X.getState().restartIdealTimeoutTimer(), s && s !== u ? Er( + lt.ParticipantEventsListner.onParticipantStoppedStreaming, + s + ) : We.publish({ + type: lt.MediaEventsListener.onStreamingStopped + }), We.publish({ + type: fn.notification, + payload: { + type: "info", + message: rv("notifications.streamingStopped") + } + })); + } +); +async function r6(l, s) { + const { conference: u, isRecording: m } = Je.getState(); + if (m) + return; + const g = s ? `${l.replace(/\/+$/, "")}/${s}` : l; + if (u) { + const { error: S } = await fo( + u.startRecording({ + mode: je.constants.recording.mode.STREAM, + streamId: g, + appData: JSON.stringify({ + startedAt: Date.now() + }) + }) + ); + } } -async function oE() { - Ie.getState().isRecording ? await rE() : await lv(); +async function SE() { + const { recording: l } = Je.getState(); + l.mode === je.constants.recording.mode.STREAM && await fE(); } -const sE = () => { - const c = Ie.getState().conferenceStatus; - return c === "joined" || c === "restored"; +const RE = () => { + const l = Je.getState().conferenceStatus; + return l === "joined" || l === "restored"; }; -Ie.subscribe( - (c) => c.conferenceStatus, - (c, s) => { - c === "interrupted" && (s === "joined" || s === "restored") ? ze.publish({ - type: gt.SessionStatusListener.onConnectionLost - }) : s === "interrupted" && (c === "joined" || c === "restored") && ze.publish({ - type: gt.SessionStatusListener.onConnectionRestored +Je.subscribe( + (l) => l.conferenceStatus, + (l, s) => { + l === "interrupted" && (s === "joined" || s === "restored") ? We.publish({ + type: lt.SessionStatusListener.onConnectionLost + }) : s === "interrupted" && (l === "joined" || l === "restored") && We.publish({ + type: lt.SessionStatusListener.onConnectionRestored }); } ); -Ie.subscribe( - (c) => c.conference, - (c) => { - if (YT(), c) { - const s = We.getState().localParticipant; - c.sendCommand(pR.userInfo, { +Je.subscribe( + (l) => l.conference, + (l) => { + if (gy(), l) { + const s = ze.getState().localParticipant; + l.sendCommand(U6.userInfo, { value: JSON.stringify(s) }); } } ); -const P3 = { +const n5 = { tracks: [], permissions: { audio: !1, video: !1, initialized: !1 } -}, st = fd()( - su( - lu(P3, (c, s) => ({ - reset: () => c({ - ...P3, +}, rt = vd()( + cu( + du(n5, (l, s) => ({ + reset: () => l({ + ...n5, // Preserve permissions across resets - they're queried once at SDK init // and shouldn't be lost when joining/leaving sessions permissions: s().permissions }), - addTrack: (u) => c((p) => { + addTrack: (u) => l((m) => { const g = u.isLocal(), S = (() => { var T; - return u.getParticipantId() ? u.getParticipantId() : g ? (T = We.getState().localParticipant) == null ? void 0 : T.pid : u.getId(); + return u.getParticipantId() ? u.getParticipantId() : g ? (T = ze.getState().localParticipant) == null ? void 0 : T.pid : u.getId(); })(), U = { local: g, - mediaType: xh(u), + mediaType: Oh(u), pid: S, videoType: u.getVideoType(), muted: u.isMuted() ? 1 : 0, streamingStatus: "active", originalTrack: u - }, Q = p.tracks.findIndex( + }, M = m.tracks.findIndex( (T) => T.pid === S && T.mediaType === U.mediaType && T.local === g && T.originalTrack === u ); - if (Q !== -1) { - const T = [...p.tracks]; - return T[Q] = U, { tracks: T }; + if (M !== -1) { + const T = [...m.tracks]; + return T[M] = U, { tracks: T }; } return { - tracks: [U, ...p.tracks] + tracks: [U, ...m.tracks] }; }), - removeTrack: (u) => c((p) => ({ - tracks: p.tracks.filter( + removeTrack: (u) => l((m) => ({ + tracks: m.tracks.filter( (g) => g.originalTrack !== u ) })), - updateTrack: (u, p) => c((g) => ({ + updateTrack: (u, m) => l((g) => ({ tracks: g.tracks.map( (S) => S.originalTrack === u ? { ...S, - mediaType: S.mediaType ?? xh(u), + mediaType: S.mediaType ?? Oh(u), videoType: S.videoType ?? u.getVideoType(), - ...p + ...m } : S ) })), - updateLocalTrack: (u, p) => c((g) => { + updateLocalTrack: (u, m) => l((g) => { const S = g.tracks.find( (U) => U.local && U.mediaType === u ); if (!S) { - const U = We.getState().localParticipant; + const U = ze.getState().localParticipant; return { tracks: [ ...g.tracks, @@ -3334,9 +3477,9 @@ const P3 = { mediaType: u, pid: U.pid, videoType: u === He.SCREENSHARE ? "desktop" : u === He.VIDEO ? "camera" : null, - muted: p.muted ?? 0, + muted: m.muted ?? 0, streamingStatus: "active", - ...p + ...m } ] }; @@ -3345,7 +3488,7 @@ const P3 = { tracks: g.tracks.map( (U) => U === S ? { ...U, - ...p, + ...m, mediaType: u, videoType: u === He.SCREENSHARE ? "desktop" : u === He.VIDEO ? "camera" : null } : U @@ -3354,317 +3497,321 @@ const P3 = { }) })) ) -), ER = (c, s = He.VIDEO) => { - const u = st((g) => g.tracks); +), C6 = (l, s = He.VIDEO) => { + const u = rt((g) => g.tracks); return re.useMemo( - () => u.find((g) => g.pid === c && g.mediaType === s), - [u, c, s] + () => u.find((g) => g.pid === l && g.mediaType === s), + [u, l, s] ); -}, KT = (c = He.VIDEO) => { - const s = st((u) => u.tracks); +}, Sy = (l, s = He.VIDEO) => rt.getState().tracks.find((m) => m.pid === l && m.mediaType === s), Ry = (l = He.VIDEO) => { + const s = rt((u) => u.tracks); return re.useMemo( - () => s.find((u) => u.local && u.mediaType === c), - [s, c] + () => s.find((u) => u.local && u.mediaType === l), + [s, l] ); -}, fn = (c = He.VIDEO) => st.getState().tracks.find((u) => u.local && u.mediaType === c), qT = async () => { - const c = st.getState().tracks.filter((p) => p.local), s = []; - for (const { originalTrack: p } of c) - p && p.disposed !== !0 && s.push(Xo(p.dispose())); +}, gn = (l = He.VIDEO) => rt.getState().tracks.find((u) => u.local && u.mediaType === l), Ey = async () => { + const l = rt.getState().tracks.filter((m) => m.local), s = []; + for (const { originalTrack: m } of l) + m && m.disposed !== !0 && s.push(fo(m.dispose())); const u = await Promise.all(s); - for (const { error: p } of u) - p && console.error("Error disposing track:", p); -}, cv = () => { - st.getState().updateLocalTrack(He.AUDIO, { + for (const { error: m } of u) + m && console.error("Error disposing track:", m); +}, uv = () => { + rt.getState().updateLocalTrack(He.AUDIO, { muted: 1 }); -}, lE = async () => { - let c = fn(He.AUDIO); - const s = st.getState().permissions, u = K.getState().isMobileSDK(); +}, o6 = async () => { + let l = gn(He.AUDIO); + const s = rt.getState().permissions, u = X.getState().isMobileSDK(); if (!s.audio && s.initialized && !u) { - ze.publish({ - type: Fn.notification, + We.publish({ + type: fn.notification, payload: { type: "error", message: "Permission denied for audio track. Please allow access to your device." } - }), ze.publish({ - type: Fn.queryPermission + }), We.publish({ + type: fn.queryPermission }); return; } - c != null && c.originalTrack || (await Yl("audio"), c = fn(He.AUDIO)), c != null && c.originalTrack && st.getState().updateLocalTrack(He.AUDIO, { + l != null && l.originalTrack || (await Xl("audio"), l = gn(He.AUDIO)), l != null && l.originalTrack && rt.getState().updateLocalTrack(He.AUDIO, { muted: 0 }); -}, cE = () => { +}, EE = () => { var s; - ((s = fn(He.AUDIO)) == null ? void 0 : s.muted) ? lE() : cv(); -}, dv = (c = mR.USER) => { + ((s = gn(He.AUDIO)) == null ? void 0 : s.muted) ? o6() : uv(); +}, hv = (l = E6.USER) => { var u; - const s = (((u = fn(He.VIDEO)) == null ? void 0 : u.muted) || 0) | c; - st.getState().updateLocalTrack(He.VIDEO, { + const s = (((u = gn(He.VIDEO)) == null ? void 0 : u.muted) || 0) | l; + rt.getState().updateLocalTrack(He.VIDEO, { muted: s }); -}, dE = async (c = mR.USER) => { - let s = fn(He.VIDEO); - const u = st.getState().permissions, p = K.getState().isMobileSDK(); - if (!u.video && u.initialized && !p) { - ze.publish({ - type: Fn.notification, +}, s6 = async (l = E6.USER) => { + let s = gn(He.VIDEO); + const u = rt.getState().permissions, m = X.getState().isMobileSDK(); + if (!u.video && u.initialized && !m) { + We.publish({ + type: fn.notification, payload: { type: "error", message: "Permission denied for video track. Please allow access to your device." } - }), ze.publish({ - type: Fn.queryPermission + }), We.publish({ + type: fn.queryPermission }); return; } - if (s != null && s.originalTrack || (await Yl(He.VIDEO), s = fn(He.VIDEO)), !(s != null && s.originalTrack)) + if (s != null && s.originalTrack || (await Xl(He.VIDEO), s = gn(He.VIDEO)), !(s != null && s.originalTrack)) return; - const g = s.muted & ~c; - st.getState().updateLocalTrack(He.VIDEO, { + const g = s.muted & ~l; + rt.getState().updateLocalTrack(He.VIDEO, { muted: g }); -}, uE = () => { +}, UE = () => { var s; - ((s = fn(He.VIDEO)) == null ? void 0 : s.muted) ? dE() : dv(); + ((s = gn(He.VIDEO)) == null ? void 0 : s.muted) ? s6() : hv(); }; -st.subscribe( - (c) => { +rt.subscribe( + (l) => { var s; - return (s = c.tracks.find((u) => u.mediaType === He.AUDIO && u.local)) == null ? void 0 : s.muted; + return (s = l.tracks.find((u) => u.mediaType === He.AUDIO && u.local)) == null ? void 0 : s.muted; }, - (c, s) => { - var p; - const u = (p = fn(He.AUDIO)) == null ? void 0 : p.originalTrack; - c && u ? u.mute() : u && u.unmute(), typeof c == "number" && typeof s == "number" && ze.publish({ - type: c ? gt.MediaEventsListener.onAudioMuted : gt.MediaEventsListener.onAudioUnMuted + (l, s) => { + var m; + const u = (m = gn(He.AUDIO)) == null ? void 0 : m.originalTrack; + l && u ? u.mute() : u && u.unmute(), typeof l == "number" && typeof s == "number" && We.publish({ + type: l ? lt.MediaEventsListener.onAudioMuted : lt.MediaEventsListener.onAudioUnMuted }); } ); -st.subscribe( - (c) => { +rt.subscribe( + (l) => { var s; - return (s = c.tracks.find((u) => u.mediaType === He.VIDEO && u.local)) == null ? void 0 : s.muted; + return (s = l.tracks.find((u) => u.mediaType === He.VIDEO && u.local)) == null ? void 0 : s.muted; }, - (c, s) => { - var p; - const u = (p = fn(He.VIDEO)) == null ? void 0 : p.originalTrack; - c && u ? u.mute() : u && u.unmute(), typeof c == "number" && typeof s == "number" && ze.publish({ - type: c ? gt.MediaEventsListener.onVideoPaused : gt.MediaEventsListener.onVideoResumed + (l, s) => { + var m; + const u = (m = gn(He.VIDEO)) == null ? void 0 : m.originalTrack; + l && u ? u.mute() : u && u.unmute(), typeof l == "number" && typeof s == "number" && We.publish({ + type: l ? lt.MediaEventsListener.onVideoPaused : lt.MediaEventsListener.onVideoResumed }); } ); -st.subscribe( - (c) => { +rt.subscribe( + (l) => { var s; - return (s = c.tracks.find((u) => u.mediaType === He.SCREENSHARE && u.local)) == null ? void 0 : s.muted; + return (s = l.tracks.find((u) => u.mediaType === He.SCREENSHARE && u.local)) == null ? void 0 : s.muted; }, - (c) => { + (l) => { var u; - const s = (u = fn(He.SCREENSHARE)) == null ? void 0 : u.originalTrack; - c && s && s.mute(); + const s = (u = gn(He.SCREENSHARE)) == null ? void 0 : u.originalTrack; + l && s && s.mute(); } ); -st.subscribe( - (c) => { +rt.subscribe( + (l) => { var s; - return (s = c.tracks.find((u) => u.mediaType === He.AUDIO && u.local)) == null ? void 0 : s.originalTrack; + return (s = l.tracks.find((u) => u.mediaType === He.AUDIO && u.local)) == null ? void 0 : s.originalTrack; }, - (c) => { + (l) => { var s; - c && (((s = fn(He.AUDIO)) == null ? void 0 : s.muted) ? c.mute() : c.unmute()); + l && (((s = gn(He.AUDIO)) == null ? void 0 : s.muted) ? l.mute() : l.unmute()); } ); -st.subscribe( - (c) => { +rt.subscribe( + (l) => { var s; - return (s = c.tracks.find((u) => u.mediaType === He.VIDEO && u.local)) == null ? void 0 : s.originalTrack; + return (s = l.tracks.find((u) => u.mediaType === He.VIDEO && u.local)) == null ? void 0 : s.originalTrack; }, - (c) => { + (l) => { var s; - c && (((s = fn(He.VIDEO)) == null ? void 0 : s.muted) ? c.mute() : c.unmute()); + l && (((s = gn(He.VIDEO)) == null ? void 0 : s.muted) ? l.mute() : l.unmute()); } ); -st.subscribe( - (c) => { +rt.subscribe( + (l) => { var s; - return (s = c.tracks.find((u) => u.mediaType === He.AUDIO && u.local)) == null ? void 0 : s.originalTrack; + return (s = l.tracks.find((u) => u.mediaType === He.AUDIO && u.local)) == null ? void 0 : s.originalTrack; }, - (c, s) => { - const u = Ie.getState().conference; - if (u && (s && c ? u.replaceTrack(s, c) : c ? u.addTrack(c) : s && u.replaceTrack(s, null)), c) { - const p = c.getDeviceId(); - _T( - K, + (l, s) => { + const u = Je.getState().conference; + if (u && (s && l ? u.replaceTrack(s, l) : l ? u.addTrack(l) : s && u.replaceTrack(s, null)), l) { + const m = l.getDeviceId(); + AT( + X, (g) => g.audioInputDevices.length > 0 ).then(() => { - const S = K.getState().audioInputDevices.find((U) => U.deviceId === p); - au(S, !0); + const S = X.getState().audioInputDevices.find((U) => U.deviceId === m); + ou(S, !0); }).catch(() => { - au(void 0, !0); + ou(void 0, !0); }); } } ); -st.subscribe( - (c) => { +rt.subscribe( + (l) => { var s; - return (s = c.tracks.find((u) => u.mediaType === He.VIDEO && u.local)) == null ? void 0 : s.originalTrack; + return (s = l.tracks.find((u) => u.mediaType === He.VIDEO && u.local)) == null ? void 0 : s.originalTrack; }, - (c, s) => { - const u = Ie.getState().conference; - if (u && (s && c ? u.replaceTrack(s, c) : c ? u.addTrack(c) : s && u.replaceTrack(s, null)), c) { - const p = c.getDeviceId(), g = K.getState().videoInputDevices.find((S) => S.deviceId === p); - wh(g, !0); + (l, s) => { + const u = Je.getState().conference; + if (u && (s && l ? u.replaceTrack(s, l) : l ? u.addTrack(l) : s && u.replaceTrack(s, null)), l) { + const m = l.getDeviceId(), g = X.getState().videoInputDevices.find((S) => S.deviceId === m); + Ah(g, !0); } } ); -st.subscribe( - (c) => { +rt.subscribe( + (l) => { var s; - return (s = c.tracks.find((u) => u.mediaType === He.SCREENSHARE && u.local)) == null ? void 0 : s.originalTrack; + return (s = l.tracks.find((u) => u.mediaType === He.SCREENSHARE && u.local)) == null ? void 0 : s.originalTrack; }, - (c, s) => { - const u = Ie.getState().conference; - u && (s && c ? u.replaceTrack(s, c).then(() => { + (l, s) => { + const u = Je.getState().conference; + u && (s && l ? u.replaceTrack(s, l).then(() => { s.removeAllListeners(), s.dispose(); - }) : c && u.addTrack(c)); + }) : l && u.addTrack(l)); } ); -st.subscribe( - (c) => c.tracks.filter((s) => s.mediaType === He.SCREENSHARE && !s.muted).length, +rt.subscribe( + (l) => l.tracks.filter((s) => s.mediaType === He.SCREENSHARE && !s.muted).length, () => { - const c = st.getState().tracks.filter((g) => g.mediaType === He.SCREENSHARE && !g.muted), s = We.getState().virtualParticipants.filter((g) => g.type === "screen-share"), u = eR( - c, + const l = rt.getState().tracks.filter((g) => g.mediaType === He.SCREENSHARE && !g.muted), s = ze.getState().virtualParticipants.filter((g) => g.type === "screen-share"), u = i6( + l, s, (g) => g.pid ); - eR( + i6( s, - c, + l, (g) => g.pid ).forEach((g) => { - Xy(g.pid); + R4(g.pid); }), u.forEach((g) => { - g.originalTrack && Yy(g.originalTrack); + g.originalTrack && S4(g.originalTrack); }); } ); -st.subscribe( - (c) => c.permissions, - (c, s) => { - var p; - const u = Ie.getState().conferenceStatus; +rt.subscribe( + (l) => l.permissions, + (l, s) => { + var m; + const u = Je.getState().conferenceStatus; if (!(u !== "joined" && u !== "restored")) { - if (c.audio === !1 && s.audio === !0) { - ze.publish({ - type: Fn.notification, + if (l.audio === !1 && s.audio === !0) { + We.publish({ + type: fn.notification, payload: { type: "error", message: "Permission denied for audio track. Please allow access to your device." } - }), cv(); - const g = (p = fn(He.AUDIO)) == null ? void 0 : p.originalTrack; + }), uv(); + const g = (m = gn(He.AUDIO)) == null ? void 0 : m.originalTrack; g && g.dispose().catch(() => { }); } - c.video === !1 && s.video === !0 && (ze.publish({ - type: Fn.notification, + l.video === !1 && s.video === !0 && (We.publish({ + type: fn.notification, payload: { type: "error", message: "Permission denied for video track. Please allow access to your device." } - }), dv()); + }), hv()); } } ); -st.subscribe( - (c) => c.permissions.audio || c.permissions.video, - (c) => { - c && CE(); +rt.subscribe( + (l) => l.permissions.audio || l.permissions.video, + (l) => { + l && BE(); } ); -st.subscribe( - (c) => c.tracks.filter((s) => s.mediaType === He.AUDIO && !s.local).map((s) => ({ +rt.subscribe( + (l) => l.tracks.filter((s) => s.mediaType === He.AUDIO && !s.local).map((s) => ({ muted: s.muted, pid: s.pid })), - (c, s) => { + (l, s) => { s.forEach((u) => { - const p = c.find((g) => g.pid === u.pid); - p && p.muted !== u.muted && Ko( - p.muted ? gt.ParticipantEventsListner.onParticipantAudioMuted : gt.ParticipantEventsListner.onParticipantAudioUnmuted, - p.pid + const m = l.find((g) => g.pid === u.pid); + m && m.muted !== u.muted && Er( + m.muted ? lt.ParticipantEventsListner.onParticipantAudioMuted : lt.ParticipantEventsListner.onParticipantAudioUnmuted, + m.pid ); }); }, { - equalityFn: fR + equalityFn: T6 } ); -st.subscribe( - (c) => c.tracks.filter((s) => s.mediaType === He.VIDEO && !s.local).map((s) => ({ +rt.subscribe( + (l) => l.tracks.filter((s) => s.mediaType === He.VIDEO && !s.local).map((s) => ({ muted: s.muted, pid: s.pid })), - (c, s) => { + (l, s) => { s.forEach((u) => { - const p = c.find((g) => g.pid === u.pid); - p && p.muted !== u.muted && Ko( - p.muted ? gt.ParticipantEventsListner.onParticipantVideoPaused : gt.ParticipantEventsListner.onParticipantVideoResumed, - p.pid + const m = l.find((g) => g.pid === u.pid); + m && m.muted !== u.muted && Er( + m.muted ? lt.ParticipantEventsListner.onParticipantVideoPaused : lt.ParticipantEventsListner.onParticipantVideoResumed, + m.pid ); }); }, { - equalityFn: fR + equalityFn: T6 } ); -function G3(c) { - if (LT(c), c.layout && ru(c.layout), typeof c.internalSettings == "string") { - const s = G5( - c.internalSettings +function i5(l) { + if (sy(l), l.layout && su(l.layout), typeof l.internalSettings == "string") { + const s = tE( + l.internalSettings ); if (!(s != null && s.data)) return; - const u = /* @__PURE__ */ sv( - $5, + const u = /* @__PURE__ */ lv( + oE, s.data ); - u.success ? (We.getState().updateLocalParticipant({ - name: u.output.user.name, - avatar: u.output.user.avatar, - uid: u.output.user.uid - }), et.setState({ - sessionId: u.output.sessionId - }), Wn.setState({ - jwt: u.output.callToken, - connectionConfig: u.output.settings.connectionConfig - })) : console.error("Invalid internal setting data:", u.issues); - } - c.devSessionId && et.setState({ - sessionId: c.devSessionId - }), c.initialCameraFacing && K.setState({ - cameraFacing: c.initialCameraFacing === iv.REAR ? pd.ENVIRONMENT : pd.USER - }), c.displayName && We.getState().updateLocalParticipant({ - name: c.displayName, + if (u.success) { + const m = Xe.getState().displayName; + ze.getState().updateLocalParticipant({ + name: m || u.output.user.name, + avatar: m ? void 0 : u.output.user.avatar, + uid: u.output.user.uid + }), Xe.setState({ + sessionId: u.output.sessionId + }), Wn.setState({ + jwt: u.output.callToken, + connectionConfig: u.output.settings.connectionConfig + }); + } else + console.error("Invalid internal setting data:", u.issues); + } + l.devSessionId && Xe.setState({ + sessionId: l.devSessionId + }), l.initialCameraFacing && X.setState({ + cameraFacing: l.initialCameraFacing === av.REAR ? gd.ENVIRONMENT : gd.USER + }), l.displayName && ze.getState().updateLocalParticipant({ + name: l.displayName, avatar: void 0 - }), typeof c.startAudioMuted == "boolean" && st.getState().updateLocalTrack(He.AUDIO, { - muted: c.startAudioMuted ? 1 : 0 - }), typeof c.startVideoPaused == "boolean" && st.getState().updateLocalTrack(He.VIDEO, { - muted: c.startVideoPaused ? mR.USER : 0 - }), typeof c.enableNoiseReduction == "boolean" && K.setState({ - enableNoiseReduction: c.enableNoiseReduction + }), typeof l.startAudioMuted == "boolean" && rt.getState().updateLocalTrack(He.AUDIO, { + muted: l.startAudioMuted ? 1 : 0 + }), typeof l.startVideoPaused == "boolean" && rt.getState().updateLocalTrack(He.VIDEO, { + muted: l.startVideoPaused ? E6.USER : 0 + }), typeof l.enableNoiseReduction == "boolean" && X.setState({ + enableNoiseReduction: l.enableNoiseReduction }); } -const Y3 = { +const a5 = { audioModeMenuVisible: !1, audioModes: [], audioInputDevices: [], audioOutputDevices: [], videoInputDevices: [], - cameraFacing: pd.USER, + cameraFacing: gd.USER, isPIPLayoutEnabled: !1, layout: pa.TILE, sidebarLayoutSetProgrammatically: !1, @@ -3694,7 +3841,7 @@ const Y3 = { desktopSharingFrameRate: 5, chatButtonUnreadCount: 0, enableNoiseReduction: !0, - sdkPlatform: NT.WEB, + sdkPlatform: xT.WEB, isMobileBrowser: !1, visibleParticipants: { startIndex: 0, @@ -3704,17 +3851,17 @@ const Y3 = { startIndex: 0, endIndex: 0 } -}, K = fd()( - su( - yT( - lu(Y3, (c, s) => ({ +}, X = vd()( + cu( + DT( + du(a5, (l, s) => ({ addSubscriptions: (u) => { - K.setState((p) => ({ - subscriptions: [...p.subscriptions, ...u] + X.setState((m) => ({ + subscriptions: [...m.subscriptions, ...u] })); }, - reset: () => c((u) => ({ - ...Y3, + reset: () => l((u) => ({ + ...a5, // Preserve persisted properties audioInputDevice: u.audioInputDevice, audioOutputDevice: u.audioOutputDevice, @@ -3722,229 +3869,229 @@ const Y3 = { enableNoiseReduction: u.enableNoiseReduction, isMobileBrowser: u.isMobileBrowser })), - toggleMoreMenuVisible: () => c((u) => ({ + toggleMoreMenuVisible: () => l((u) => ({ moreMenuVisible: !u.moreMenuVisible })), - toggleParticipantListVisible: () => c((u) => ({ + toggleParticipantListVisible: () => l((u) => ({ participantListVisible: !u.participantListVisible })), - incrementConnectionRetryCount: () => c((u) => ({ + incrementConnectionRetryCount: () => l((u) => ({ connectionRetryCount: u.connectionRetryCount + 1 })), isMobileSDK: () => s().sdkPlatform !== "web", isMobile: () => { - const u = s().sdkPlatform !== "web", p = s().isMobileBrowser; - return u || p; + const u = s().sdkPlatform !== "web", m = s().isMobileBrowser; + return u || m; }, clearIdealTimeoutTimer: () => { const u = s().idealTimeoutTimer; - u && (clearTimeout(u), c({ + u && (clearTimeout(u), l({ idealTimeoutTimer: void 0, idleTimeoutModalVisible: !1 })); }, restartIdealTimeoutTimer: () => { - if (K.getState().clearIdealTimeoutTimer(), et.getState().iAmRecorder || We.getState().participants.length > 0 || !sE()) + if (X.getState().clearIdealTimeoutTimer(), Xe.getState().iAmRecorder || ze.getState().participants.length > 0 || !RE() || Je.getState().isStreaming) return; - const S = et.getState().idleTimeoutPeriodBeforePrompt, U = setTimeout(() => { - c({ + const S = Xe.getState().idleTimeoutPeriodBeforePrompt, U = setTimeout(() => { + l({ idleTimeoutModalVisible: !0 }); }, S); - c({ idealTimeoutTimer: U }); + l({ idealTimeoutTimer: U }); } })), { name: "base-store", - partialize: (c) => ({ - audioInputDevice: c.audioInputDevice, - audioOutputDevice: c.audioOutputDevice, - videoInputDevice: c.videoInputDevice, - enableNoiseReduction: c.enableNoiseReduction + partialize: (l) => ({ + audioInputDevice: l.audioInputDevice, + audioOutputDevice: l.audioOutputDevice, + videoInputDevice: l.videoInputDevice, + enableNoiseReduction: l.enableNoiseReduction }) } ) ) -), hE = K.getState().toggleParticipantListVisible, mE = () => K.setState({ participantListVisible: !1 }), $T = () => K.setState({ participantListVisible: !0 }), ey = () => K.setState((c) => ({ - participantListVisible: !c.participantListVisible +), TE = X.getState().toggleParticipantListVisible, yE = () => X.setState({ participantListVisible: !1 }), Uy = () => X.setState({ participantListVisible: !0 }), Ty = () => X.setState((l) => ({ + participantListVisible: !l.participantListVisible })); -K.getState().toggleMoreMenuVisible; -const ru = (c, s = !1) => { - c !== pa.SIDEBAR && We.setState({ pinnedParticipant: void 0 }), K.setState({ layout: c, sidebarLayoutSetProgrammatically: s }); -}, UR = (c = "audio") => { - K.setState({ +X.getState().toggleMoreMenuVisible; +const su = (l, s = !1) => { + l !== pa.SIDEBAR && ze.setState({ pinnedParticipant: void 0 }), X.setState({ layout: l, sidebarLayoutSetProgrammatically: s }); +}, F6 = (l = "audio") => { + X.setState({ settingsDialogVisible: !0, - settingsDialogTab: c + settingsDialogTab: l }); -}, ty = () => { - K.setState({ settingsDialogVisible: !1 }); -}, X3 = () => { - K.setState((c) => ({ - settingsDialogVisible: !c.settingsDialogVisible +}, yy = () => { + X.setState({ settingsDialogVisible: !1 }); +}, r5 = () => { + X.setState((l) => ({ + settingsDialogVisible: !l.settingsDialogVisible })); -}, pE = () => { - K.setState({ +}, NE = () => { + X.setState({ virtualBackgroundDialogVisible: !0, participantListVisible: !1 }); -}, Jf = () => { - K.setState({ virtualBackgroundDialogVisible: !1 }); -}, ny = () => { - K.setState((c) => ({ - mirrorLocalVideo: !c.mirrorLocalVideo +}, Wf = () => { + X.setState({ virtualBackgroundDialogVisible: !1 }); +}, Ny = () => { + X.setState((l) => ({ + mirrorLocalVideo: !l.mirrorLocalVideo })); -}, iy = () => { - K.setState((c) => ({ - enableNoiseReduction: !c.enableNoiseReduction +}, by = () => { + X.setState((l) => ({ + enableNoiseReduction: !l.enableNoiseReduction })); -}, ay = (c) => { - K.setState({ chatButtonUnreadCount: c }); -}, ry = () => K.getState().layout; -function oy() { - const c = [], s = K.subscribe( +}, Vy = (l) => { + X.setState({ chatButtonUnreadCount: l }); +}, Cy = () => X.getState().layout; +function Fy() { + const l = [], s = X.subscribe( (b) => b.audioModes, (b) => { - if (ze.publish({ + if (We.publish({ payload: b, - type: q0.MediaEventsListener.onAudioModesChanged + type: eu.MediaEventsListener.onAudioModesChanged }), b.length > 0) { - const M = b.find((V) => V.selected) ?? b[0]; - K.setState({ - selectedAudioModeType: M.type + const k = b.find((V) => V.selected) ?? b[0]; + X.setState({ + selectedAudioModeType: k.type }); } } ); - c.push(s); - const u = K.subscribe( + l.push(s); + const u = X.subscribe( (b) => b.selectedAudioModeType, (b) => { - b && ze.publish({ + b && We.publish({ payload: b, - type: q0.MediaEventsListener.onAudioModeChanged + type: eu.MediaEventsListener.onAudioModeChanged }); } ); - c.push(u); - const p = K.subscribe( + l.push(u); + const m = X.subscribe( (b) => b.layout, (b) => { - ze.publish({ + We.publish({ payload: b, - type: gt.CallLayoutListener.onCallLayoutChanged + type: lt.CallLayoutListener.onCallLayoutChanged }); } ); - c.push(p); - const g = K.subscribe( + l.push(m); + const g = X.subscribe( (b) => b.participantListVisible, (b) => { - b ? ze.publish({ - type: q0.CallLayoutListener.onParticipantListVisible - }) : ze.publish({ - type: q0.CallLayoutListener.onParticipantListHidden + b ? We.publish({ + type: eu.CallLayoutListener.onParticipantListVisible + }) : We.publish({ + type: eu.CallLayoutListener.onParticipantListHidden }); } ); - c.push(g); - const S = K.subscribe( + l.push(g); + const S = X.subscribe( (b) => b.isPIPLayoutEnabled, (b) => { - b ? ze.publish({ - type: q0.CallLayoutListener.onPictureInPictureLayoutEnabled - }) : ze.publish({ - type: q0.CallLayoutListener.onPictureInPictureLayoutDisabled + b ? We.publish({ + type: eu.CallLayoutListener.onPictureInPictureLayoutEnabled + }) : We.publish({ + type: eu.CallLayoutListener.onPictureInPictureLayoutDisabled }); } ); - c.push(S); - const U = K.subscribe( + l.push(S); + const U = X.subscribe( (b) => b.cameraFacing, (b) => { var V; - ze.publish({ - payload: b === pd.USER ? iv.FRONT : iv.REAR, - type: q0.MediaEventsListener.onCameraFacingChanged + We.publish({ + payload: b === gd.USER ? av.FRONT : av.REAR, + type: eu.MediaEventsListener.onCameraFacingChanged }); - const M = (V = fn(He.VIDEO)) == null ? void 0 : V.originalTrack; - M && M.getCameraFacingMode() !== b && (K.getState().isMobileBrowser ? q5(null, b) : M._switchCamera()); + const k = (V = gn(He.VIDEO)) == null ? void 0 : V.originalTrack; + k && k.getCameraFacingMode() !== b && (X.getState().isMobileBrowser ? rE(null, b) : k._switchCamera()); } ); - c.push(U); - const Q = K.subscribe( + l.push(U); + const M = X.subscribe( (b) => b.audioInputDevices, (b) => { if (b.length > 0) { - const M = K.getState().audioInputDevice; - M ? b.some( - (A) => A.deviceId === M.deviceId && A.label === M.label - ) || au(_h(b)) : au( - _h(b), + const k = X.getState().audioInputDevice; + k ? b.some( + (A) => A.deviceId === k.deviceId && A.label === k.label + ) || ou(kh(b)) : ou( + kh(b), !0 ); } } ); - c.push(Q); - const T = K.subscribe( + l.push(M); + const T = X.subscribe( (b) => b.audioOutputDevices, (b) => { if (b.length > 0) { - const M = K.getState().audioOutputDevice; - M ? b.some( - (A) => A.deviceId === M.deviceId && A.label === M.label - ) || K.setState({ - audioOutputDevice: _h(b) - }) : K.setState({ - audioOutputDevice: _h(b) + const k = X.getState().audioOutputDevice; + k ? b.some( + (A) => A.deviceId === k.deviceId && A.label === k.label + ) || X.setState({ + audioOutputDevice: kh(b) + }) : X.setState({ + audioOutputDevice: kh(b) }); } } ); - c.push(T); - const F = K.subscribe( + l.push(T); + const F = X.subscribe( (b) => b.videoInputDevices, (b) => { if (b.length > 0) { - const M = K.getState().videoInputDevice; - M ? b.some( - (A) => A.deviceId === M.deviceId && A.label === M.label - ) || wh(_h(b)) : wh( - _h(b), + const k = X.getState().videoInputDevice; + k ? b.some( + (A) => A.deviceId === k.deviceId && A.label === k.label + ) || Ah(kh(b)) : Ah( + kh(b), !0 ); } } ); - c.push(F), K.subscribe( + l.push(F), X.subscribe( (b) => b.previewVideoTrack, - (b, M) => { - M && M.disposed !== !0 && M.dispose(); + (b, k) => { + k && k.disposed !== !0 && k.dispose(); } - ), K.getState().addSubscriptions(c); + ), X.getState().addSubscriptions(l); } -oy(); -const K3 = 3e3, JS = { +Fy(); +const o5 = 1e4, IS = { connection: void 0, connectionStatus: "initial", error: void 0, timeEstablished: void 0 -}, Wn = fd()( - su( - lu(JS, (c) => ({ - connectionEstablished: (s) => c({ +}, Wn = vd()( + cu( + du(IS, (l) => ({ + connectionEstablished: (s) => l({ connection: s, connectionStatus: "connected", error: void 0, timeEstablished: Date.now() }), - connectionFailed: (s) => c({ + connectionFailed: (s) => l({ connectionStatus: "error", error: s, timeEstablished: void 0 }), connectionWillConnect: (s) => { - typeof (window == null ? void 0 : window.APP) < "u" && (window.APP.connection = s), et.getState().iAmRecorder && s.addFeature("http://jitsi.org/protocol/jibri"), c({ + typeof (window == null ? void 0 : window.APP) < "u" && (window.APP.connection = s), Xe.getState().iAmRecorder && s.addFeature("http://jitsi.org/protocol/jibri"), l({ connection: s, connectionStatus: "connecting", error: void 0, @@ -3953,414 +4100,465 @@ const K3 = 3e3, JS = { }, disconnect: async () => { const s = Wn.getState().connection, u = Wn.getState().connectionStatus; - s && u !== "disconnecting" && (c({ + s && u !== "disconnecting" && (l({ connectionStatus: "disconnecting" - }), ze.publish({ - type: Fn.connectionWillClose - }), ze.stopEmitting(), await Xo(s.disconnect()), ze.publish( + }), We.publish({ + type: fn.connectionWillClose + }), We.stopEmitting(), await fo(s.disconnect()), We.publish( { - type: gt.SessionStatusListener.onConnectionClosed + type: lt.SessionStatusListener.onConnectionClosed }, !0 - ), c(JS)); + ), l(IS)); }, - reset: () => c(JS) + reset: () => l(IS) })) ) ); -function sy() { - const { connectionStatus: c } = Wn.getState(); - return c === "connected" ? Promise.resolve() : new Promise((s, u) => { - const p = setTimeout(() => { +function _y() { + const { connectionStatus: l } = Wn.getState(); + return l === "connected" ? Promise.resolve() : new Promise((s, u) => { + const m = setTimeout(() => { g(), u( new Error( - `Connection timed out after ${K3 / 1e3} seconds` + `Connection timed out after ${o5 / 1e3} seconds` ) ); - }, K3), g = Wn.subscribe( + }, o5), g = Wn.subscribe( (S) => S.connectionStatus, (S) => { - S === "connected" ? (clearTimeout(p), g(), s()) : S === "error" && (clearTimeout(p), g(), u(Wn.getState().error)); + S === "connected" ? (clearTimeout(m), g(), s()) : S === "error" && (clearTimeout(m), g(), u(Wn.getState().error)); } ); }); } -const ly = () => { - const c = et( +const My = () => { + const l = Xe( (u) => u.hideToggleAudioButton - ), s = et( + ), s = Xe( (u) => u.enableCompanionMode ); - return c || s; -}, cy = () => { - const c = et( + return l || s; +}, ky = () => { + const l = Xe( (u) => u.hideToggleVideoButton - ), s = et((u) => u.sessionType); - return c || s !== Bh.VIDEO; -}, fE = () => { - const c = Ie((s) => s.conferenceStatus); - return c === "joined" || c === "restored"; -}, gE = () => { - const c = et( + ), s = Xe((u) => u.sessionType); + return l || s !== wh.VIDEO; +}, _6 = () => { + const l = Je((s) => s.conferenceStatus); + return l === "joined" || l === "restored"; +}, bE = () => { + const l = Xe( (S) => S.hideScreenSharingButton - ), s = K((S) => S.sdkPlatform === "android"), u = K( + ), s = X((S) => S.sdkPlatform === "android"), u = X( (S) => S.isDesktopSharingEnabled - ), p = fE(), g = K.getState().isMobileSDK(); - return c || g || !p || (s ? !1 : !u); -}, dy = () => et((s) => s.hideChatButton), Pf = (c) => We( + ), m = _6(), g = X.getState().isMobileSDK(); + return l || g || !m || (s ? !1 : !u); +}, Qy = () => Xe((s) => s.hideChatButton), Hh = (l) => ze( (s) => s.localParticipant -), uy = () => { - const c = KT(He.SCREENSHARE); - return (c == null ? void 0 : c.originalTrack) && !c.muted; -}, cu = (c, s) => { - const u = Pf(), p = ER( +), Dy = () => { + const l = Ry(He.SCREENSHARE); + return (l == null ? void 0 : l.originalTrack) && !l.muted; +}, uu = (l, s) => { + const u = Hh(), m = C6( s ?? u.pid, - c + l ); - return c === He.VIDEO && (p == null ? void 0 : p.streamingStatus) !== "active" ? !0 : p ? !!p.muted : !0; -}, vE = () => { - const c = We( + return l === He.VIDEO && (m == null ? void 0 : m.streamingStatus) !== "active" ? !0 : m ? !!m.muted : !0; +}, VE = () => { + const l = ze( (S) => S.pinnedParticipant - ), s = We((S) => S.participants), u = We( + ), s = ze((S) => S.participants), u = ze( (S) => S.virtualParticipants - ), p = We((S) => S.dominantSpeakers), g = Pf(); - return SR({ - pinnedParticipant: c, + ), m = ze((S) => S.dominantSpeakers), g = Hh(); + return b6({ + pinnedParticipant: l, participants: s, virtualParticipants: u, - dominantSpeakers: p, + dominantSpeakers: m, localParticipant: g }); -}, q3 = () => { - const c = We.getState(); - return SR({ - pinnedParticipant: c.pinnedParticipant, - participants: c.participants, - virtualParticipants: c.virtualParticipants, - dominantSpeakers: c.dominantSpeakers, - localParticipant: c.localParticipant +}, l6 = () => { + const l = ze.getState(); + return b6({ + pinnedParticipant: l.pinnedParticipant, + participants: l.participants, + virtualParticipants: l.virtualParticipants, + dominantSpeakers: l.dominantSpeakers, + localParticipant: l.localParticipant }); -}, hy = () => { - const c = Wn((U) => U.connectionStatus), s = Ie((U) => U.conferenceStatus), u = Ie((U) => U.p2p), [p, g] = re.useState(!0); +}, xy = () => { + const l = Wn((U) => U.connectionStatus), s = Je((U) => U.conferenceStatus), u = Je((U) => U.p2p), [m, g] = re.useState(!0); re.useEffect(() => { if (typeof window > "u") return; - const U = new AbortController(), { signal: Q } = U; - return window.addEventListener("online", () => g(!0), { signal: Q }), window.addEventListener("offline", () => g(!1), { signal: Q }), () => U.abort(); + const U = new AbortController(), { signal: M } = U; + return window.addEventListener("online", () => g(!0), { signal: M }), window.addEventListener("offline", () => g(!1), { signal: M }), () => U.abort(); }, []); - const S = c === "connected" && s === "interrupted"; - return u && S && p ? !1 : S; -}, my = () => { - const c = et( - (p) => p.hideRecordingButton - ), s = fE(), u = Pf(); - return c || !s || u.role !== "moderator"; -}, py = () => { - const c = et( - (p) => p.hideVirtualBackgroundButton - ), s = fn(He.VIDEO), u = K((p) => p.isBlurSupported); - return c || !(s != null && s.originalTrack) || !u; -}, uv = () => K((s) => s.layout), fy = () => { - const c = et( + const S = l === "connected" && s === "interrupted"; + return u && S && m ? !1 : S; +}, Zy = () => { + const l = Xe( + (g) => g.hideRecordingButton + ), s = Je((g) => g.isStreaming), u = _6(), m = Hh(); + return s || l || !u || m.role !== "moderator"; +}, Oy = () => { + const l = Xe( + (g) => g.hideStreamingButton + ), s = Je((g) => g.isRecording), u = _6(), m = Hh(); + return s || l || !u || m.role !== "moderator"; +}, By = () => { + const l = Xe( + (m) => m.hideVirtualBackgroundButton + ), s = gn(He.VIDEO), u = X((m) => m.isBlurSupported); + return l || !(s != null && s.originalTrack) || !u; +}, mv = () => X((s) => s.layout), wy = () => { + const l = Xe( (g) => g.enableParticipantContextMenu - ), s = K((g) => g.isPIPLayoutEnabled); - return uv() === pa.SPOTLIGHT || s ? !1 : c; -}, hv = (c, s = "human") => { - const u = Pf(), p = Ie( - (g) => g.raiseHandMap.get(c ?? u.pid) + ), s = X((g) => g.isPIPLayoutEnabled); + return mv() === pa.SPOTLIGHT || s ? !1 : l; +}, pv = (l, s = "human") => { + const u = Hh(), m = Je( + (g) => g.raiseHandMap.get(l ?? u.pid) ); - return s === "human" ? p : void 0; -}, SE = (c, s) => { - const u = We( - (p) => p.pinnedParticipant + return s === "human" ? m : void 0; +}, CE = (l, s) => { + const u = ze( + (m) => m.pinnedParticipant ); - return !!(u && u.pid === c && u.type === s); -}, gy = () => { - const c = Wh(), s = Ie((p) => p.raiseHandMap); - return c.sort((p, g) => { - const S = s.get(p.pid), U = s.get(g.pid); - return S && !U ? -1 : !S && U ? 1 : p.name.localeCompare(g.name); + return !!(u && u.pid === l && u.type === s); +}, Ay = () => { + const l = Wh(), s = Je((m) => m.raiseHandMap); + return l.sort((m, g) => { + const S = s.get(m.pid), U = s.get(g.pid); + return S && !U ? -1 : !S && U ? 1 : m.name.localeCompare(g.name); }); -}, vy = () => { - const c = Ie((u) => u.conferenceError), s = Wn((u) => u.error); - if (c) - return c; +}, Jy = () => { + const l = Je((u) => u.conferenceError), s = Wn((u) => u.error); + if (l) + return l; if (s) return s.message || s.name; -}, Sy = () => { - const c = K((u) => u.isMobileBrowser), s = fn(He.VIDEO); - return c && (s == null ? void 0 : s.originalTrack); -}, Ry = () => { - const c = st((p) => p.permissions.audio), s = K((p) => p.audioInputDevices); - return c && s.length > 0; -}, Ey = () => { - const c = st((p) => p.permissions.video), s = K((p) => p.videoInputDevices); - return c && s.length > 0; -}, TR = () => { - const c = K((u) => u.mirrorLocalVideo); - return K((u) => u.cameraFacing) === "user" && c; +}, Ly = () => { + const l = X((u) => u.isMobileBrowser), s = gn(He.VIDEO); + return l && (s == null ? void 0 : s.originalTrack); +}, Iy = () => { + const l = rt((m) => m.permissions.audio), s = X((m) => m.audioInputDevices); + return l && s.length > 0; +}, Wy = () => { + const l = rt((m) => m.permissions.video), s = X((m) => m.videoInputDevices); + return l && s.length > 0; +}, M6 = () => { + const l = X((u) => u.mirrorLocalVideo); + return X((u) => u.cameraFacing) === "user" && l; }; -function RE() { - K.getState().reset(), Ie.getState().reset(), et.getState().reset(), Wn.getState().reset(), We.getState().reset(), Zh.getState().reset(), st.getState().reset(); +function FE() { + X.getState().reset(), Je.getState().reset(), Xe.getState().reset(), Wn.getState().reset(), ze.getState().reset(), au.getState().reset(), rt.getState().reset(); } -const EE = () => { - K.setState((c) => ({ - cameraFacing: c.cameraFacing === pd.USER ? pd.ENVIRONMENT : pd.USER +const _E = () => { + X.setState((l) => ({ + cameraFacing: l.cameraFacing === gd.USER ? gd.ENVIRONMENT : gd.USER })); }; -function Uy(c) { - return c <= Qh.LOW ? Qh.LOW : c <= Qh.STANDARD ? Qh.STANDARD : Qh.HIGH; +function Hy(l) { + return l <= xh.LOW ? xh.LOW : l <= xh.STANDARD ? xh.STANDARD : xh.HIGH; } -function Ty() { - var U, Q, T; - const { sessionType: c, unstable_headlessMode: s } = et.getState(); - if (s && c === Bh.VOICE) { - (U = Ie.getState().conference) == null || U.setReceiverConstraints({ +let Zf = !1; +function ME() { + var u, m; + if (!Xe.getState().enableIOSPictureInPicture) + return; + const l = l6(), s = Sy( + l.pid, + uy(l) + ); + if (!(!s || s.local)) + return (m = (u = s.originalTrack) == null ? void 0 : u.getSourceName) == null ? void 0 : m.call(u); +} +function zy() { + var T, F, b, k; + const { sessionType: l, unstable_headlessMode: s } = Xe.getState(); + if (s && l === wh.VOICE) { + (T = Je.getState().conference) == null || T.setReceiverConstraints({ lastN: 0 }); return; } - if (K.getState().isMobileSDK()) + const { appState: u, isPIPLayoutEnabled: m } = X.getState(); + if (u === "background" && !m) { + const V = Je.getState().conference; + if (V) { + const A = Xe.getState().enableIOSPictureInPicture, ve = ME(); + V.setReceiverConstraints({ + lastN: A ? 1 : 0, + onStageSources: ve ? [ve] : [] + }), Zf = !0; + } return; - const p = { + } + if (X.getState().isMobileSDK()) { + Zf && ((F = Je.getState().conference) == null || F.setReceiverConstraints({ + lastN: -1, + onStageSources: [] + }), Zf = !1); + return; + } + const S = { constraints: {}, - defaultConstraints: { maxHeight: Qh.NONE }, + defaultConstraints: { maxHeight: xh.NONE }, lastN: -1, onStageSources: [], selectedSources: [] - }, g = ry(); - if (g === "SPOTLIGHT") { - const F = (Q = q3().sources) == null ? void 0 : Q.get("video"); - F && Array.from(F.keys()).forEach((b) => { - p.constraints[b] = { + }, U = Cy(); + if (U === "SPOTLIGHT") { + const V = (b = l6().sources) == null ? void 0 : b.get("video"); + V && Array.from(V.keys()).forEach((A) => { + S.constraints[A] = { maxHeight: 720 - }, p.onStageSources.push(b); + }, S.onStageSources.push(A); }); - } else if (g === "TILE") { - const F = Uy( - K.getState().tileDimensions.tileHeight - ), b = K.getState().visibleParticipants; - tR().slice( - b.startIndex, - b.endIndex + 1 - ).forEach((V) => { - var de; - const A = V.isLocal, ge = (de = V.sources) == null ? void 0 : de.get("video"); - !A && ge && Array.from(ge.keys()).forEach((Me) => { - p.constraints[Me] = { - maxHeight: F + } else if (U === "TILE") { + const V = Hy( + X.getState().tileDimensions.tileHeight + ), A = X.getState().visibleParticipants; + a6().slice( + A.startIndex, + A.endIndex + 1 + ).forEach((me) => { + var ee; + const Qe = me.isLocal, ne = (ee = me.sources) == null ? void 0 : ee.get("video"); + !Qe && ne && Array.from(ne.keys()).forEach((ge) => { + S.constraints[ge] = { + maxHeight: V }; }); }); - } else if (g === "SIDEBAR") { - const { startIndex: F, endIndex: b } = K.getState().sidebarVisibleParticipants; - tR().slice( - F, - b - ).forEach((de) => { - var ee; - const Me = (ee = de.sources) == null ? void 0 : ee.get("video"); - Me && Array.from(Me.keys()).forEach((ae) => { - p.constraints[ae] = { + } else if (U === "SIDEBAR") { + const { startIndex: V, endIndex: A } = X.getState().sidebarVisibleParticipants; + a6().slice( + V, + A + ).forEach((ee) => { + var we; + const ge = (we = ee.sources) == null ? void 0 : we.get("video"); + ge && Array.from(ge.keys()).forEach((G) => { + S.constraints[G] = { maxHeight: 180 }; }); }); - const ge = (T = q3().sources) == null ? void 0 : T.get("video"); - ge && Array.from(ge.keys()).forEach((de) => { - p.constraints[de] = { + const ne = (k = l6().sources) == null ? void 0 : k.get("video"); + ne && Array.from(ne.keys()).forEach((ee) => { + S.constraints[ee] = { maxHeight: 720 - }, p.onStageSources.push(de); + }, S.onStageSources.push(ee); }); } - const S = Ie.getState().conference; - S && Object.keys(p.constraints).length > 0 && S.setReceiverConstraints(p); + const M = Je.getState().conference; + M && (Object.keys(S.constraints).length > 0 || // Even with no visible video sources, a pending background lastN: 0 + // must be undone (constraints.lastN is -1 here). + Zf) && (M.setReceiverConstraints(S), Zf = !1); } -const Ah = K5( - Ty, +const $l = aE( + zy, 200 ); -K.subscribe( - (c) => c.visibleParticipants, +X.subscribe( + (l) => l.visibleParticipants, () => { - Ah(); + $l(); } ); -K.subscribe( - (c) => c.sidebarVisibleParticipants, +X.subscribe( + (l) => l.sidebarVisibleParticipants, () => { - Ah(); + $l(); } ); -K.subscribe( - (c) => c.layout, +X.subscribe( + (l) => l.layout, () => { - Ah(); + $l(); } ); -We.subscribe( - (c) => SR(c).pid, +X.subscribe( + (l) => l.appState, + () => { + $l(); + } +); +X.subscribe( + (l) => l.isPIPLayoutEnabled, + () => { + $l(); + } +); +rt.subscribe( + () => X.getState().appState === "background" ? ME() : void 0, + () => { + $l(); + } +); +ze.subscribe( + // Keyed on ruid, not pid: a screen share is a virtual participant that + // reuses the sharer's pid, so pid alone misses camera <-> screen share + // switches — which do change the source being rendered. + (l) => b6(l).ruid, () => { - const c = K.getState().layout; - (c === "SPOTLIGHT" || c === "SIDEBAR") && Ah(); + const { appState: l, layout: s } = X.getState(); + (l === "background" || s === "SPOTLIGHT" || s === "SIDEBAR") && $l(); } ); -const yy = 1e4, Ny = 4e3, UE = 4e3; -let Lf = null, Wf = !1; -function mv(c) { - Ie.setState((s) => { +const jy = 1e4, Py = 4e3, kE = 4e3; +let Hf = null, jf = !1; +function fv(l) { + Je.setState((s) => { const u = new Map(s.remoteStatsTimestamps); - return c(u), { remoteStatsTimestamps: u }; + return l(u), { remoteStatsTimestamps: u }; }); } -function by(c) { - mv( - (s) => s.set(c, Date.now() + UE) +function Gy(l) { + fv( + (s) => s.set(l, Date.now() + kE) ); } -function Vy(c) { - mv((s) => s.delete(c)); +function Yy(l) { + fv((s) => s.delete(l)); } -function Cy() { - const c = Date.now() + UE; - mv((s) => { +function Xy() { + const l = Date.now() + kE; + fv((s) => { for (const u of s.keys()) - s.set(u, c); + s.set(u, l); }); } -function TE() { - const c = Ie.getState().conferenceStatus; - return c === "joined" || c === "restored"; +function QE() { + const l = Je.getState().conferenceStatus; + return l === "joined" || l === "restored"; } -function yE() { - if (!et.getState().isPeerCall) +function DE() { + if (!Xe.getState().isPeerCall) return !1; - const c = We.getState().participants; - if (c.length === 0) + const l = ze.getState().participants; + if (l.length === 0) return !1; - const s = Ie.getState().remoteStatsTimestamps, u = Date.now(); - return c.some((p) => { - const g = s.get(p.pid) ?? 0; - return u - g >= yy; + const s = Je.getState().remoteStatsTimestamps, u = Date.now(); + return l.some((m) => { + const g = s.get(m.pid) ?? 0; + return u - g >= jy; }); } -function Fy() { - Wf || !TE() || yE() && (Wf = !0, ze.publish({ - type: gt.SessionStatusListener.onRemoteConnectionLost +function Ky() { + jf || !QE() || DE() && (jf = !0, We.publish({ + type: lt.SessionStatusListener.onRemoteConnectionLost })); } -function _y(c) { - mv((s) => s.set(c, Date.now())), !(!Wf || !TE()) && (yE() || (Wf = !1, ze.publish({ - type: gt.SessionStatusListener.onRemoteConnectionRestored +function qy(l) { + fv((s) => s.set(l, Date.now())), !(!jf || !QE()) && (DE() || (jf = !1, We.publish({ + type: lt.SessionStatusListener.onRemoteConnectionRestored }))); } -function My() { - !et.getState().isPeerCall || Lf || (Lf = setInterval( - Fy, - Ny +function $y() { + !Xe.getState().isPeerCall || Hf || (Hf = setInterval( + Ky, + Py )); } -function LS() { - Lf && (clearInterval(Lf), Lf = null), Wf = !1; +function WS() { + Hf && (clearInterval(Hf), Hf = null), jf = !1; } -const ky = 0.2; -let Mh = !1; -class Qy { +const e4 = 0.2; +let Qh = !1; +class t4 { onConferenceJoined() { - Ie.setState({ + Je.setState({ conferenceJoined: !0, conferenceStatus: "joined", conferenceJoinedAt: Date.now() - }), ze.publish({ - type: gt.SessionStatusListener.onSessionJoined - }), ze.publish({ - type: Fn.onSessionJoined + }), We.publish({ + type: lt.SessionStatusListener.onSessionJoined + }), We.publish({ + type: fn.onSessionJoined }); } async onConferenceLeft() { - Mh = !1, LS(), Ie.setState({ + Qh = !1, WS(), Je.setState({ conferenceJoined: !1, conferenceStatus: "left" - }), ze.publish({ - type: gt.SessionStatusListener.onSessionLeft + }), We.publish({ + type: lt.SessionStatusListener.onSessionLeft }), await Wn.getState().disconnect(); } onTrackAdded(s) { - s.isLocal() || bR(s); + s.isLocal() || D6(s); } async onUserJoined(s, u) { - const p = u.getId(), g = u.getDisplayName(), S = u.getRole(); - u.isHidden() || (ze.publish({ - type: Fn.notification, + const m = u.getId(), g = u.getDisplayName(), S = u.getRole(); + u.isHidden() || (We.publish({ + type: fn.notification, payload: { type: "info", message: `${g} has joined the conference` } - }), We.getState().addParticipant({ + }), ze.getState().addParticipant({ name: g ?? "Unknown", - pid: p, - ruid: `${p}-human`, + pid: m, + ruid: `${m}-human`, role: S, isLocal: !1, sources: u.getSources(), type: "human" - }), by(p), My()); + }), Gy(m), $y()); } async onUserLeft(s, u) { if (u.isHidden()) return; - const p = u.getId(); - ze.publish({ - type: Fn.notification, + const m = u.getId(); + We.publish({ + type: fn.notification, payload: { type: "info", message: `${u.getDisplayName()} has left the conference` } - }), We.getState().removeParticipant(p), Vy(p), et.getState().isPeerCall && We.getState().participants.length === 0 && (LS(), ql()); + }), ze.getState().removeParticipant(m), Yy(m), Xe.getState().isPeerCall && ze.getState().participants.length === 0 && (WS(), ec()); } onTrackRemoved(s) { if (s.isLocal()) { - const u = xh(s), p = fn(u); - (p == null ? void 0 : p.originalTrack) === s && st.getState().updateLocalTrack(u, { + const u = Oh(s), m = gn(u); + (m == null ? void 0 : m.originalTrack) === s && rt.getState().updateLocalTrack(u, { originalTrack: void 0 }); } else - st.getState().removeTrack(s); - s.removeAllListeners(Ye.events.track.TRACK_MUTE_CHANGED), s.removeAllListeners(Ye.events.track.TRACK_VIDEOTYPE_CHANGED), s.removeAllListeners(Ye.events.track.NO_DATA_FROM_SOURCE), s.removeAllListeners( - Ye.events.track.TRACK_STREAMING_STATUS_CHANGED + rt.getState().removeTrack(s); + s.removeAllListeners(je.events.track.TRACK_MUTE_CHANGED), s.removeAllListeners(je.events.track.TRACK_VIDEOTYPE_CHANGED), s.removeAllListeners(je.events.track.NO_DATA_FROM_SOURCE), s.removeAllListeners( + je.events.track.TRACK_STREAMING_STATUS_CHANGED ); } onConferenceJoinInProgress() { } - onConferenceFailed(s, u, p) { - if (LS(), s === Ye.errors.conference.CONFERENCE_DESTROYED) { - ql({ forceLeave: !0 }); + onConferenceFailed(s, u, m) { + if (WS(), s === je.errors.conference.CONFERENCE_DESTROYED) { + ec({ forceLeave: !0 }); return; } - console.error("Conference failed:", s, u, p), Ie.setState({ + console.error("Conference failed:", s, u, m), Je.setState({ conferenceStatus: "error", conferenceJoined: !1, - conferenceError: (p == null ? void 0 : p.toString()) || "Unknown error" + conferenceError: (m == null ? void 0 : m.toString()) || "Unknown error" }); } onRecorderStateChanged(s) { if (s) { - const u = s.getID(), p = s.getError(), g = s.getMode(), S = s.getStatus(); - if (p === "unexpected-request") + const u = s.getID(), m = s.getError(), g = s.getMode(), S = s.getStatus(); + if (m === "unexpected-request") return; if (u) { const U = s.getInitiator(); - if (Ie.setState({ - recording: { - status: S, - mode: g, - error: p, - sessionId: u, - initiator: U - } + if (Je.setState({ + recording: { status: S, mode: g, error: m, sessionId: u, initiator: U } }), U) { - const Q = typeof U == "string" ? U : U.getId(), T = Ie.getState().conference, F = We.getState().localParticipant; - if (F.pid !== Q) + const M = typeof U == "string" ? U : U.getId(), T = Je.getState().conference, F = ze.getState().localParticipant; + if (F.pid !== M) return; T.sendCommandOnce( S === "off" ? "stopScreenRecording" : "START_SCREEN_RECORDING", @@ -4368,117 +4566,117 @@ class Qy { attributes: { recordId: u, ...F, - id: Q + id: M } } ); } - } else p && Ie.setState({ + } else m && Je.setState({ recording: { status: S, mode: g, - error: p + error: m } }); } } onConnectionEstablished() { - Mh = !1, Cy(), Ie.setState({ + Qh = !1, Xy(), Je.setState({ conferenceStatus: "joined" - }), setTimeout(Ah, 500); + }), setTimeout($l, 500); } onConnectionInterrupted() { - Mh = !1, Ie.setState({ + Qh = !1, Je.setState({ conferenceStatus: "interrupted" }); } onConnectionRestored() { - if (et.getState().isPeerCall && We.getState().participants.length === 1) { - Mh = !0; + if (Xe.getState().isPeerCall && ze.getState().participants.length === 1) { + Qh = !0; return; } - Ie.setState({ + Je.setState({ conferenceStatus: "restored" }); } onP2PStatus(s, u) { - Ie.setState({ + Je.setState({ p2p: u }); } onTrackMuteChanged(s, u) { if (s.isLocal() && u) { - st.getState().updateLocalTrack(xh(s), { + rt.getState().updateLocalTrack(Oh(s), { muted: s.isMuted() ? 1 : 0 }); - const p = u.getDisplayName(); - p && ze.publish({ - type: Fn.notification, + const m = u.getDisplayName(); + m && We.publish({ + type: fn.notification, payload: { type: "info", - message: `${p} has muted you.` + message: `${m} has muted you.` } }); } } onParticipantSourceUpdated(s) { - Ah(); + $l(); } onConferenceCreatedTimestamp(s) { - Ie.setState({ + Je.setState({ conferenceStartedAt: s }); } - onDominantSpeakerChanged(s, u, p) { - We.setState({ + onDominantSpeakerChanged(s, u, m) { + ze.setState({ dominantSpeakers: [s, ...u ?? []] - }), Ko( - gt.ParticipantEventsListner.onDominantSpeakerChanged, + }), Er( + lt.ParticipantEventsListner.onDominantSpeakerChanged, s ); - const g = We.getState().localParticipant; - s === g.pid && rv(); + const g = ze.getState().localParticipant; + s === g.pid && ov(); } onLocalStatsUpdated(s) { - const u = We.getState().localParticipant; - s.connectionQuality && Ie.setState((p) => { - const g = new Map(p.connectionQuality); + const u = ze.getState().localParticipant; + s.connectionQuality && Je.setState((m) => { + const g = new Map(m.connectionQuality); return g.set(u.pid, s.connectionQuality), { connectionQuality: g }; }); } onRemoteStatsUpdated(s, u) { - Mh && (Mh = !1, Ie.setState({ + Qh && (Qh = !1, Je.setState({ conferenceStatus: "restored" - })), _y(s), u.connectionQuality && Ie.setState((p) => { - const g = new Map(p.connectionQuality); + })), qy(s), u.connectionQuality && Je.setState((m) => { + const g = new Map(m.connectionQuality); return g.set(s, u.connectionQuality), { connectionQuality: g }; }); } - onParticipantPropertyChanged(s, u, p, g) { + onParticipantPropertyChanged(s, u, m, g) { const S = s.getId(); - S && u === "raisedHand" && (g ? Ie.getState().raiseHand(S, parseInt(g, 10)) : Ie.getState().lowerHand(S)); + S && u === "raisedHand" && (g ? Je.getState().raiseHand(S, parseInt(g, 10)) : Je.getState().lowerHand(S)); } onUserRoleChanged(s, u) { - if (typeof s == "string" && (u === Yg.MODERATOR || u === Yg.NONE)) { - We.getState().updateParticipant(s, { + if (typeof s == "string" && (u === Kg.MODERATOR || u === Kg.NONE)) { + ze.getState().updateParticipant(s, { role: u }); - const p = We.getState().localParticipant.pid; - u === Yg.MODERATOR && s === p && et.getState().autoStartRecording && setTimeout(() => { - lv(); + const m = ze.getState().localParticipant.pid; + u === Kg.MODERATOR && s === m && Xe.getState().autoStartRecording && setTimeout(() => { + dv(); }, 100); } } onTrackUnmuteRejected(s) { if (!s.isLocal()) return; - const u = xh(s); + const u = Oh(s); s.dispose().catch(() => { - }), st.getState().updateLocalTrack(u, { + }), rt.getState().updateLocalTrack(u, { originalTrack: void 0, muted: 1 - }), ze.publish({ - type: Fn.notification, + }), We.publish({ + type: fn.notification, payload: { type: "info", message: `Your ${u} unmute was rejected.` @@ -4488,173 +4686,173 @@ class Qy { onTalkWhileMuted() { } onConferenceError(s) { - console.error("Conference error:", s), s instanceof Error ? Ie.setState({ + console.error("Conference error:", s), s instanceof Error ? Je.setState({ conferenceStatus: "error", conferenceJoined: !1, conferenceError: s.message - }) : Ie.setState({ + }) : Je.setState({ conferenceStatus: "error", conferenceJoined: !1, conferenceError: s.toString() }); } onTrackAudioLevelChanged(s, u) { - const p = We.getState().localParticipant; - if (s !== p.pid) + const m = ze.getState().localParticipant; + if (s !== m.pid) return; - const g = fn(He.AUDIO); + const g = gn(He.AUDIO); if (g != null && g.muted) return; - Ie.getState().raiseHandMap.has(p.pid) && u > ky && rv(); + Je.getState().raiseHandMap.has(m.pid) && u > e4 && ov(); } } -const Bn = new Qy(), Dy = /* @__PURE__ */ di({ +const Bn = new t4(), n4 = /* @__PURE__ */ di({ name: /* @__PURE__ */ Xt(), pid: /* @__PURE__ */ Xt(), ruid: /* @__PURE__ */ Xt(), - role: /* @__PURE__ */ W5(Object.values(Yg)), - uid: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), - avatar: /* @__PURE__ */ $e(/* @__PURE__ */ Xt()), + role: /* @__PURE__ */ X5(Object.values(Kg)), + uid: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), + avatar: /* @__PURE__ */ et(/* @__PURE__ */ Xt()), isLocal: /* @__PURE__ */ Qa(), - sources: /* @__PURE__ */ $e( - /* @__PURE__ */ qS( - /* @__PURE__ */ z5([/* @__PURE__ */ Gg("video"), /* @__PURE__ */ Gg("audio")]), - /* @__PURE__ */ qS(/* @__PURE__ */ Xt(), /* @__PURE__ */ I5()) + sources: /* @__PURE__ */ et( + /* @__PURE__ */ t6( + /* @__PURE__ */ q5([/* @__PURE__ */ Xg("video"), /* @__PURE__ */ Xg("audio")]), + /* @__PURE__ */ t6(/* @__PURE__ */ Xt(), /* @__PURE__ */ Y5()) ) ), - type: /* @__PURE__ */ Gg("human") -}), xy = /* @__PURE__ */ hT(Dy, [ + type: /* @__PURE__ */ Xg("human") +}), i4 = /* @__PURE__ */ TT(n4, [ "avatar", "uid" -]), NE = 4e3; -function bE(c) { - Ye.init(c), Ye.setLogLevel(Ye.logLevels.ERROR); +]), xE = 4e3; +function ZE(l) { + je.init(l), je.setLogLevel(je.logLevels.ERROR); } -function Zy(c) { - c.on( - Ye.events.conference.USER_JOINED, +function a4(l) { + l.on( + je.events.conference.USER_JOINED, Bn.onUserJoined - ), c.on( - Ye.events.conference.USER_LEFT, + ), l.on( + je.events.conference.USER_LEFT, Bn.onUserLeft - ), c.on( - Ye.events.conference.TRACK_ADDED, + ), l.on( + je.events.conference.TRACK_ADDED, Bn.onTrackAdded - ), c.on( - Ye.events.conference.TRACK_REMOVED, + ), l.on( + je.events.conference.TRACK_REMOVED, Bn.onTrackRemoved - ), c.on( - Ye.events.conference.CONFERENCE_JOIN_IN_PROGRESS, + ), l.on( + je.events.conference.CONFERENCE_JOIN_IN_PROGRESS, Bn.onConferenceJoinInProgress - ), c.on( - Ye.events.conference.CONFERENCE_FAILED, + ), l.on( + je.events.conference.CONFERENCE_FAILED, Bn.onConferenceFailed - ), c.on( - Ye.events.conference.RECORDER_STATE_CHANGED, + ), l.on( + je.events.conference.RECORDER_STATE_CHANGED, Bn.onRecorderStateChanged - ), c.on( - Ye.events.conference.CONNECTION_ESTABLISHED, + ), l.on( + je.events.conference.CONNECTION_ESTABLISHED, Bn.onConnectionEstablished - ), c.on( - Ye.events.conference.CONNECTION_INTERRUPTED, + ), l.on( + je.events.conference.CONNECTION_INTERRUPTED, Bn.onConnectionInterrupted - ), c.on( - Ye.events.conference.CONNECTION_RESTORED, + ), l.on( + je.events.conference.CONNECTION_RESTORED, Bn.onConnectionRestored - ), c.on( - Ye.events.conference.P2P_STATUS, + ), l.on( + je.events.conference.P2P_STATUS, Bn.onP2PStatus - ), c.on( - Ye.events.conference.TRACK_MUTE_CHANGED, + ), l.on( + je.events.conference.TRACK_MUTE_CHANGED, Bn.onTrackMuteChanged - ), c.on( - Ye.events.conference.CONFERENCE_JOINED, + ), l.on( + je.events.conference.CONFERENCE_JOINED, Bn.onConferenceJoined - ), c.on( - Ye.events.conference.CONFERENCE_LEFT, + ), l.on( + je.events.conference.CONFERENCE_LEFT, Bn.onConferenceLeft - ), c.on( - Ye.events.conference.PARTICIPANT_SOURCE_UPDATED, + ), l.on( + je.events.conference.PARTICIPANT_SOURCE_UPDATED, Bn.onParticipantSourceUpdated - ), c.on( - Ye.events.conference.CONFERENCE_CREATED_TIMESTAMP, + ), l.on( + je.events.conference.CONFERENCE_CREATED_TIMESTAMP, Bn.onConferenceCreatedTimestamp - ), c.on( - Ye.events.conference.DOMINANT_SPEAKER_CHANGED, + ), l.on( + je.events.conference.DOMINANT_SPEAKER_CHANGED, Bn.onDominantSpeakerChanged - ), c.on( - Ye.events.connectionQuality.LOCAL_STATS_UPDATED, + ), l.on( + je.events.connectionQuality.LOCAL_STATS_UPDATED, Bn.onLocalStatsUpdated - ), c.on( - Ye.events.connectionQuality.REMOTE_STATS_UPDATED, + ), l.on( + je.events.connectionQuality.REMOTE_STATS_UPDATED, Bn.onRemoteStatsUpdated - ), c.on( - Ye.events.conference.PARTICIPANT_PROPERTY_CHANGED, + ), l.on( + je.events.conference.PARTICIPANT_PROPERTY_CHANGED, Bn.onParticipantPropertyChanged - ), c.on( - Ye.events.conference.USER_ROLE_CHANGED, + ), l.on( + je.events.conference.USER_ROLE_CHANGED, Bn.onUserRoleChanged - ), c.on( - Ye.events.conference.TALK_WHILE_MUTED, + ), l.on( + je.events.conference.TALK_WHILE_MUTED, Bn.onTalkWhileMuted - ), c.on( - Ye.events.conference.TRACK_UNMUTE_REJECTED, + ), l.on( + je.events.conference.TRACK_UNMUTE_REJECTED, Bn.onTrackUnmuteRejected - ), c.on( - Ye.events.conference.TRACK_AUDIO_LEVEL_CHANGED, + ), l.on( + je.events.conference.TRACK_AUDIO_LEVEL_CHANGED, Bn.onTrackAudioLevelChanged - ), c.addCommandListener( - pR.userInfo, + ), l.addCommandListener( + U6.userInfo, (s, u) => { - const p = /* @__PURE__ */ sv( - xy, - G5(s.value) + const m = /* @__PURE__ */ lv( + i4, + tE(s.value) ); - p.success && We.getState().updateParticipant(u, { - avatar: p.output.avatar, - uid: p.output.uid + m.success && ze.getState().updateParticipant(u, { + avatar: m.output.avatar, + uid: m.output.uid }); } ); } -async function Oy() { +async function r4() { var T, F; - const c = et.getState().sessionId, s = Wn.getState().connection; + const l = Xe.getState().sessionId, s = Wn.getState().connection; if (!s) throw new Error("No connection available"); - if (Wn.getState().connectionStatus !== "connected" && await sy(), Ie.getState().conference) + if (Wn.getState().connectionStatus !== "connected" && await _y(), Je.getState().conference) return; const g = Wn.getState().connectionConfig; - g && et.getState().isPeerCall && (g.pcStatsInterval = NE); + g && Xe.getState().isPeerCall && (g.pcStatsInterval = xE); const S = s.initJitsiConference( - c, + l, g - ), U = (T = fn(He.AUDIO)) == null ? void 0 : T.originalTrack, Q = (F = fn(He.VIDEO)) == null ? void 0 : F.originalTrack; - U && S.addTrack(U), Q && S.addTrack(Q), We.getState().updateLocalParticipant({ + ), U = (T = gn(He.AUDIO)) == null ? void 0 : T.originalTrack, M = (F = gn(He.VIDEO)) == null ? void 0 : F.originalTrack; + U && S.addTrack(U), M && S.addTrack(M), ze.getState().updateLocalParticipant({ pid: S.myUserId() - }), Zy(S), Ie.getState().conferenceWillJoin(S), S.setDisplayName( - We.getState().localParticipant.name + }), a4(S), Je.getState().conferenceWillJoin(S), S.setDisplayName( + ze.getState().localParticipant.name ), S.join(); } -async function $3() { - if (!Ie.getState().conference) { - const s = await Xo(Oy()); - s.error && (console.error("Error creating conference", s.error), Ie.setState({ +async function s5() { + if (!Je.getState().conference) { + const s = await fo(r4()); + s.error && (console.error("Error creating conference", s.error), Je.setState({ conferenceStatus: "error", conferenceJoined: !1, conferenceError: s.error.message })); } } -function VE(c) { - const s = Ie.getState().conference; - s == null || s.muteParticipant(c, "audio"); +function OE(l) { + const s = Je.getState().conference; + s == null || s.muteParticipant(l, "audio"); } -function By(c) { - const s = Ie.getState().conference; - s == null || s.muteParticipant(c, "video"); +function o4(l) { + const s = Je.getState().conference; + s == null || s.muteParticipant(l, "video"); } -class wy { +class s4 { constructor() { z(this, "lock", Promise.resolve()); } @@ -4664,10 +4862,10 @@ class wy { */ async run(s) { let u; - const p = new Promise((S) => { + const m = new Promise((S) => { u = S; }), g = this.lock; - this.lock = g.then(() => p), await g; + this.lock = g.then(() => m), await g; try { return await s(); } finally { @@ -4675,78 +4873,78 @@ class wy { } } } -function Ay(c) { +function l4(l) { let s = !1, u; - return function(...p) { - return s || (s = !0, u = c.apply(this, p)), u; + return function(...m) { + return s || (s = !0, u = l.apply(this, m)), u; }; } -function Jy(c = [], s = []) { - if (c.length !== s.length) +function c4(l = [], s = []) { + if (l.length !== s.length) return !0; - for (let u of c) + for (let u of l) if (!s.find( - ({ deviceId: g, groupId: S, kind: U, label: Q }) => u.deviceId === g && u.groupId === S && u.kind === U && u.label === Q + ({ deviceId: g, groupId: S, kind: U, label: M }) => u.deviceId === g && u.groupId === S && u.kind === U && u.label === M )) return !0; return !1; } -function Ly() { - const c = K.getState().audioInputDevices, s = K.getState().videoInputDevices, u = [...c, ...s], p = et.getState().sessionType; - return !!u.filter((g) => g.kind === "audioinput" || p === "VIDEO").some((g) => g.label === ""); +function d4() { + const l = X.getState().audioInputDevices, s = X.getState().videoInputDevices, u = [...l, ...s], m = Xe.getState().sessionType; + return !!u.filter((g) => g.kind === "audioinput" || m === "VIDEO").some((g) => g.label === ""); } -function nR(c = !1) { - if (c && Ly()) +function c6(l = !1) { + if (l && d4()) return; - const { mediaDevices: s } = Ye; + const { mediaDevices: s } = je; s.isDeviceChangeAvailable() && s.enumerateDevices((u) => { - const p = u.filter( + const m = u.filter( (U) => U.kind === "audioinput" && U.deviceId !== "" ), g = u.filter( (U) => U.kind === "audiooutput" && U.deviceId !== "" ), S = u.filter( (U) => U.kind === "videoinput" && U.deviceId !== "" ); - K.setState({ - audioInputDevices: p, + X.setState({ + audioInputDevices: m, audioOutputDevices: g, videoInputDevices: S }); }); } -function Iy() { - const { mediaDevices: c } = Ye; - c.addEventListener( - Ye.events.mediaDevices.DEVICE_LIST_CHANGED, +function u4() { + const { mediaDevices: l } = je; + l.addEventListener( + je.events.mediaDevices.DEVICE_LIST_CHANGED, (s) => { - const u = K.getState().audioInputDevices, p = K.getState().audioOutputDevices, g = K.getState().videoInputDevices, S = u.concat( - p, + const u = X.getState().audioInputDevices, m = X.getState().audioOutputDevices, g = X.getState().videoInputDevices, S = u.concat( + m, g ); setTimeout(() => { - Jy(S, s) && nR(); + c4(S, s) && c6(); }, 0); } - ), nR(); + ), c6(); } -const CE = Ay(Iy); -let Hf = !1, hd = null; -const Wy = 3e3; -bE(); -function FE() { - var p; - if (!et.getState().sessionId) { +const BE = l4(u4); +let Pf = !1, pd = null; +const h4 = 3e3; +ZE(); +function wE() { + var m; + if (!Xe.getState().sessionId) { console.error("Session ID is required to start a session"); return; } - if (Hf) + if (Pf) return; - bE( - et.getState().isPeerCall ? { pcStatsInterval: NE } : void 0 - ), Hf = !0, xT(); - const s = et.getState().audioOutputDeviceId ?? ((p = K.getState().audioOutputDevice) == null ? void 0 : p.deviceId); - s && vR(s), ze.startEmitting(); - const u = X5(() => ME()); + ZE( + Xe.getState().isPeerCall ? { pcStatsInterval: xE } : void 0 + ), Pf = !0, HT(); + const s = Xe.getState().audioOutputDeviceId ?? ((m = X.getState().audioOutputDevice) == null ? void 0 : m.deviceId); + s && N6(s), We.startEmitting(); + const u = iE(() => JE()); if (u.error) { console.error("Error connecting to session:", u.error), Wn.getState().connectionFailed({ name: "connection.otherError", @@ -4754,96 +4952,96 @@ function FE() { }); return; } - CE(); + BE(); } -async function _E() { - Hf !== !1 && (Hf = !1, await Promise.all([ - qT(), - Ie.getState().leaveConference() +async function AE() { + Pf !== !1 && (Pf = !1, await Promise.all([ + Ey(), + Je.getState().leaveConference() ]), await Wn.getState().disconnect()); } -const Hy = new wy(); -function ql(c = {}) { - return Hy.run(async () => { - const s = et.getState().isPeerCall; - if (c.shouldEndSession || s && !c.forceLeave) { - Ie.getState().endConference(); +const m4 = new s4(); +function ec(l = {}) { + return m4.run(async () => { + const s = Xe.getState().isPeerCall; + if (l.shouldEndSession || s && !l.forceLeave) { + Je.getState().endConference(); return; } - K.getState().clearIdealTimeoutTimer(), Py(), await _E(), RE(); + X.getState().clearIdealTimeoutTimer(), g4(), await AE(), FE(); }); } -async function zy() { - ze.publish({ +async function p4() { + We.publish({ type: "onSessionTimedOut" - }), await ql(); + }), await ec(); } -async function jy() { - return hd && (clearTimeout(hd), hd = null), new Promise((c, s) => { - hd = setTimeout(async () => { +async function f4() { + return pd && (clearTimeout(pd), pd = null), new Promise((l, s) => { + pd = setTimeout(async () => { try { - await Gy(), c(); + await v4(), l(); } catch (u) { s(u); } finally { - hd = null; + pd = null; } - }, Wy); + }, h4); }); } -function Py() { - hd && (clearTimeout(hd), hd = null); +function g4() { + pd && (clearTimeout(pd), pd = null); } -async function Gy() { - if (K.getState().connectionRetryCount >= 3 && Hf === !0) { - await ql(); +async function v4() { + if (X.getState().connectionRetryCount >= 3 && Pf === !0) { + await ec(); return; } - K.getState().incrementConnectionRetryCount(), await _E(), Wn.getState().reset(), Ie.getState().reset(), st.getState().reset(), FE(); + X.getState().incrementConnectionRetryCount(), await AE(), Wn.getState().reset(), Je.getState().reset(), rt.getState().reset(), wE(); } -async function ME(c = !0) { +async function JE(l = !0) { if (Wn.getState().connection) { - $3(); + s5(); return; } - const u = Wn.getState().connectionConfig, p = Wn.getState().jwt, g = et.getState().iAmRecorder; + const u = Wn.getState().connectionConfig, m = Wn.getState().jwt, g = Xe.getState().iAmRecorder; u && g && (u.p2p = { enabled: !1 }); - const S = new Ye.JitsiConnection(null, p, u); + const S = new je.JitsiConnection(null, m, u); Wn.getState().connectionWillConnect(S), S.addEventListener( - Ye.events.connection.CONNECTION_ESTABLISHED, + je.events.connection.CONNECTION_ESTABLISHED, U ), S.addEventListener( - Ye.events.connection.CONNECTION_FAILED, - Q + je.events.connection.CONNECTION_FAILED, + M ), S.addEventListener( - Ye.events.connection.CONNECTION_DISCONNECTED, + je.events.connection.CONNECTION_DISCONNECTED, T ), S.addEventListener( - Ye.events.connection.PROPERTIES_UPDATED, + je.events.connection.PROPERTIES_UPDATED, F ); async function U() { S.removeEventListener( - Ye.events.connection.CONNECTION_ESTABLISHED, + je.events.connection.CONNECTION_ESTABLISHED, U - ), Wn.getState().connectionEstablished(S), ze.publish({ - type: Fn.onConnectionEstablished - }), c && $3(); + ), Wn.getState().connectionEstablished(S), We.publish({ + type: fn.onConnectionEstablished + }), l && s5(); } - function Q(A, ge, ...de) { + function M(A, ve, ...me) { b(); - const Me = de[1], ee = { + const Qe = me[1], ne = { name: A, - message: ge, - details: Me, - recoverable: !I3({ name: A }) + message: ve, + details: Qe, + recoverable: !X3({ name: A }) }; - console.error("Connection failed", ee), Wn.getState().connectionFailed(ee), ze.publish({ - type: gt.SessionStatusListener.onConnectionFailed, - payload: ee - }), I3(ee) ? ql() : jy(); + console.error("Connection failed", ne), Wn.getState().connectionFailed(ne), We.publish({ + type: lt.SessionStatusListener.onConnectionFailed, + payload: ne + }), X3(ne) ? ec() : f4(); } function T() { } @@ -4851,37 +5049,37 @@ async function ME(c = !0) { } function b() { S.removeEventListener( - Ye.events.connection.PROPERTIES_UPDATED, + je.events.connection.PROPERTIES_UPDATED, F ), S.removeEventListener( - Ye.events.connection.CONNECTION_FAILED, - Q + je.events.connection.CONNECTION_FAILED, + M ), S.removeEventListener( - Ye.events.connection.CONNECTION_DISCONNECTED, + je.events.connection.CONNECTION_DISCONNECTED, T ); } - const M = localStorage.getItem("xmpp_username_override"), V = localStorage.getItem("xmpp_password_override"); - M && V ? (S.addFeature("http://jitsi.org/protocol/jibri"), S.connect({ - id: M, + const k = localStorage.getItem("xmpp_username_override"), V = localStorage.getItem("xmpp_password_override"); + k && V ? (S.addFeature("http://jitsi.org/protocol/jibri"), S.connect({ + id: k, password: V })) : S.connect(); } -function yR() { - const c = K.getState().desktopSharingFrameRate; - Ye.createLocalTracks({ +function k6() { + const l = X.getState().desktopSharingFrameRate; + je.createLocalTracks({ devices: ["desktop"], - desktopSharingFrameRate: c + desktopSharingFrameRate: l }).then((s) => { const u = s.find( (g) => g.getType() === "video" - ), p = s.find( + ), m = s.find( (g) => g.getType() === "audio" ); - p && p.dispose(), u && u.getTrack().applyConstraints({ width: { max: 1920 }, height: { max: 1080 } }).finally(() => bR(u)); + m && m.dispose(), u && u.getTrack().applyConstraints({ width: { max: 1920 }, height: { max: 1080 } }).finally(() => D6(u)); }).catch((s) => { - (s == null ? void 0 : s.name) !== "gum.screensharing_user_canceled" && ze.publish({ - type: Fn.notification, + (s == null ? void 0 : s.name) !== "gum.screensharing_user_canceled" && We.publish({ + type: fn.notification, payload: { type: "error", message: (s == null ? void 0 : s.message) || "An error occurred while starting screen share." @@ -4889,280 +5087,239 @@ function yR() { }); }); } -function NR() { - st.getState().updateLocalTrack(He.SCREENSHARE, { +function Q6() { + rt.getState().updateLocalTrack(He.SCREENSHARE, { muted: 1 }); } -function Yy(c) { - if (!c || c.isMuted()) +function S4(l) { + if (!l || l.isMuted()) return; - const s = We.getState().participants, u = We.getState().localParticipant, p = c.isLocal() ? u : s.find((g) => g.pid === c.getParticipantId()); - if (!p) { - console.error("Participant not found:", c.getParticipantId()); + const s = ze.getState().participants, u = ze.getState().localParticipant, m = l.isLocal() ? u : s.find((g) => g.pid === l.getParticipantId()); + if (!m) { + console.error("Participant not found:", l.getParticipantId()); return; } - We.getState().addVirtualParticipant({ - ...p, + ze.getState().addVirtualParticipant({ + ...m, type: "screen-share", - name: p.name, - ruid: `${p.pid}-screen-share` - }), We.getState().pinParticipant(p.pid, "screen-share"), c.isLocal() ? ze.publish({ - type: gt.MediaEventsListener.onScreenShareStarted - }) : Ko( - gt.ParticipantEventsListner.onParticipantStartedScreenShare, - p.pid + name: m.name, + ruid: `${m.pid}-screen-share` + }), ze.getState().pinParticipant(m.pid, "screen-share"), l.isLocal() ? We.publish({ + type: lt.MediaEventsListener.onScreenShareStarted + }) : Er( + lt.ParticipantEventsListner.onParticipantStartedScreenShare, + m.pid ); } -function Xy(c) { - We.getState().removeVirtualParticipant(c, "screen-share"), We.getState().localParticipant.pid === c ? ze.publish({ - type: gt.MediaEventsListener.onScreenShareStopped - }) : Ko( - gt.ParticipantEventsListner.onParticipantStoppedScreenShare, - c +function R4(l) { + ze.getState().removeVirtualParticipant(l, "screen-share"), ze.getState().localParticipant.pid === l ? We.publish({ + type: lt.MediaEventsListener.onScreenShareStopped + }) : Er( + lt.ParticipantEventsListner.onParticipantStoppedScreenShare, + l ); } -K.subscribe( - (c) => c.desktopSharingFrameRate, - (c) => { - Ie.getState().conference; +X.subscribe( + (l) => l.desktopSharingFrameRate, + (l) => { + Je.getState().conference; } ); -const Lg = /* @__PURE__ */ new Map(); -function bR(c) { +const Wg = /* @__PURE__ */ new Map(); +function D6(l) { var s; - if (c.isLocal()) { - nR(!0); - const u = (s = fn(c.getType())) == null ? void 0 : s.muted; - st.getState().updateLocalTrack(xh(c), { - originalTrack: c, - ...c.getVideoType() === "desktop" ? { + if (l.isLocal()) { + c6(!0); + const u = (s = gn(l.getType())) == null ? void 0 : s.muted; + rt.getState().updateLocalTrack(Oh(l), { + originalTrack: l, + ...l.getVideoType() === "desktop" ? { muted: 0 } : typeof u == "boolean" ? { muted: u } : {} - }), c.on(Ye.events.track.LOCAL_TRACK_STOPPED, (p) => { - p.getVideoType() === "desktop" && NR(); + }), l.on(je.events.track.LOCAL_TRACK_STOPPED, (m) => { + m.getVideoType() === "desktop" && Q6(); }); } else - st.getState().addTrack(c); - c.removeAllListeners(Ye.events.track.TRACK_MUTE_CHANGED), c.removeAllListeners(Ye.events.track.TRACK_VIDEOTYPE_CHANGED), c.removeAllListeners( - Ye.events.track.TRACK_STREAMING_STATUS_CHANGED - ), c.on(Ye.events.track.TRACK_MUTE_CHANGED, (u) => { - u.isLocal() || st.getState().updateTrack(u, { + rt.getState().addTrack(l); + l.removeAllListeners(je.events.track.TRACK_MUTE_CHANGED), l.removeAllListeners(je.events.track.TRACK_VIDEOTYPE_CHANGED), l.removeAllListeners( + je.events.track.TRACK_STREAMING_STATUS_CHANGED + ), l.on(je.events.track.TRACK_MUTE_CHANGED, (u) => { + u.isLocal() || rt.getState().updateTrack(u, { muted: u.isMuted() ? 1 : 0 }); - }), c.on( - Ye.events.track.TRACK_VIDEOTYPE_CHANGED, + }), l.on( + je.events.track.TRACK_VIDEOTYPE_CHANGED, (u) => { - st.getState().updateTrack(c, { + rt.getState().updateTrack(l, { videoType: u, mediaType: u === "desktop" ? "screenshare" : "video" }); } - ), !c.isLocal() && c.isVideoTrack() && c.on( - Ye.events.track.TRACK_STREAMING_STATUS_CHANGED, - (u, p) => { - var Q, T; - const g = ((Q = u.getTrackId) == null ? void 0 : Q.call(u)) ?? ((T = u.getId) == null ? void 0 : T.call(u)), S = Lg.get(g); - S && (clearTimeout(S), Lg.delete(g)); - const U = Ie.getState().conference; - p === "interrupted" && U.isP2PActive() ? Lg.set( + ), !l.isLocal() && l.isVideoTrack() && l.on( + je.events.track.TRACK_STREAMING_STATUS_CHANGED, + (u, m) => { + var M, T; + const g = ((M = u.getTrackId) == null ? void 0 : M.call(u)) ?? ((T = u.getId) == null ? void 0 : T.call(u)), S = Wg.get(g); + S && (clearTimeout(S), Wg.delete(g)); + const U = Je.getState().conference; + m === "interrupted" && U.isP2PActive() ? Wg.set( g, setTimeout(() => { - Lg.delete(g), st.getState().updateTrack(u, { streamingStatus: p }); + Wg.delete(g), rt.getState().updateTrack(u, { streamingStatus: m }); }, 4e3) - ) : st.getState().updateTrack(u, { streamingStatus: p }); + ) : rt.getState().updateTrack(u, { streamingStatus: m }); } ); } -const Ky = { layouts: { tileView: "Tile View", sideLayout: "Side Layout", spotlight: "Spotlight" } }, qy = { audioControl: { muteMicrophone: "Mute microphone", unmuteMicrophone: "Unmute microphone", audioDeviceOptions: "Audio device options", audioSettings: "Audio settings" }, videoControl: { turnOffCamera: "Turn off camera", turnOnCamera: "Turn on camera", videoDeviceOptions: "Video device options", videoSettings: "Video settings" }, settingsDialog: { todo: "// TODO: Revisit this section", title: "Settings", tabs: { audio: "Audio", video: "Video" }, deviceLabels: { microphone: "Microphone", speaker: "Speaker", camera: "Camera", frameRate: "Desktop sharing frame rate" }, deviceStates: { noMicrophoneSelected: "No microphone selected", noSpeakerSelected: "No speaker selected", noCameraSelected: "No camera selected" }, audioSettings: { enableNoiseReduction: "Enable noise reduction" }, videoSettings: { mirrorMyVideo: "Mirror my video", selectCameraToSeePreview: "Select a camera to see preview", loadingCameraPreview: "Loading camera preview...", frameRateUnit: "frames per second", frameRateNotice: "You need to restart the screen share for the new settings to take effect." }, permissions: { errorTitle: "Some permissions are missing", microphoneBlocked: "Access to your microphone is blocked. Please check your browser settings.", cameraBlocked: "Access to your camera is blocked. Please check your browser settings.", microphoneAndCameraBlocked: "Access to your microphone and camera is blocked. Please check your browser settings." }, buttons: { cancel: "Cancel", done: "Done" } }, recording: { startRecording: "Start recording", stopRecording: "Stop recording", startRecordingConfirmation: "Recording will capture video, audio, and screen sharing from this call.", stopRecordingConfirmation: "Stopping will end the recording of video, audio, and screen sharing from this call.", cancel: "Cancel" }, raiseHand: "Raise hand", lowerHand: "Lower hand", startScreenSharing: "Start screen sharing", stopScreenSharing: "Stop screen sharing", moreOptions: "More options", leaveSession: "Leave session", reactions: "Reactions" }, $y = { title: "Are you still there?", subtitle: "You are the only one here, so this call will end in less than {minutes} minute{plural}. Do you want to stay in this call?", buttons: { stayInCall: "Stay in the call", leaveNow: "Leave now" } }, e4 = { header: { title: "Participants", closeButton: "Close participants list" }, search: { placeholder: "Search Participant" }, emptyState: { title: "No participants found", subtitle: "No participants match your search" } }, t4 = { title: "Virtual Background", addBackground: "Add Background", noCameraFeed: "No camera feed detected", buttons: { cancel: "Cancel", done: "Done" } }, n4 = { error: "Something went wrong, please try again." }, i4 = {}, a4 = { - header: Ky, - controlPanel: qy, - idealTimeout: $y, - participantList: e4, - virtualBackground: t4, - general: n4, - other: i4 -}, e5 = { - translations: { - "en-US": a4 - }, - currentLocale: "en-US" -}, r4 = fd( - su( - lu(e5, (c) => ({ - reset: () => c(e5), - setLocale: (s) => c(() => ({ - currentLocale: s - })) - })) - ) -); -function o4(c, s) { - const u = s.split("."); - let p = c; - for (const g of u) { - if (p == null || typeof p != "object") - return ""; - p = p[g]; - } - return p; -} -const mo = () => { - const { translations: c, currentLocale: s } = r4(); - return { - t: (p) => o4(c, `${s}.${p}`), - currentLocale: s, - translations: c - }; -}; -var Gl; +var Yl; // @__NO_SIDE_EFFECTS__ -function kE(c) { +function LE(l) { return { - lang: (c == null ? void 0 : c.lang) ?? (Gl == null ? void 0 : Gl.lang), - message: c == null ? void 0 : c.message, - abortEarly: (c == null ? void 0 : c.abortEarly) ?? (Gl == null ? void 0 : Gl.abortEarly), - abortPipeEarly: (c == null ? void 0 : c.abortPipeEarly) ?? (Gl == null ? void 0 : Gl.abortPipeEarly) + lang: (l == null ? void 0 : l.lang) ?? (Yl == null ? void 0 : Yl.lang), + message: l == null ? void 0 : l.message, + abortEarly: (l == null ? void 0 : l.abortEarly) ?? (Yl == null ? void 0 : Yl.abortEarly), + abortPipeEarly: (l == null ? void 0 : l.abortPipeEarly) ?? (Yl == null ? void 0 : Yl.abortPipeEarly) }; } -var IS; +var HS; // @__NO_SIDE_EFFECTS__ -function s4(c) { - return IS == null ? void 0 : IS.get(c); +function E4(l) { + return HS == null ? void 0 : HS.get(l); } -var WS; +var zS; // @__NO_SIDE_EFFECTS__ -function l4(c) { - return WS == null ? void 0 : WS.get(c); +function U4(l) { + return zS == null ? void 0 : zS.get(l); } -var HS; +var jS; // @__NO_SIDE_EFFECTS__ -function c4(c, s) { +function T4(l, s) { var u; - return (u = HS == null ? void 0 : HS.get(c)) == null ? void 0 : u.get(s); + return (u = jS == null ? void 0 : jS.get(l)) == null ? void 0 : u.get(s); } // @__NO_SIDE_EFFECTS__ -function QE(c) { - var u, p; - const s = typeof c; - return s === "string" ? `"${c}"` : s === "number" || s === "bigint" || s === "boolean" ? `${c}` : s === "object" || s === "function" ? (c && ((p = (u = Object.getPrototypeOf(c)) == null ? void 0 : u.constructor) == null ? void 0 : p.name)) ?? "null" : s; +function IE(l) { + var u, m; + const s = typeof l; + return s === "string" ? `"${l}"` : s === "number" || s === "bigint" || s === "boolean" ? `${l}` : s === "object" || s === "function" ? (l && ((m = (u = Object.getPrototypeOf(l)) == null ? void 0 : u.constructor) == null ? void 0 : m.name)) ?? "null" : s; } -function ou(c, s, u, p, g) { - const S = g && "input" in g ? g.input : u.value, U = (g == null ? void 0 : g.expected) ?? c.expects ?? null, Q = (g == null ? void 0 : g.received) ?? /* @__PURE__ */ QE(S), T = { - kind: c.kind, - type: c.type, +function lu(l, s, u, m, g) { + const S = g && "input" in g ? g.input : u.value, U = (g == null ? void 0 : g.expected) ?? l.expects ?? null, M = (g == null ? void 0 : g.received) ?? /* @__PURE__ */ IE(S), T = { + kind: l.kind, + type: l.type, input: S, expected: U, - received: Q, - message: `Invalid ${s}: ${U ? `Expected ${U} but r` : "R"}eceived ${Q}`, - requirement: c.requirement, + received: M, + message: `Invalid ${s}: ${U ? `Expected ${U} but r` : "R"}eceived ${M}`, + requirement: l.requirement, path: g == null ? void 0 : g.path, issues: g == null ? void 0 : g.issues, - lang: p.lang, - abortEarly: p.abortEarly, - abortPipeEarly: p.abortPipeEarly - }, F = c.kind === "schema", b = (g == null ? void 0 : g.message) ?? c.message ?? /* @__PURE__ */ c4(c.reference, T.lang) ?? (F ? /* @__PURE__ */ l4(T.lang) : null) ?? p.message ?? /* @__PURE__ */ s4(T.lang); + lang: m.lang, + abortEarly: m.abortEarly, + abortPipeEarly: m.abortPipeEarly + }, F = l.kind === "schema", b = (g == null ? void 0 : g.message) ?? l.message ?? /* @__PURE__ */ T4(l.reference, T.lang) ?? (F ? /* @__PURE__ */ U4(T.lang) : null) ?? m.message ?? /* @__PURE__ */ E4(T.lang); b !== void 0 && (T.message = typeof b == "function" ? ( // @ts-expect-error b(T) ) : b), F && (u.typed = !1), u.issues ? u.issues.push(T) : u.issues = [T]; } // @__NO_SIDE_EFFECTS__ -function gd(c) { +function Sd(l) { return { version: 1, vendor: "valibot", validate(s) { - return c["~run"]({ value: s }, /* @__PURE__ */ kE()); + return l["~run"]({ value: s }, /* @__PURE__ */ LE()); } }; } // @__NO_SIDE_EFFECTS__ -function d4(c, s) { - return Object.hasOwn(c, s) && s !== "__proto__" && s !== "prototype" && s !== "constructor"; +function y4(l, s) { + return Object.hasOwn(l, s) && s !== "__proto__" && s !== "prototype" && s !== "constructor"; } // @__NO_SIDE_EFFECTS__ -function u4(c, s) { - const u = [...new Set(c)]; +function N4(l, s) { + const u = [...new Set(l)]; return u.length > 1 ? `(${u.join(` ${s} `)})` : u[0] ?? "never"; } // @__NO_SIDE_EFFECTS__ -function DE(c) { +function WE(l) { return { kind: "transformation", type: "transform", - reference: DE, + reference: WE, async: !1, - operation: c, + operation: l, "~run"(s) { return s.value = this.operation(s.value), s; } }; } // @__NO_SIDE_EFFECTS__ -function h4(c, s, u) { - return typeof c.fallback == "function" ? ( +function b4(l, s, u) { + return typeof l.fallback == "function" ? ( // @ts-expect-error - c.fallback(s, u) + l.fallback(s, u) ) : ( // @ts-expect-error - c.fallback + l.fallback ); } // @__NO_SIDE_EFFECTS__ -function xE(c, s, u) { - return typeof c.default == "function" ? ( +function HE(l, s, u) { + return typeof l.default == "function" ? ( // @ts-expect-error - c.default(s, u) + l.default(s, u) ) : ( // @ts-expect-error - c.default + l.default ); } // @__NO_SIDE_EFFECTS__ -function Yo(c, s) { +function Ko(l, s) { return { kind: "schema", type: "literal", - reference: Yo, - expects: /* @__PURE__ */ QE(c), + reference: Ko, + expects: /* @__PURE__ */ IE(l), async: !1, - literal: c, + literal: l, message: s, get "~standard"() { - return /* @__PURE__ */ gd(this); + return /* @__PURE__ */ Sd(this); }, - "~run"(u, p) { - return u.value === this.literal ? u.typed = !0 : ou(this, "type", u, p), u; + "~run"(u, m) { + return u.value === this.literal ? u.typed = !0 : lu(this, "type", u, m), u; } }; } // @__NO_SIDE_EFFECTS__ -function Gf(c, s) { +function Xf(l, s) { return { kind: "schema", type: "object", - reference: Gf, + reference: Xf, expects: "Object", async: !1, - entries: c, + entries: l, message: s, get "~standard"() { - return /* @__PURE__ */ gd(this); + return /* @__PURE__ */ Sd(this); }, - "~run"(u, p) { + "~run"(u, m) { var S; const g = u.value; if (g && typeof g == "object") { u.typed = !0, u.value = {}; for (const U in this.entries) { - const Q = this.entries[U]; - if (U in g || (Q.type === "exact_optional" || Q.type === "optional" || Q.type === "nullish") && // @ts-expect-error - Q.default !== void 0) { + const M = this.entries[U]; + if (U in g || (M.type === "exact_optional" || M.type === "optional" || M.type === "nullish") && // @ts-expect-error + M.default !== void 0) { const T = U in g ? ( // @ts-expect-error g[U] - ) : /* @__PURE__ */ xE(Q), F = Q["~run"]({ value: T }, p); + ) : /* @__PURE__ */ HE(M), F = M["~run"]({ value: T }, m); if (F.issues) { const b = { type: "object", @@ -5171,17 +5328,17 @@ function Gf(c, s) { key: U, value: T }; - for (const M of F.issues) - M.path ? M.path.unshift(b) : M.path = [b], (S = u.issues) == null || S.push(M); - if (u.issues || (u.issues = F.issues), p.abortEarly) { + for (const k of F.issues) + k.path ? k.path.unshift(b) : k.path = [b], (S = u.issues) == null || S.push(k); + if (u.issues || (u.issues = F.issues), m.abortEarly) { u.typed = !1; break; } } F.typed || (u.typed = !1), u.value[U] = F.value; - } else if (Q.fallback !== void 0) - u.value[U] = /* @__PURE__ */ h4(Q); - else if (Q.type !== "exact_optional" && Q.type !== "optional" && Q.type !== "nullish" && (ou(this, "key", u, p, { + } else if (M.fallback !== void 0) + u.value[U] = /* @__PURE__ */ b4(M); + else if (M.type !== "exact_optional" && M.type !== "optional" && M.type !== "nullish" && (lu(this, "key", u, m, { input: void 0, expected: `"${U}"`, path: [ @@ -5194,54 +5351,54 @@ function Gf(c, s) { value: g[U] } ] - }), p.abortEarly)) + }), m.abortEarly)) break; } } else - ou(this, "type", u, p); + lu(this, "type", u, m); return u; } }; } // @__NO_SIDE_EFFECTS__ -function tu(c, s) { +function nu(l, s) { return { kind: "schema", type: "optional", - reference: tu, - expects: `(${c.expects} | undefined)`, + reference: nu, + expects: `(${l.expects} | undefined)`, async: !1, - wrapped: c, + wrapped: l, default: s, get "~standard"() { - return /* @__PURE__ */ gd(this); + return /* @__PURE__ */ Sd(this); }, - "~run"(u, p) { - return u.value === void 0 && (this.default !== void 0 && (u.value = /* @__PURE__ */ xE(this, u, p)), u.value === void 0) ? (u.typed = !0, u) : this.wrapped["~run"](u, p); + "~run"(u, m) { + return u.value === void 0 && (this.default !== void 0 && (u.value = /* @__PURE__ */ HE(this, u, m)), u.value === void 0) ? (u.typed = !0, u) : this.wrapped["~run"](u, m); } }; } // @__NO_SIDE_EFFECTS__ -function ZE(c, s, u) { +function zE(l, s, u) { return { kind: "schema", type: "record", - reference: ZE, + reference: zE, expects: "Object", async: !1, - key: c, + key: l, value: s, message: u, get "~standard"() { - return /* @__PURE__ */ gd(this); + return /* @__PURE__ */ Sd(this); }, - "~run"(p, g) { - var U, Q; - const S = p.value; + "~run"(m, g) { + var U, M; + const S = m.value; if (S && typeof S == "object") { - p.typed = !0, p.value = {}; + m.typed = !0, m.value = {}; for (const T in S) - if (/* @__PURE__ */ d4(S, T)) { + if (/* @__PURE__ */ y4(S, T)) { const F = S[T], b = this.key["~run"]({ value: T }, g); if (b.issues) { const V = { @@ -5252,17 +5409,17 @@ function ZE(c, s, u) { value: F }; for (const A of b.issues) - A.path = [V], (U = p.issues) == null || U.push(A); - if (p.issues || (p.issues = b.issues), g.abortEarly) { - p.typed = !1; + A.path = [V], (U = m.issues) == null || U.push(A); + if (m.issues || (m.issues = b.issues), g.abortEarly) { + m.typed = !1; break; } } - const M = this.value["~run"]( + const k = this.value["~run"]( { value: F }, g ); - if (M.issues) { + if (k.issues) { const V = { type: "object", origin: "value", @@ -5270,66 +5427,66 @@ function ZE(c, s, u) { key: T, value: F }; - for (const A of M.issues) - A.path ? A.path.unshift(V) : A.path = [V], (Q = p.issues) == null || Q.push(A); - if (p.issues || (p.issues = M.issues), g.abortEarly) { - p.typed = !1; + for (const A of k.issues) + A.path ? A.path.unshift(V) : A.path = [V], (M = m.issues) == null || M.push(A); + if (m.issues || (m.issues = k.issues), g.abortEarly) { + m.typed = !1; break; } } - (!b.typed || !M.typed) && (p.typed = !1), b.typed && (p.value[b.value] = M.value); + (!b.typed || !k.typed) && (m.typed = !1), b.typed && (m.value[b.value] = k.value); } } else - ou(this, "type", p, g); - return p; + lu(this, "type", m, g); + return m; } }; } // @__NO_SIDE_EFFECTS__ -function Ti(c) { +function Ti(l) { return { kind: "schema", type: "string", reference: Ti, expects: "string", async: !1, - message: c, + message: l, get "~standard"() { - return /* @__PURE__ */ gd(this); + return /* @__PURE__ */ Sd(this); }, "~run"(s, u) { - return typeof s.value == "string" ? s.typed = !0 : ou(this, "type", s, u), s; + return typeof s.value == "string" ? s.typed = !0 : lu(this, "type", s, u), s; } }; } // @__NO_SIDE_EFFECTS__ -function t5(c) { +function l5(l) { let s; - if (c) - for (const u of c) + if (l) + for (const u of l) s ? s.push(...u.issues) : s = u.issues; return s; } // @__NO_SIDE_EFFECTS__ -function VR(c, s) { +function x6(l, s) { return { kind: "schema", type: "union", - reference: VR, - expects: /* @__PURE__ */ u4( - c.map((u) => u.expects), + reference: x6, + expects: /* @__PURE__ */ N4( + l.map((u) => u.expects), "|" ), async: !1, - options: c, + options: l, message: s, get "~standard"() { - return /* @__PURE__ */ gd(this); + return /* @__PURE__ */ Sd(this); }, - "~run"(u, p) { + "~run"(u, m) { let g, S, U; - for (const Q of this.options) { - const T = Q["~run"]({ value: u.value }, p); + for (const M of this.options) { + const T = M["~run"]({ value: u.value }, m); if (T.typed) if (T.issues) S ? S.push(T) : S = [T]; @@ -5345,14 +5502,14 @@ function VR(c, s) { if (S) { if (S.length === 1) return S[0]; - ou(this, "type", u, p, { - issues: /* @__PURE__ */ t5(S) + lu(this, "type", u, m, { + issues: /* @__PURE__ */ l5(S) }), u.typed = !0; } else { if ((U == null ? void 0 : U.length) === 1) return U[0]; - ou(this, "type", u, p, { - issues: /* @__PURE__ */ t5(U) + lu(this, "type", u, m, { + issues: /* @__PURE__ */ l5(U) }); } return u; @@ -5360,53 +5517,53 @@ function VR(c, s) { }; } // @__NO_SIDE_EFFECTS__ -function OE() { +function jE() { return { kind: "schema", type: "unknown", - reference: OE, + reference: jE, expects: "unknown", async: !1, get "~standard"() { - return /* @__PURE__ */ gd(this); + return /* @__PURE__ */ Sd(this); }, - "~run"(c) { - return c.typed = !0, c; + "~run"(l) { + return l.typed = !0, l; } }; } // @__NO_SIDE_EFFECTS__ -function m4(...c) { +function V4(...l) { return { - ...c[0], - pipe: c, + ...l[0], + pipe: l, get "~standard"() { - return /* @__PURE__ */ gd(this); + return /* @__PURE__ */ Sd(this); }, "~run"(s, u) { - for (const p of c) - if (p.kind !== "metadata") { - if (s.issues && (p.kind === "schema" || p.kind === "transformation")) { + for (const m of l) + if (m.kind !== "metadata") { + if (s.issues && (m.kind === "schema" || m.kind === "transformation")) { s.typed = !1; break; } - (!s.issues || !u.abortEarly && !u.abortPipeEarly) && (s = p["~run"](s, u)); + (!s.issues || !u.abortEarly && !u.abortPipeEarly) && (s = m["~run"](s, u)); } return s; } }; } // @__NO_SIDE_EFFECTS__ -function Jh(c, s, u) { - const p = c["~run"]({ value: s }, /* @__PURE__ */ kE(u)); +function Jh(l, s, u) { + const m = l["~run"]({ value: s }, /* @__PURE__ */ LE(u)); return { - typed: p.typed, - success: !p.issues, - output: p.value, - issues: p.issues + typed: m.typed, + success: !m.issues, + output: m.value, + issues: m.issues }; } -var Ig = { exports: {} }, xf = {}; +var Hg = { exports: {} }, Of = {}; /** * @license React * react-jsx-runtime.production.js @@ -5416,29 +5573,29 @@ var Ig = { exports: {} }, xf = {}; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var n5; -function p4() { - if (n5) return xf; - n5 = 1; - var c = Symbol.for("react.transitional.element"), s = Symbol.for("react.fragment"); - function u(p, g, S) { +var c5; +function C4() { + if (c5) return Of; + c5 = 1; + var l = Symbol.for("react.transitional.element"), s = Symbol.for("react.fragment"); + function u(m, g, S) { var U = null; if (S !== void 0 && (U = "" + S), g.key !== void 0 && (U = "" + g.key), "key" in g) { S = {}; - for (var Q in g) - Q !== "key" && (S[Q] = g[Q]); + for (var M in g) + M !== "key" && (S[M] = g[M]); } else S = g; return g = S.ref, { - $$typeof: c, - type: p, + $$typeof: l, + type: m, key: U, ref: g !== void 0 ? g : null, props: S }; } - return xf.Fragment = s, xf.jsx = u, xf.jsxs = u, xf; + return Of.Fragment = s, Of.jsx = u, Of.jsxs = u, Of; } -var Zf = {}; +var Bf = {}; /** * @license React * react-jsx-runtime.development.js @@ -5448,47 +5605,47 @@ var Zf = {}; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var i5; -function f4() { - return i5 || (i5 = 1, process.env.NODE_ENV !== "production" && function() { - function c(y) { +var d5; +function F4() { + return d5 || (d5 = 1, process.env.NODE_ENV !== "production" && function() { + function l(y) { if (y == null) return null; if (typeof y == "function") - return y.$$typeof === Ue ? null : y.displayName || y.name || null; + return y.$$typeof === ye ? null : y.displayName || y.name || null; if (typeof y == "string") return y; switch (y) { - case de: + case me: return "Fragment"; - case ee: + case ne: return "Profiler"; - case Me: + case Qe: return "StrictMode"; case G: return "Suspense"; - case Qe: + case De: return "SuspenseList"; - case ye: + case be: return "Activity"; } if (typeof y == "object") switch (typeof y.tag == "number" && console.error( "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." ), y.$$typeof) { - case ge: + case ve: return "Portal"; - case Re: + case ge: return (y.displayName || "Context") + ".Provider"; - case ae: + case ee: return (y._context.displayName || "Context") + ".Consumer"; - case Le: + case we: var L = y.render; return y = y.displayName, y || (y = L.displayName || L.name || "", y = y !== "" ? "ForwardRef(" + y + ")" : "ForwardRef"), y; case Te: - return L = y.displayName || null, L !== null ? L : c(y.type) || "Memo"; - case Ee: + return L = y.displayName || null, L !== null ? L : l(y.type) || "Memo"; + case ke: L = y._payload, y = y._init; try { - return c(y(L)); + return l(y(L)); } catch { } } @@ -5514,34 +5671,34 @@ function f4() { ), s(y); } } - function p(y) { - if (y === de) return "<>"; - if (typeof y == "object" && y !== null && y.$$typeof === Ee) + function m(y) { + if (y === me) return "<>"; + if (typeof y == "object" && y !== null && y.$$typeof === ke) return "<...>"; try { - var L = c(y); + var L = l(y); return L ? "<" + L + ">" : "<...>"; } catch { return "<...>"; } } function g() { - var y = be.A; + var y = Ve.A; return y === null ? null : y.getOwner(); } function S() { return Error("react-stack-top-frame"); } function U(y) { - if (xe.call(y, "key")) { + if (Ee.call(y, "key")) { var L = Object.getOwnPropertyDescriptor(y, "key").get; if (L && L.isReactWarning) return !1; } return y.key !== void 0; } - function Q(y, L) { + function M(y, L) { function j() { - Ne || (Ne = !0, console.error( + Ue || (Ue = !0, console.error( "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", L )); @@ -5552,17 +5709,17 @@ function f4() { }); } function T() { - var y = c(this.type); + var y = l(this.type); return Z[y] || (Z[y] = !0, console.error( "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." )), y = this.props.ref, y !== void 0 ? y : null; } - function F(y, L, j, pe, Fe, Ae, Oe, tn) { - return j = Ae.ref, y = { + function F(y, L, j, pe, Fe, Le, Oe, tn) { + return j = Le.ref, y = { $$typeof: A, type: y, key: L, - props: Ae, + props: Le, _owner: Fe }, (j !== void 0 ? j : null) !== null ? Object.defineProperty(y, "ref", { enumerable: !1, @@ -5589,25 +5746,25 @@ function f4() { value: tn }), Object.freeze && (Object.freeze(y.props), Object.freeze(y)), y; } - function b(y, L, j, pe, Fe, Ae, Oe, tn) { - var Ge = L.children; - if (Ge !== void 0) + function b(y, L, j, pe, Fe, Le, Oe, tn) { + var Ye = L.children; + if (Ye !== void 0) if (pe) - if (Ce(Ge)) { - for (pe = 0; pe < Ge.length; pe++) - M(Ge[pe]); - Object.freeze && Object.freeze(Ge); + if (Ne(Ye)) { + for (pe = 0; pe < Ye.length; pe++) + k(Ye[pe]); + Object.freeze && Object.freeze(Ye); } else console.error( "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." ); - else M(Ge); - if (xe.call(L, "key")) { - Ge = c(y); - var pt = Object.keys(L).filter(function(Hn) { + else k(Ye); + if (Ee.call(L, "key")) { + Ye = l(y); + var ft = Object.keys(L).filter(function(Hn) { return Hn !== "key"; }); - pe = 0 < pt.length ? "{key: someKey, " + pt.join(": ..., ") + ": ...}" : "{key: someKey}", De[Ge + pe] || (pt = 0 < pt.length ? "{" + pt.join(": ..., ") + ": ...}" : "{}", console.error( + pe = 0 < ft.length ? "{key: someKey, " + ft.join(": ..., ") + ": ...}" : "{key: someKey}", Ze[Ye + pe] || (ft = 0 < ft.length ? "{" + ft.join(": ..., ") + ": ...}" : "{}", console.error( `A props object containing a "key" prop is being spread into JSX: let props = %s; <%s {...props} /> @@ -5615,23 +5772,23 @@ React keys must be passed directly to JSX without using spread: let props = %s; <%s key={someKey} {...props} />`, pe, - Ge, - pt, - Ge - ), De[Ge + pe] = !0); + Ye, + ft, + Ye + ), Ze[Ye + pe] = !0); } - if (Ge = null, j !== void 0 && (u(j), Ge = "" + j), U(L) && (u(L.key), Ge = "" + L.key), "key" in L) { + if (Ye = null, j !== void 0 && (u(j), Ye = "" + j), U(L) && (u(L.key), Ye = "" + L.key), "key" in L) { j = {}; for (var wn in L) wn !== "key" && (j[wn] = L[wn]); } else j = L; - return Ge && Q( + return Ye && M( j, typeof y == "function" ? y.displayName || y.name || "Unknown" : y ), F( y, - Ge, - Ae, + Ye, + Le, Fe, g(), j, @@ -5639,10 +5796,10 @@ React keys must be passed directly to JSX without using spread: tn ); } - function M(y) { + function k(y) { typeof y == "object" && y !== null && y.$$typeof === A && y._store && (y._store.validated = 1); } - var V = Lh(), A = Symbol.for("react.transitional.element"), ge = Symbol.for("react.portal"), de = Symbol.for("react.fragment"), Me = Symbol.for("react.strict_mode"), ee = Symbol.for("react.profiler"), ae = Symbol.for("react.consumer"), Re = Symbol.for("react.context"), Le = Symbol.for("react.forward_ref"), G = Symbol.for("react.suspense"), Qe = Symbol.for("react.suspense_list"), Te = Symbol.for("react.memo"), Ee = Symbol.for("react.lazy"), ye = Symbol.for("react.activity"), Ue = Symbol.for("react.client.reference"), be = V.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, xe = Object.prototype.hasOwnProperty, Ce = Array.isArray, Ze = console.createTask ? console.createTask : function() { + var V = Lh(), A = Symbol.for("react.transitional.element"), ve = Symbol.for("react.portal"), me = Symbol.for("react.fragment"), Qe = Symbol.for("react.strict_mode"), ne = Symbol.for("react.profiler"), ee = Symbol.for("react.consumer"), ge = Symbol.for("react.context"), we = Symbol.for("react.forward_ref"), G = Symbol.for("react.suspense"), De = Symbol.for("react.suspense_list"), Te = Symbol.for("react.memo"), ke = Symbol.for("react.lazy"), be = Symbol.for("react.activity"), ye = Symbol.for("react.client.reference"), Ve = V.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, Ee = Object.prototype.hasOwnProperty, Ne = Array.isArray, xe = console.createTask ? console.createTask : function() { return null; }; V = { @@ -5650,12 +5807,12 @@ React keys must be passed directly to JSX without using spread: return y(); } }; - var Ne, Z = {}, X = V["react-stack-bottom-frame"].bind( + var Ue, Z = {}, Y = V["react-stack-bottom-frame"].bind( V, S - )(), le = Ze(p(S)), De = {}; - Zf.Fragment = de, Zf.jsx = function(y, L, j, pe, Fe) { - var Ae = 1e4 > be.recentlyCreatedOwnerStacks++; + )(), oe = xe(m(S)), Ze = {}; + Bf.Fragment = me, Bf.jsx = function(y, L, j, pe, Fe) { + var Le = 1e4 > Ve.recentlyCreatedOwnerStacks++; return b( y, L, @@ -5663,11 +5820,11 @@ React keys must be passed directly to JSX without using spread: !1, pe, Fe, - Ae ? Error("react-stack-top-frame") : X, - Ae ? Ze(p(y)) : le + Le ? Error("react-stack-top-frame") : Y, + Le ? xe(m(y)) : oe ); - }, Zf.jsxs = function(y, L, j, pe, Fe) { - var Ae = 1e4 > be.recentlyCreatedOwnerStacks++; + }, Bf.jsxs = function(y, L, j, pe, Fe) { + var Le = 1e4 > Ve.recentlyCreatedOwnerStacks++; return b( y, L, @@ -5675,17 +5832,17 @@ React keys must be passed directly to JSX without using spread: !0, pe, Fe, - Ae ? Error("react-stack-top-frame") : X, - Ae ? Ze(p(y)) : le + Le ? Error("react-stack-top-frame") : Y, + Le ? xe(m(y)) : oe ); }; - }()), Zf; + }()), Bf; } -var a5; -function g4() { - return a5 || (a5 = 1, process.env.NODE_ENV === "production" ? Ig.exports = p4() : Ig.exports = f4()), Ig.exports; +var u5; +function _4() { + return u5 || (u5 = 1, process.env.NODE_ENV === "production" ? Hg.exports = C4() : Hg.exports = F4()), Hg.exports; } -var N = g4(), Wg = { exports: {} }, Of = {}, Hg = { exports: {} }, zS = {}; +var N = _4(), zg = { exports: {} }, wf = {}, jg = { exports: {} }, PS = {}; /** * @license React * scheduler.production.js @@ -5695,169 +5852,169 @@ var N = g4(), Wg = { exports: {} }, Of = {}, Hg = { exports: {} }, zS = {}; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var r5; -function v4() { - return r5 || (r5 = 1, function(c) { - function s(Z, X) { - var le = Z.length; - Z.push(X); - e: for (; 0 < le; ) { - var De = le - 1 >>> 1, y = Z[De]; - if (0 < g(y, X)) - Z[De] = X, Z[le] = y, le = De; +var h5; +function M4() { + return h5 || (h5 = 1, function(l) { + function s(Z, Y) { + var oe = Z.length; + Z.push(Y); + e: for (; 0 < oe; ) { + var Ze = oe - 1 >>> 1, y = Z[Ze]; + if (0 < g(y, Y)) + Z[Ze] = Y, Z[oe] = y, oe = Ze; else break e; } } function u(Z) { return Z.length === 0 ? null : Z[0]; } - function p(Z) { + function m(Z) { if (Z.length === 0) return null; - var X = Z[0], le = Z.pop(); - if (le !== X) { - Z[0] = le; - e: for (var De = 0, y = Z.length, L = y >>> 1; De < L; ) { - var j = 2 * (De + 1) - 1, pe = Z[j], Fe = j + 1, Ae = Z[Fe]; - if (0 > g(pe, le)) - Fe < y && 0 > g(Ae, pe) ? (Z[De] = Ae, Z[Fe] = le, De = Fe) : (Z[De] = pe, Z[j] = le, De = j); - else if (Fe < y && 0 > g(Ae, le)) - Z[De] = Ae, Z[Fe] = le, De = Fe; + var Y = Z[0], oe = Z.pop(); + if (oe !== Y) { + Z[0] = oe; + e: for (var Ze = 0, y = Z.length, L = y >>> 1; Ze < L; ) { + var j = 2 * (Ze + 1) - 1, pe = Z[j], Fe = j + 1, Le = Z[Fe]; + if (0 > g(pe, oe)) + Fe < y && 0 > g(Le, pe) ? (Z[Ze] = Le, Z[Fe] = oe, Ze = Fe) : (Z[Ze] = pe, Z[j] = oe, Ze = j); + else if (Fe < y && 0 > g(Le, oe)) + Z[Ze] = Le, Z[Fe] = oe, Ze = Fe; else break e; } } - return X; + return Y; } - function g(Z, X) { - var le = Z.sortIndex - X.sortIndex; - return le !== 0 ? le : Z.id - X.id; + function g(Z, Y) { + var oe = Z.sortIndex - Y.sortIndex; + return oe !== 0 ? oe : Z.id - Y.id; } - if (c.unstable_now = void 0, typeof performance == "object" && typeof performance.now == "function") { + if (l.unstable_now = void 0, typeof performance == "object" && typeof performance.now == "function") { var S = performance; - c.unstable_now = function() { + l.unstable_now = function() { return S.now(); }; } else { - var U = Date, Q = U.now(); - c.unstable_now = function() { - return U.now() - Q; + var U = Date, M = U.now(); + l.unstable_now = function() { + return U.now() - M; }; } - var T = [], F = [], b = 1, M = null, V = 3, A = !1, ge = !1, de = !1, Me = !1, ee = typeof setTimeout == "function" ? setTimeout : null, ae = typeof clearTimeout == "function" ? clearTimeout : null, Re = typeof setImmediate < "u" ? setImmediate : null; - function Le(Z) { - for (var X = u(F); X !== null; ) { - if (X.callback === null) p(F); - else if (X.startTime <= Z) - p(F), X.sortIndex = X.expirationTime, s(T, X); + var T = [], F = [], b = 1, k = null, V = 3, A = !1, ve = !1, me = !1, Qe = !1, ne = typeof setTimeout == "function" ? setTimeout : null, ee = typeof clearTimeout == "function" ? clearTimeout : null, ge = typeof setImmediate < "u" ? setImmediate : null; + function we(Z) { + for (var Y = u(F); Y !== null; ) { + if (Y.callback === null) m(F); + else if (Y.startTime <= Z) + m(F), Y.sortIndex = Y.expirationTime, s(T, Y); else break; - X = u(F); + Y = u(F); } } function G(Z) { - if (de = !1, Le(Z), !ge) + if (me = !1, we(Z), !ve) if (u(T) !== null) - ge = !0, Qe || (Qe = !0, xe()); + ve = !0, De || (De = !0, Ee()); else { - var X = u(F); - X !== null && Ne(G, X.startTime - Z); + var Y = u(F); + Y !== null && Ue(G, Y.startTime - Z); } } - var Qe = !1, Te = -1, Ee = 5, ye = -1; - function Ue() { - return Me ? !0 : !(c.unstable_now() - ye < Ee); + var De = !1, Te = -1, ke = 5, be = -1; + function ye() { + return Qe ? !0 : !(l.unstable_now() - be < ke); } - function be() { - if (Me = !1, Qe) { - var Z = c.unstable_now(); - ye = Z; - var X = !0; + function Ve() { + if (Qe = !1, De) { + var Z = l.unstable_now(); + be = Z; + var Y = !0; try { e: { - ge = !1, de && (de = !1, ae(Te), Te = -1), A = !0; - var le = V; + ve = !1, me && (me = !1, ee(Te), Te = -1), A = !0; + var oe = V; try { t: { - for (Le(Z), M = u(T); M !== null && !(M.expirationTime > Z && Ue()); ) { - var De = M.callback; - if (typeof De == "function") { - M.callback = null, V = M.priorityLevel; - var y = De( - M.expirationTime <= Z + for (we(Z), k = u(T); k !== null && !(k.expirationTime > Z && ye()); ) { + var Ze = k.callback; + if (typeof Ze == "function") { + k.callback = null, V = k.priorityLevel; + var y = Ze( + k.expirationTime <= Z ); - if (Z = c.unstable_now(), typeof y == "function") { - M.callback = y, Le(Z), X = !0; + if (Z = l.unstable_now(), typeof y == "function") { + k.callback = y, we(Z), Y = !0; break t; } - M === u(T) && p(T), Le(Z); - } else p(T); - M = u(T); + k === u(T) && m(T), we(Z); + } else m(T); + k = u(T); } - if (M !== null) X = !0; + if (k !== null) Y = !0; else { var L = u(F); - L !== null && Ne( + L !== null && Ue( G, L.startTime - Z - ), X = !1; + ), Y = !1; } } break e; } finally { - M = null, V = le, A = !1; + k = null, V = oe, A = !1; } - X = void 0; + Y = void 0; } } finally { - X ? xe() : Qe = !1; + Y ? Ee() : De = !1; } } } - var xe; - if (typeof Re == "function") - xe = function() { - Re(be); + var Ee; + if (typeof ge == "function") + Ee = function() { + ge(Ve); }; else if (typeof MessageChannel < "u") { - var Ce = new MessageChannel(), Ze = Ce.port2; - Ce.port1.onmessage = be, xe = function() { - Ze.postMessage(null); + var Ne = new MessageChannel(), xe = Ne.port2; + Ne.port1.onmessage = Ve, Ee = function() { + xe.postMessage(null); }; } else - xe = function() { - ee(be, 0); + Ee = function() { + ne(Ve, 0); }; - function Ne(Z, X) { - Te = ee(function() { - Z(c.unstable_now()); - }, X); + function Ue(Z, Y) { + Te = ne(function() { + Z(l.unstable_now()); + }, Y); } - c.unstable_IdlePriority = 5, c.unstable_ImmediatePriority = 1, c.unstable_LowPriority = 4, c.unstable_NormalPriority = 3, c.unstable_Profiling = null, c.unstable_UserBlockingPriority = 2, c.unstable_cancelCallback = function(Z) { + l.unstable_IdlePriority = 5, l.unstable_ImmediatePriority = 1, l.unstable_LowPriority = 4, l.unstable_NormalPriority = 3, l.unstable_Profiling = null, l.unstable_UserBlockingPriority = 2, l.unstable_cancelCallback = function(Z) { Z.callback = null; - }, c.unstable_forceFrameRate = function(Z) { + }, l.unstable_forceFrameRate = function(Z) { 0 > Z || 125 < Z ? console.error( "forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported" - ) : Ee = 0 < Z ? Math.floor(1e3 / Z) : 5; - }, c.unstable_getCurrentPriorityLevel = function() { + ) : ke = 0 < Z ? Math.floor(1e3 / Z) : 5; + }, l.unstable_getCurrentPriorityLevel = function() { return V; - }, c.unstable_next = function(Z) { + }, l.unstable_next = function(Z) { switch (V) { case 1: case 2: case 3: - var X = 3; + var Y = 3; break; default: - X = V; + Y = V; } - var le = V; - V = X; + var oe = V; + V = Y; try { return Z(); } finally { - V = le; + V = oe; } - }, c.unstable_requestPaint = function() { - Me = !0; - }, c.unstable_runWithPriority = function(Z, X) { + }, l.unstable_requestPaint = function() { + Qe = !0; + }, l.unstable_runWithPriority = function(Z, Y) { switch (Z) { case 1: case 2: @@ -5868,16 +6025,16 @@ function v4() { default: Z = 3; } - var le = V; + var oe = V; V = Z; try { - return X(); + return Y(); } finally { - V = le; + V = oe; } - }, c.unstable_scheduleCallback = function(Z, X, le) { - var De = c.unstable_now(); - switch (typeof le == "object" && le !== null ? (le = le.delay, le = typeof le == "number" && 0 < le ? De + le : De) : le = De, Z) { + }, l.unstable_scheduleCallback = function(Z, Y, oe) { + var Ze = l.unstable_now(); + switch (typeof oe == "object" && oe !== null ? (oe = oe.delay, oe = typeof oe == "number" && 0 < oe ? Ze + oe : Ze) : oe = Ze, Z) { case 1: var y = -1; break; @@ -5893,29 +6050,29 @@ function v4() { default: y = 5e3; } - return y = le + y, Z = { + return y = oe + y, Z = { id: b++, - callback: X, + callback: Y, priorityLevel: Z, - startTime: le, + startTime: oe, expirationTime: y, sortIndex: -1 - }, le > De ? (Z.sortIndex = le, s(F, Z), u(T) === null && Z === u(F) && (de ? (ae(Te), Te = -1) : de = !0, Ne(G, le - De))) : (Z.sortIndex = y, s(T, Z), ge || A || (ge = !0, Qe || (Qe = !0, xe()))), Z; - }, c.unstable_shouldYield = Ue, c.unstable_wrapCallback = function(Z) { - var X = V; + }, oe > Ze ? (Z.sortIndex = oe, s(F, Z), u(T) === null && Z === u(F) && (me ? (ee(Te), Te = -1) : me = !0, Ue(G, oe - Ze))) : (Z.sortIndex = y, s(T, Z), ve || A || (ve = !0, De || (De = !0, Ee()))), Z; + }, l.unstable_shouldYield = ye, l.unstable_wrapCallback = function(Z) { + var Y = V; return function() { - var le = V; - V = X; + var oe = V; + V = Y; try { return Z.apply(this, arguments); } finally { - V = le; + V = oe; } }; }; - }(zS)), zS; + }(PS)), PS; } -var jS = {}; +var GS = {}; /** * @license React * scheduler.development.js @@ -5925,171 +6082,171 @@ var jS = {}; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var o5; -function S4() { - return o5 || (o5 = 1, function(c) { +var m5; +function k4() { + return m5 || (m5 = 1, function(l) { process.env.NODE_ENV !== "production" && function() { function s() { - if (G = !1, ye) { - var Z = c.unstable_now(); - xe = Z; - var X = !0; + if (G = !1, be) { + var Z = l.unstable_now(); + Ee = Z; + var Y = !0; try { e: { - Re = !1, Le && (Le = !1, Te(Ue), Ue = -1), ae = !0; - var le = ee; + ge = !1, we && (we = !1, Te(ye), ye = -1), ee = !0; + var oe = ne; try { t: { - for (U(Z), Me = p(A); Me !== null && !(Me.expirationTime > Z && T()); ) { - var De = Me.callback; - if (typeof De == "function") { - Me.callback = null, ee = Me.priorityLevel; - var y = De( - Me.expirationTime <= Z + for (U(Z), Qe = m(A); Qe !== null && !(Qe.expirationTime > Z && T()); ) { + var Ze = Qe.callback; + if (typeof Ze == "function") { + Qe.callback = null, ne = Qe.priorityLevel; + var y = Ze( + Qe.expirationTime <= Z ); - if (Z = c.unstable_now(), typeof y == "function") { - Me.callback = y, U(Z), X = !0; + if (Z = l.unstable_now(), typeof y == "function") { + Qe.callback = y, U(Z), Y = !0; break t; } - Me === p(A) && g(A), U(Z); + Qe === m(A) && g(A), U(Z); } else g(A); - Me = p(A); + Qe = m(A); } - if (Me !== null) X = !0; + if (Qe !== null) Y = !0; else { - var L = p(ge); + var L = m(ve); L !== null && F( - Q, + M, L.startTime - Z - ), X = !1; + ), Y = !1; } } break e; } finally { - Me = null, ee = le, ae = !1; + Qe = null, ne = oe, ee = !1; } - X = void 0; + Y = void 0; } } finally { - X ? Ce() : ye = !1; + Y ? Ne() : be = !1; } } } - function u(Z, X) { - var le = Z.length; - Z.push(X); - e: for (; 0 < le; ) { - var De = le - 1 >>> 1, y = Z[De]; - if (0 < S(y, X)) - Z[De] = X, Z[le] = y, le = De; + function u(Z, Y) { + var oe = Z.length; + Z.push(Y); + e: for (; 0 < oe; ) { + var Ze = oe - 1 >>> 1, y = Z[Ze]; + if (0 < S(y, Y)) + Z[Ze] = Y, Z[oe] = y, oe = Ze; else break e; } } - function p(Z) { + function m(Z) { return Z.length === 0 ? null : Z[0]; } function g(Z) { if (Z.length === 0) return null; - var X = Z[0], le = Z.pop(); - if (le !== X) { - Z[0] = le; - e: for (var De = 0, y = Z.length, L = y >>> 1; De < L; ) { - var j = 2 * (De + 1) - 1, pe = Z[j], Fe = j + 1, Ae = Z[Fe]; - if (0 > S(pe, le)) - Fe < y && 0 > S(Ae, pe) ? (Z[De] = Ae, Z[Fe] = le, De = Fe) : (Z[De] = pe, Z[j] = le, De = j); - else if (Fe < y && 0 > S(Ae, le)) - Z[De] = Ae, Z[Fe] = le, De = Fe; + var Y = Z[0], oe = Z.pop(); + if (oe !== Y) { + Z[0] = oe; + e: for (var Ze = 0, y = Z.length, L = y >>> 1; Ze < L; ) { + var j = 2 * (Ze + 1) - 1, pe = Z[j], Fe = j + 1, Le = Z[Fe]; + if (0 > S(pe, oe)) + Fe < y && 0 > S(Le, pe) ? (Z[Ze] = Le, Z[Fe] = oe, Ze = Fe) : (Z[Ze] = pe, Z[j] = oe, Ze = j); + else if (Fe < y && 0 > S(Le, oe)) + Z[Ze] = Le, Z[Fe] = oe, Ze = Fe; else break e; } } - return X; + return Y; } - function S(Z, X) { - var le = Z.sortIndex - X.sortIndex; - return le !== 0 ? le : Z.id - X.id; + function S(Z, Y) { + var oe = Z.sortIndex - Y.sortIndex; + return oe !== 0 ? oe : Z.id - Y.id; } function U(Z) { - for (var X = p(ge); X !== null; ) { - if (X.callback === null) g(ge); - else if (X.startTime <= Z) - g(ge), X.sortIndex = X.expirationTime, u(A, X); + for (var Y = m(ve); Y !== null; ) { + if (Y.callback === null) g(ve); + else if (Y.startTime <= Z) + g(ve), Y.sortIndex = Y.expirationTime, u(A, Y); else break; - X = p(ge); + Y = m(ve); } } - function Q(Z) { - if (Le = !1, U(Z), !Re) - if (p(A) !== null) - Re = !0, ye || (ye = !0, Ce()); + function M(Z) { + if (we = !1, U(Z), !ge) + if (m(A) !== null) + ge = !0, be || (be = !0, Ne()); else { - var X = p(ge); - X !== null && F( - Q, - X.startTime - Z + var Y = m(ve); + Y !== null && F( + M, + Y.startTime - Z ); } } function T() { - return G ? !0 : !(c.unstable_now() - xe < be); + return G ? !0 : !(l.unstable_now() - Ee < Ve); } - function F(Z, X) { - Ue = Qe(function() { - Z(c.unstable_now()); - }, X); + function F(Z, Y) { + ye = De(function() { + Z(l.unstable_now()); + }, Y); } - if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()), c.unstable_now = void 0, typeof performance == "object" && typeof performance.now == "function") { + if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()), l.unstable_now = void 0, typeof performance == "object" && typeof performance.now == "function") { var b = performance; - c.unstable_now = function() { + l.unstable_now = function() { return b.now(); }; } else { - var M = Date, V = M.now(); - c.unstable_now = function() { - return M.now() - V; + var k = Date, V = k.now(); + l.unstable_now = function() { + return k.now() - V; }; } - var A = [], ge = [], de = 1, Me = null, ee = 3, ae = !1, Re = !1, Le = !1, G = !1, Qe = typeof setTimeout == "function" ? setTimeout : null, Te = typeof clearTimeout == "function" ? clearTimeout : null, Ee = typeof setImmediate < "u" ? setImmediate : null, ye = !1, Ue = -1, be = 5, xe = -1; - if (typeof Ee == "function") - var Ce = function() { - Ee(s); + var A = [], ve = [], me = 1, Qe = null, ne = 3, ee = !1, ge = !1, we = !1, G = !1, De = typeof setTimeout == "function" ? setTimeout : null, Te = typeof clearTimeout == "function" ? clearTimeout : null, ke = typeof setImmediate < "u" ? setImmediate : null, be = !1, ye = -1, Ve = 5, Ee = -1; + if (typeof ke == "function") + var Ne = function() { + ke(s); }; else if (typeof MessageChannel < "u") { - var Ze = new MessageChannel(), Ne = Ze.port2; - Ze.port1.onmessage = s, Ce = function() { - Ne.postMessage(null); + var xe = new MessageChannel(), Ue = xe.port2; + xe.port1.onmessage = s, Ne = function() { + Ue.postMessage(null); }; } else - Ce = function() { - Qe(s, 0); + Ne = function() { + De(s, 0); }; - c.unstable_IdlePriority = 5, c.unstable_ImmediatePriority = 1, c.unstable_LowPriority = 4, c.unstable_NormalPriority = 3, c.unstable_Profiling = null, c.unstable_UserBlockingPriority = 2, c.unstable_cancelCallback = function(Z) { + l.unstable_IdlePriority = 5, l.unstable_ImmediatePriority = 1, l.unstable_LowPriority = 4, l.unstable_NormalPriority = 3, l.unstable_Profiling = null, l.unstable_UserBlockingPriority = 2, l.unstable_cancelCallback = function(Z) { Z.callback = null; - }, c.unstable_forceFrameRate = function(Z) { + }, l.unstable_forceFrameRate = function(Z) { 0 > Z || 125 < Z ? console.error( "forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported" - ) : be = 0 < Z ? Math.floor(1e3 / Z) : 5; - }, c.unstable_getCurrentPriorityLevel = function() { - return ee; - }, c.unstable_next = function(Z) { - switch (ee) { + ) : Ve = 0 < Z ? Math.floor(1e3 / Z) : 5; + }, l.unstable_getCurrentPriorityLevel = function() { + return ne; + }, l.unstable_next = function(Z) { + switch (ne) { case 1: case 2: case 3: - var X = 3; + var Y = 3; break; default: - X = ee; + Y = ne; } - var le = ee; - ee = X; + var oe = ne; + ne = Y; try { return Z(); } finally { - ee = le; + ne = oe; } - }, c.unstable_requestPaint = function() { + }, l.unstable_requestPaint = function() { G = !0; - }, c.unstable_runWithPriority = function(Z, X) { + }, l.unstable_runWithPriority = function(Z, Y) { switch (Z) { case 1: case 2: @@ -6100,16 +6257,16 @@ function S4() { default: Z = 3; } - var le = ee; - ee = Z; + var oe = ne; + ne = Z; try { - return X(); + return Y(); } finally { - ee = le; + ne = oe; } - }, c.unstable_scheduleCallback = function(Z, X, le) { - var De = c.unstable_now(); - switch (typeof le == "object" && le !== null ? (le = le.delay, le = typeof le == "number" && 0 < le ? De + le : De) : le = De, Z) { + }, l.unstable_scheduleCallback = function(Z, Y, oe) { + var Ze = l.unstable_now(); + switch (typeof oe == "object" && oe !== null ? (oe = oe.delay, oe = typeof oe == "number" && 0 < oe ? Ze + oe : Ze) : oe = Ze, Z) { case 1: var y = -1; break; @@ -6125,34 +6282,34 @@ function S4() { default: y = 5e3; } - return y = le + y, Z = { - id: de++, - callback: X, + return y = oe + y, Z = { + id: me++, + callback: Y, priorityLevel: Z, - startTime: le, + startTime: oe, expirationTime: y, sortIndex: -1 - }, le > De ? (Z.sortIndex = le, u(ge, Z), p(A) === null && Z === p(ge) && (Le ? (Te(Ue), Ue = -1) : Le = !0, F(Q, le - De))) : (Z.sortIndex = y, u(A, Z), Re || ae || (Re = !0, ye || (ye = !0, Ce()))), Z; - }, c.unstable_shouldYield = T, c.unstable_wrapCallback = function(Z) { - var X = ee; + }, oe > Ze ? (Z.sortIndex = oe, u(ve, Z), m(A) === null && Z === m(ve) && (we ? (Te(ye), ye = -1) : we = !0, F(M, oe - Ze))) : (Z.sortIndex = y, u(A, Z), ge || ee || (ge = !0, be || (be = !0, Ne()))), Z; + }, l.unstable_shouldYield = T, l.unstable_wrapCallback = function(Z) { + var Y = ne; return function() { - var le = ee; - ee = X; + var oe = ne; + ne = Y; try { return Z.apply(this, arguments); } finally { - ee = le; + ne = oe; } }; }, typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); }(); - }(jS)), jS; + }(GS)), GS; } -var s5; -function BE() { - return s5 || (s5 = 1, process.env.NODE_ENV === "production" ? Hg.exports = v4() : Hg.exports = S4()), Hg.exports; +var p5; +function PE() { + return p5 || (p5 = 1, process.env.NODE_ENV === "production" ? jg.exports = M4() : jg.exports = k4()), jg.exports; } -var zg = { exports: {} }, ua = {}; +var Pg = { exports: {} }, ua = {}; /** * @license React * react-dom.production.js @@ -6162,11 +6319,11 @@ var zg = { exports: {} }, ua = {}; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var l5; -function R4() { - if (l5) return ua; - l5 = 1; - var c = Lh(); +var f5; +function Q4() { + if (f5) return ua; + f5 = 1; + var l = Lh(); function s(T) { var F = "https://react.dev/errors/" + T; if (1 < arguments.length) { @@ -6178,7 +6335,7 @@ function R4() { } function u() { } - var p = { + var m = { d: { f: u, r: function() { @@ -6196,50 +6353,50 @@ function R4() { findDOMNode: null }, g = Symbol.for("react.portal"); function S(T, F, b) { - var M = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null; + var k = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null; return { $$typeof: g, - key: M == null ? null : "" + M, + key: k == null ? null : "" + k, children: T, containerInfo: F, implementation: b }; } - var U = c.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; - function Q(T, F) { + var U = l.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; + function M(T, F) { if (T === "font") return ""; if (typeof F == "string") return F === "use-credentials" ? F : ""; } - return ua.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = p, ua.createPortal = function(T, F) { + return ua.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = m, ua.createPortal = function(T, F) { var b = 2 < arguments.length && arguments[2] !== void 0 ? arguments[2] : null; if (!F || F.nodeType !== 1 && F.nodeType !== 9 && F.nodeType !== 11) throw Error(s(299)); return S(T, F, null, b); }, ua.flushSync = function(T) { - var F = U.T, b = p.p; + var F = U.T, b = m.p; try { - if (U.T = null, p.p = 2, T) return T(); + if (U.T = null, m.p = 2, T) return T(); } finally { - U.T = F, p.p = b, p.d.f(); + U.T = F, m.p = b, m.d.f(); } }, ua.preconnect = function(T, F) { - typeof T == "string" && (F ? (F = F.crossOrigin, F = typeof F == "string" ? F === "use-credentials" ? F : "" : void 0) : F = null, p.d.C(T, F)); + typeof T == "string" && (F ? (F = F.crossOrigin, F = typeof F == "string" ? F === "use-credentials" ? F : "" : void 0) : F = null, m.d.C(T, F)); }, ua.prefetchDNS = function(T) { - typeof T == "string" && p.d.D(T); + typeof T == "string" && m.d.D(T); }, ua.preinit = function(T, F) { if (typeof T == "string" && F && typeof F.as == "string") { - var b = F.as, M = Q(b, F.crossOrigin), V = typeof F.integrity == "string" ? F.integrity : void 0, A = typeof F.fetchPriority == "string" ? F.fetchPriority : void 0; - b === "style" ? p.d.S( + var b = F.as, k = M(b, F.crossOrigin), V = typeof F.integrity == "string" ? F.integrity : void 0, A = typeof F.fetchPriority == "string" ? F.fetchPriority : void 0; + b === "style" ? m.d.S( T, typeof F.precedence == "string" ? F.precedence : void 0, { - crossOrigin: M, + crossOrigin: k, integrity: V, fetchPriority: A } - ) : b === "script" && p.d.X(T, { - crossOrigin: M, + ) : b === "script" && m.d.X(T, { + crossOrigin: k, integrity: V, fetchPriority: A, nonce: typeof F.nonce == "string" ? F.nonce : void 0 @@ -6249,22 +6406,22 @@ function R4() { if (typeof T == "string") if (typeof F == "object" && F !== null) { if (F.as == null || F.as === "script") { - var b = Q( + var b = M( F.as, F.crossOrigin ); - p.d.M(T, { + m.d.M(T, { crossOrigin: b, integrity: typeof F.integrity == "string" ? F.integrity : void 0, nonce: typeof F.nonce == "string" ? F.nonce : void 0 }); } - } else F == null && p.d.M(T); + } else F == null && m.d.M(T); }, ua.preload = function(T, F) { if (typeof T == "string" && typeof F == "object" && F !== null && typeof F.as == "string") { - var b = F.as, M = Q(b, F.crossOrigin); - p.d.L(T, b, { - crossOrigin: M, + var b = F.as, k = M(b, F.crossOrigin); + m.d.L(T, b, { + crossOrigin: k, integrity: typeof F.integrity == "string" ? F.integrity : void 0, nonce: typeof F.nonce == "string" ? F.nonce : void 0, type: typeof F.type == "string" ? F.type : void 0, @@ -6278,15 +6435,15 @@ function R4() { }, ua.preloadModule = function(T, F) { if (typeof T == "string") if (F) { - var b = Q(F.as, F.crossOrigin); - p.d.m(T, { + var b = M(F.as, F.crossOrigin); + m.d.m(T, { as: typeof F.as == "string" && F.as !== "script" ? F.as : void 0, crossOrigin: b, integrity: typeof F.integrity == "string" ? F.integrity : void 0 }); - } else p.d.m(T); + } else m.d.m(T); }, ua.requestFormReset = function(T) { - p.d.r(T); + m.d.r(T); }, ua.unstable_batchedUpdates = function(T, F) { return T(F); }, ua.useFormState = function(T, F, b) { @@ -6305,93 +6462,93 @@ var ha = {}; * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var c5; -function E4() { - return c5 || (c5 = 1, process.env.NODE_ENV !== "production" && function() { - function c() { +var g5; +function D4() { + return g5 || (g5 = 1, process.env.NODE_ENV !== "production" && function() { + function l() { } - function s(M) { - return "" + M; + function s(k) { + return "" + k; } - function u(M, V, A) { - var ge = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null; + function u(k, V, A) { + var ve = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null; try { - s(ge); - var de = !1; + s(ve); + var me = !1; } catch { - de = !0; + me = !0; } - return de && (console.error( + return me && (console.error( "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", - typeof Symbol == "function" && Symbol.toStringTag && ge[Symbol.toStringTag] || ge.constructor.name || "Object" - ), s(ge)), { + typeof Symbol == "function" && Symbol.toStringTag && ve[Symbol.toStringTag] || ve.constructor.name || "Object" + ), s(ve)), { $$typeof: F, - key: ge == null ? null : "" + ge, - children: M, + key: ve == null ? null : "" + ve, + children: k, containerInfo: V, implementation: A }; } - function p(M, V) { - if (M === "font") return ""; + function m(k, V) { + if (k === "font") return ""; if (typeof V == "string") return V === "use-credentials" ? V : ""; } - function g(M) { - return M === null ? "`null`" : M === void 0 ? "`undefined`" : M === "" ? "an empty string" : 'something with type "' + typeof M + '"'; + function g(k) { + return k === null ? "`null`" : k === void 0 ? "`undefined`" : k === "" ? "an empty string" : 'something with type "' + typeof k + '"'; } - function S(M) { - return M === null ? "`null`" : M === void 0 ? "`undefined`" : M === "" ? "an empty string" : typeof M == "string" ? JSON.stringify(M) : typeof M == "number" ? "`" + M + "`" : 'something with type "' + typeof M + '"'; + function S(k) { + return k === null ? "`null`" : k === void 0 ? "`undefined`" : k === "" ? "an empty string" : typeof k == "string" ? JSON.stringify(k) : typeof k == "number" ? "`" + k + "`" : 'something with type "' + typeof k + '"'; } function U() { - var M = b.H; - return M === null && console.error( + var k = b.H; + return k === null && console.error( `Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: 1. You might have mismatching versions of React and the renderer (such as React DOM) 2. You might be breaking the Rules of Hooks 3. You might have more than one copy of React in the same app See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.` - ), M; + ), k; } typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); - var Q = Lh(), T = { + var M = Lh(), T = { d: { - f: c, + f: l, r: function() { throw Error( "Invalid form element. requestFormReset must be passed a form that was rendered by React." ); }, - D: c, - C: c, - L: c, - m: c, - X: c, - S: c, - M: c + D: l, + C: l, + L: l, + m: l, + X: l, + S: l, + M: l }, p: 0, findDOMNode: null - }, F = Symbol.for("react.portal"), b = Q.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; + }, F = Symbol.for("react.portal"), b = M.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; typeof Map == "function" && Map.prototype != null && typeof Map.prototype.forEach == "function" && typeof Set == "function" && Set.prototype != null && typeof Set.prototype.clear == "function" && typeof Set.prototype.forEach == "function" || console.error( "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills" - ), ha.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = T, ha.createPortal = function(M, V) { + ), ha.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = T, ha.createPortal = function(k, V) { var A = 2 < arguments.length && arguments[2] !== void 0 ? arguments[2] : null; if (!V || V.nodeType !== 1 && V.nodeType !== 9 && V.nodeType !== 11) throw Error("Target container is not a DOM element."); - return u(M, V, null, A); - }, ha.flushSync = function(M) { + return u(k, V, null, A); + }, ha.flushSync = function(k) { var V = b.T, A = T.p; try { - if (b.T = null, T.p = 2, M) - return M(); + if (b.T = null, T.p = 2, k) + return k(); } finally { b.T = V, T.p = A, T.d.f() && console.error( "flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task." ); } - }, ha.preconnect = function(M, V) { - typeof M == "string" && M ? V != null && typeof V != "object" ? console.error( + }, ha.preconnect = function(k, V) { + typeof k == "string" && k ? V != null && typeof V != "object" ? console.error( "ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.", S(V) ) : V != null && typeof V.crossOrigin != "string" && console.error( @@ -6399,13 +6556,13 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix g(V.crossOrigin) ) : console.error( "ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", - g(M) - ), typeof M == "string" && (V ? (V = V.crossOrigin, V = typeof V == "string" ? V === "use-credentials" ? V : "" : void 0) : V = null, T.d.C(M, V)); - }, ha.prefetchDNS = function(M) { - if (typeof M != "string" || !M) + g(k) + ), typeof k == "string" && (V ? (V = V.crossOrigin, V = typeof V == "string" ? V === "use-credentials" ? V : "" : void 0) : V = null, T.d.C(k, V)); + }, ha.prefetchDNS = function(k) { + if (typeof k != "string" || !k) console.error( "ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", - g(M) + g(k) ); else if (1 < arguments.length) { var V = arguments[1]; @@ -6417,9 +6574,9 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix S(V) ); } - typeof M == "string" && T.d.D(M); - }, ha.preinit = function(M, V) { - if (typeof M == "string" && M ? V == null || typeof V != "object" ? console.error( + typeof k == "string" && T.d.D(k); + }, ha.preinit = function(k, V) { + if (typeof k == "string" && k ? V == null || typeof V != "object" ? console.error( "ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.", S(V) ) : V.as !== "style" && V.as !== "script" && console.error( @@ -6427,27 +6584,27 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix S(V.as) ) : console.error( "ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", - g(M) - ), typeof M == "string" && V && typeof V.as == "string") { - var A = V.as, ge = p(A, V.crossOrigin), de = typeof V.integrity == "string" ? V.integrity : void 0, Me = typeof V.fetchPriority == "string" ? V.fetchPriority : void 0; + g(k) + ), typeof k == "string" && V && typeof V.as == "string") { + var A = V.as, ve = m(A, V.crossOrigin), me = typeof V.integrity == "string" ? V.integrity : void 0, Qe = typeof V.fetchPriority == "string" ? V.fetchPriority : void 0; A === "style" ? T.d.S( - M, + k, typeof V.precedence == "string" ? V.precedence : void 0, { - crossOrigin: ge, - integrity: de, - fetchPriority: Me - } - ) : A === "script" && T.d.X(M, { - crossOrigin: ge, - integrity: de, - fetchPriority: Me, + crossOrigin: ve, + integrity: me, + fetchPriority: Qe + } + ) : A === "script" && T.d.X(k, { + crossOrigin: ve, + integrity: me, + fetchPriority: Qe, nonce: typeof V.nonce == "string" ? V.nonce : void 0 }); } - }, ha.preinitModule = function(M, V) { + }, ha.preinitModule = function(k, V) { var A = ""; - if (typeof M == "string" && M || (A += " The `href` argument encountered was " + g(M) + "."), V !== void 0 && typeof V != "object" ? A += " The `options` argument encountered was " + g(V) + "." : V && "as" in V && V.as !== "script" && (A += " The `as` option encountered was " + S(V.as) + "."), A) + if (typeof k == "string" && k || (A += " The `href` argument encountered was " + g(k) + "."), V !== void 0 && typeof V != "object" ? A += " The `options` argument encountered was " + g(V) + "." : V && "as" in V && V.as !== "script" && (A += " The `as` option encountered was " + S(V.as) + "."), A) console.error( "ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s", A @@ -6460,30 +6617,30 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix A = S(A), console.error( 'ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)', A, - M + k ); } - typeof M == "string" && (typeof V == "object" && V !== null ? (V.as == null || V.as === "script") && (A = p( + typeof k == "string" && (typeof V == "object" && V !== null ? (V.as == null || V.as === "script") && (A = m( V.as, V.crossOrigin - ), T.d.M(M, { + ), T.d.M(k, { crossOrigin: A, integrity: typeof V.integrity == "string" ? V.integrity : void 0, nonce: typeof V.nonce == "string" ? V.nonce : void 0 - })) : V == null && T.d.M(M)); - }, ha.preload = function(M, V) { + })) : V == null && T.d.M(k)); + }, ha.preload = function(k, V) { var A = ""; - if (typeof M == "string" && M || (A += " The `href` argument encountered was " + g(M) + "."), V == null || typeof V != "object" ? A += " The `options` argument encountered was " + g(V) + "." : typeof V.as == "string" && V.as || (A += " The `as` option encountered was " + g(V.as) + "."), A && console.error( + if (typeof k == "string" && k || (A += " The `href` argument encountered was " + g(k) + "."), V == null || typeof V != "object" ? A += " The `options` argument encountered was " + g(V) + "." : typeof V.as == "string" && V.as || (A += " The `as` option encountered was " + g(V.as) + "."), A && console.error( 'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `` tag.%s', A - ), typeof M == "string" && typeof V == "object" && V !== null && typeof V.as == "string") { + ), typeof k == "string" && typeof V == "object" && V !== null && typeof V.as == "string") { A = V.as; - var ge = p( + var ve = m( A, V.crossOrigin ); - T.d.L(M, A, { - crossOrigin: ge, + T.d.L(k, A, { + crossOrigin: ve, integrity: typeof V.integrity == "string" ? V.integrity : void 0, nonce: typeof V.nonce == "string" ? V.nonce : void 0, type: typeof V.type == "string" ? V.type : void 0, @@ -6494,46 +6651,46 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix media: typeof V.media == "string" ? V.media : void 0 }); } - }, ha.preloadModule = function(M, V) { + }, ha.preloadModule = function(k, V) { var A = ""; - typeof M == "string" && M || (A += " The `href` argument encountered was " + g(M) + "."), V !== void 0 && typeof V != "object" ? A += " The `options` argument encountered was " + g(V) + "." : V && "as" in V && typeof V.as != "string" && (A += " The `as` option encountered was " + g(V.as) + "."), A && console.error( + typeof k == "string" && k || (A += " The `href` argument encountered was " + g(k) + "."), V !== void 0 && typeof V != "object" ? A += " The `options` argument encountered was " + g(V) + "." : V && "as" in V && typeof V.as != "string" && (A += " The `as` option encountered was " + g(V.as) + "."), A && console.error( 'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `` tag.%s', A - ), typeof M == "string" && (V ? (A = p( + ), typeof k == "string" && (V ? (A = m( V.as, V.crossOrigin - ), T.d.m(M, { + ), T.d.m(k, { as: typeof V.as == "string" && V.as !== "script" ? V.as : void 0, crossOrigin: A, integrity: typeof V.integrity == "string" ? V.integrity : void 0 - })) : T.d.m(M)); - }, ha.requestFormReset = function(M) { - T.d.r(M); - }, ha.unstable_batchedUpdates = function(M, V) { - return M(V); - }, ha.useFormState = function(M, V, A) { - return U().useFormState(M, V, A); + })) : T.d.m(k)); + }, ha.requestFormReset = function(k) { + T.d.r(k); + }, ha.unstable_batchedUpdates = function(k, V) { + return k(V); + }, ha.useFormState = function(k, V, A) { + return U().useFormState(k, V, A); }, ha.useFormStatus = function() { return U().useHostTransitionStatus(); }, ha.version = "19.1.0", typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); }()), ha; } -var d5; -function wE() { - if (d5) return zg.exports; - d5 = 1; - function c() { +var v5; +function GE() { + if (v5) return Pg.exports; + v5 = 1; + function l() { if (!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ > "u" || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE != "function")) { if (process.env.NODE_ENV !== "production") throw new Error("^_^"); try { - __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c); + __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(l); } catch (s) { console.error(s); } } } - return process.env.NODE_ENV === "production" ? (c(), zg.exports = R4()) : zg.exports = E4(), zg.exports; + return process.env.NODE_ENV === "production" ? (l(), Pg.exports = Q4()) : Pg.exports = D4(), Pg.exports; } /** * @license React @@ -6544,12 +6701,12 @@ function wE() { * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var u5; -function U4() { - if (u5) return Of; - u5 = 1; - var c = BE(), s = Lh(), u = wE(); - function p(n) { +var S5; +function x4() { + if (S5) return wf; + S5 = 1; + var l = PE(), s = Lh(), u = GE(); + function m(n) { var a = "https://react.dev/errors/" + n; if (1 < arguments.length) { a += "?args[]=" + encodeURIComponent(arguments[1]); @@ -6579,44 +6736,44 @@ function U4() { } return null; } - function Q(n) { + function M(n) { if (S(n) !== n) - throw Error(p(188)); + throw Error(m(188)); } function T(n) { var a = n.alternate; if (!a) { - if (a = S(n), a === null) throw Error(p(188)); + if (a = S(n), a === null) throw Error(m(188)); return a !== n ? null : n; } - for (var r = n, l = a; ; ) { - var m = r.return; - if (m === null) break; - var f = m.alternate; + for (var r = n, c = a; ; ) { + var p = r.return; + if (p === null) break; + var f = p.alternate; if (f === null) { - if (l = m.return, l !== null) { - r = l; + if (c = p.return, c !== null) { + r = c; continue; } break; } - if (m.child === f.child) { - for (f = m.child; f; ) { - if (f === r) return Q(m), n; - if (f === l) return Q(m), a; + if (p.child === f.child) { + for (f = p.child; f; ) { + if (f === r) return M(p), n; + if (f === c) return M(p), a; f = f.sibling; } - throw Error(p(188)); + throw Error(m(188)); } - if (r.return !== l.return) r = m, l = f; + if (r.return !== c.return) r = p, c = f; else { - for (var E = !1, _ = m.child; _; ) { + for (var E = !1, _ = p.child; _; ) { if (_ === r) { - E = !0, r = m, l = f; + E = !0, r = p, c = f; break; } - if (_ === l) { - E = !0, l = m, r = f; + if (_ === c) { + E = !0, c = p, r = f; break; } _ = _.sibling; @@ -6624,21 +6781,21 @@ function U4() { if (!E) { for (_ = f.child; _; ) { if (_ === r) { - E = !0, r = f, l = m; + E = !0, r = f, c = p; break; } - if (_ === l) { - E = !0, l = f, r = m; + if (_ === c) { + E = !0, c = f, r = p; break; } _ = _.sibling; } - if (!E) throw Error(p(189)); + if (!E) throw Error(m(189)); } } - if (r.alternate !== l) throw Error(p(190)); + if (r.alternate !== c) throw Error(m(190)); } - if (r.tag !== 3) throw Error(p(188)); + if (r.tag !== 3) throw Error(m(188)); return r.stateNode.current === r ? n : a; } function F(n) { @@ -6650,77 +6807,77 @@ function U4() { } return null; } - var b = Object.assign, M = Symbol.for("react.element"), V = Symbol.for("react.transitional.element"), A = Symbol.for("react.portal"), ge = Symbol.for("react.fragment"), de = Symbol.for("react.strict_mode"), Me = Symbol.for("react.profiler"), ee = Symbol.for("react.provider"), ae = Symbol.for("react.consumer"), Re = Symbol.for("react.context"), Le = Symbol.for("react.forward_ref"), G = Symbol.for("react.suspense"), Qe = Symbol.for("react.suspense_list"), Te = Symbol.for("react.memo"), Ee = Symbol.for("react.lazy"), ye = Symbol.for("react.activity"), Ue = Symbol.for("react.memo_cache_sentinel"), be = Symbol.iterator; - function xe(n) { - return n === null || typeof n != "object" ? null : (n = be && n[be] || n["@@iterator"], typeof n == "function" ? n : null); + var b = Object.assign, k = Symbol.for("react.element"), V = Symbol.for("react.transitional.element"), A = Symbol.for("react.portal"), ve = Symbol.for("react.fragment"), me = Symbol.for("react.strict_mode"), Qe = Symbol.for("react.profiler"), ne = Symbol.for("react.provider"), ee = Symbol.for("react.consumer"), ge = Symbol.for("react.context"), we = Symbol.for("react.forward_ref"), G = Symbol.for("react.suspense"), De = Symbol.for("react.suspense_list"), Te = Symbol.for("react.memo"), ke = Symbol.for("react.lazy"), be = Symbol.for("react.activity"), ye = Symbol.for("react.memo_cache_sentinel"), Ve = Symbol.iterator; + function Ee(n) { + return n === null || typeof n != "object" ? null : (n = Ve && n[Ve] || n["@@iterator"], typeof n == "function" ? n : null); } - var Ce = Symbol.for("react.client.reference"); - function Ze(n) { + var Ne = Symbol.for("react.client.reference"); + function xe(n) { if (n == null) return null; if (typeof n == "function") - return n.$$typeof === Ce ? null : n.displayName || n.name || null; + return n.$$typeof === Ne ? null : n.displayName || n.name || null; if (typeof n == "string") return n; switch (n) { - case ge: + case ve: return "Fragment"; - case Me: + case Qe: return "Profiler"; - case de: + case me: return "StrictMode"; case G: return "Suspense"; - case Qe: + case De: return "SuspenseList"; - case ye: + case be: return "Activity"; } if (typeof n == "object") switch (n.$$typeof) { case A: return "Portal"; - case Re: + case ge: return (n.displayName || "Context") + ".Provider"; - case ae: + case ee: return (n._context.displayName || "Context") + ".Consumer"; - case Le: + case we: var a = n.render; return n = n.displayName, n || (n = a.displayName || a.name || "", n = n !== "" ? "ForwardRef(" + n + ")" : "ForwardRef"), n; case Te: - return a = n.displayName || null, a !== null ? a : Ze(n.type) || "Memo"; - case Ee: + return a = n.displayName || null, a !== null ? a : xe(n.type) || "Memo"; + case ke: a = n._payload, n = n._init; try { - return Ze(n(a)); + return xe(n(a)); } catch { } } return null; } - var Ne = Array.isArray, Z = s.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, X = u.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, le = { + var Ue = Array.isArray, Z = s.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, Y = u.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, oe = { pending: !1, data: null, method: null, action: null - }, De = [], y = -1; + }, Ze = [], y = -1; function L(n) { return { current: n }; } function j(n) { - 0 > y || (n.current = De[y], De[y] = null, y--); + 0 > y || (n.current = Ze[y], Ze[y] = null, y--); } function pe(n, a) { - y++, De[y] = n.current, n.current = a; + y++, Ze[y] = n.current, n.current = a; } - var Fe = L(null), Ae = L(null), Oe = L(null), tn = L(null); - function Ge(n, a) { - switch (pe(Oe, a), pe(Ae, n), pe(Fe, null), a.nodeType) { + var Fe = L(null), Le = L(null), Oe = L(null), tn = L(null); + function Ye(n, a) { + switch (pe(Oe, a), pe(Le, n), pe(Fe, null), a.nodeType) { case 9: case 11: - n = (n = a.documentElement) && (n = n.namespaceURI) ? Bo(n) : 0; + n = (n = a.documentElement) && (n = n.namespaceURI) ? Ao(n) : 0; break; default: if (n = a.tagName, a = a.namespaceURI) - a = Bo(a), n = Ic(a, n); + a = Ao(a), n = Hc(a, n); else switch (n) { case "svg": @@ -6735,31 +6892,31 @@ function U4() { } j(Fe), pe(Fe, n); } - function pt() { - j(Fe), j(Ae), j(Oe); + function ft() { + j(Fe), j(Le), j(Oe); } function wn(n) { n.memoizedState !== null && pe(tn, n); - var a = Fe.current, r = Ic(a, n.type); - a !== r && (pe(Ae, n), pe(Fe, r)); + var a = Fe.current, r = Hc(a, n.type); + a !== r && (pe(Le, n), pe(Fe, r)); } function Hn(n) { - Ae.current === n && (j(Fe), j(Ae)), tn.current === n && (j(tn), ca._currentValue = le); + Le.current === n && (j(Fe), j(Le)), tn.current === n && (j(tn), ca._currentValue = oe); } - var qt = Object.prototype.hasOwnProperty, ti = c.unstable_scheduleCallback, Da = c.unstable_cancelCallback, er = c.unstable_shouldYield, gn = c.unstable_requestPaint, vn = c.unstable_now, Ot = c.unstable_getCurrentPriorityLevel, Rr = c.unstable_ImmediatePriority, vt = c.unstable_UserBlockingPriority, Pi = c.unstable_NormalPriority, yi = c.unstable_LowPriority, fa = c.unstable_IdlePriority, Ni = c.log, po = c.unstable_setDisableYieldValue, Gi = null, An = null; + var qt = Object.prototype.hasOwnProperty, ti = l.unstable_scheduleCallback, Da = l.unstable_cancelCallback, tr = l.unstable_shouldYield, vn = l.unstable_requestPaint, Sn = l.unstable_now, Ot = l.unstable_getCurrentPriorityLevel, Ur = l.unstable_ImmediatePriority, vt = l.unstable_UserBlockingPriority, Pi = l.unstable_NormalPriority, yi = l.unstable_LowPriority, fa = l.unstable_IdlePriority, Ni = l.log, go = l.unstable_setDisableYieldValue, Gi = null, An = null; function bi(n) { - if (typeof Ni == "function" && po(n), An && typeof An.setStrictMode == "function") + if (typeof Ni == "function" && go(n), An && typeof An.setStrictMode == "function") try { An.setStrictMode(Gi, n); } catch { } } - var Jn = Math.clz32 ? Math.clz32 : Ur, Er = Math.log, fo = Math.LN2; - function Ur(n) { - return n >>>= 0, n === 0 ? 32 : 31 - (Er(n) / fo | 0) | 0; + var Jn = Math.clz32 ? Math.clz32 : yr, Tr = Math.log, vo = Math.LN2; + function yr(n) { + return n >>>= 0, n === 0 ? 32 : 31 - (Tr(n) / vo | 0) | 0; } var Zi = 256, ni = 4194304; - function yn(n) { + function Nn(n) { var a = n & 42; if (a !== 0) return a; switch (n & -n) { @@ -6814,12 +6971,12 @@ function U4() { } } function Oi(n, a, r) { - var l = n.pendingLanes; - if (l === 0) return 0; - var m = 0, f = n.suspendedLanes, E = n.pingedLanes; + var c = n.pendingLanes; + if (c === 0) return 0; + var p = 0, f = n.suspendedLanes, E = n.pingedLanes; n = n.warmLanes; - var _ = l & 134217727; - return _ !== 0 ? (l = _ & ~f, l !== 0 ? m = yn(l) : (E &= _, E !== 0 ? m = yn(E) : r || (r = _ & ~n, r !== 0 && (m = yn(r))))) : (_ = l & ~f, _ !== 0 ? m = yn(_) : E !== 0 ? m = yn(E) : r || (r = l & ~n, r !== 0 && (m = yn(r)))), m === 0 ? 0 : a !== 0 && a !== m && (a & f) === 0 && (f = m & -m, r = a & -a, f >= r || f === 32 && (r & 4194048) !== 0) ? a : m; + var _ = c & 134217727; + return _ !== 0 ? (c = _ & ~f, c !== 0 ? p = Nn(c) : (E &= _, E !== 0 ? p = Nn(E) : r || (r = _ & ~n, r !== 0 && (p = Nn(r))))) : (_ = c & ~f, _ !== 0 ? p = Nn(_) : E !== 0 ? p = Nn(E) : r || (r = c & ~n, r !== 0 && (p = Nn(r)))), p === 0 ? 0 : a !== 0 && a !== p && (a & f) === 0 && (f = p & -p, r = a & -a, f >= r || f === 32 && (r & 4194048) !== 0) ? a : p; } function C(n, a) { return (n.pendingLanes & ~(n.suspendedLanes & ~n.pingedLanes) & a) === 0; @@ -6865,7 +7022,7 @@ function U4() { return -1; } } - function ke() { + function Me() { var n = Zi; return Zi <<= 1, (Zi & 4194048) === 0 && (Zi = 256), n; } @@ -6873,43 +7030,43 @@ function U4() { var n = ni; return ni <<= 1, (ni & 62914560) === 0 && (ni = 4194304), n; } - function je(n) { + function Pe(n) { for (var a = [], r = 0; 31 > r; r++) a.push(n); return a; } - function lt(n, a) { + function ct(n, a) { n.pendingLanes |= a, a !== 268435456 && (n.suspendedLanes = 0, n.pingedLanes = 0, n.warmLanes = 0); } - function ft(n, a, r, l, m, f) { + function gt(n, a, r, c, p, f) { var E = n.pendingLanes; n.pendingLanes = r, n.suspendedLanes = 0, n.pingedLanes = 0, n.warmLanes = 0, n.expiredLanes &= r, n.entangledLanes &= r, n.errorRecoveryDisabledLanes &= r, n.shellSuspendCounter = 0; var _ = n.entanglements, O = n.expirationTimes, q = n.hiddenUpdates; for (r = E & ~r; 0 < r; ) { - var fe = 31 - Jn(r), Se = 1 << fe; + var fe = 31 - Jn(r), Re = 1 << fe; _[fe] = 0, O[fe] = -1; var te = q[fe]; if (te !== null) for (q[fe] = null, fe = 0; fe < te.length; fe++) { - var ie = te[fe]; - ie !== null && (ie.lane &= -536870913); + var ae = te[fe]; + ae !== null && (ae.lane &= -536870913); } - r &= ~Se; + r &= ~Re; } - l !== 0 && Vt(n, l, 0), f !== 0 && m === 0 && n.tag !== 0 && (n.suspendedLanes |= f & ~(E & ~a)); + c !== 0 && Vt(n, c, 0), f !== 0 && p === 0 && n.tag !== 0 && (n.suspendedLanes |= f & ~(E & ~a)); } function Vt(n, a, r) { n.pendingLanes |= a, n.suspendedLanes &= ~a; - var l = 31 - Jn(a); - n.entangledLanes |= a, n.entanglements[l] = n.entanglements[l] | 1073741824 | r & 4194090; + var c = 31 - Jn(a); + n.entangledLanes |= a, n.entanglements[c] = n.entanglements[c] | 1073741824 | r & 4194090; } - function dt(n, a) { + function ut(n, a) { var r = n.entangledLanes |= a; for (n = n.entanglements; r; ) { - var l = 31 - Jn(r), m = 1 << l; - m & a | n[l] & a && (n[l] |= a), r &= ~m; + var c = 31 - Jn(r), p = 1 << c; + p & a | n[c] & a && (n[c] |= a), r &= ~p; } } - function Sn(n) { + function Rn(n) { switch (n) { case 2: n = 1; @@ -6952,19 +7109,19 @@ function U4() { return n &= -n, 2 < n ? 8 < n ? (n & 134217727) !== 0 ? 32 : 268435456 : 8 : 2; } function qo() { - var n = X.p; - return n !== 0 ? n : (n = window.event, n === void 0 ? 32 : Pp(n.type)); + var n = Y.p; + return n !== 0 ? n : (n = window.event, n === void 0 ? 32 : Gp(n.type)); } - function go(n, a) { - var r = X.p; + function So(n, a) { + var r = Y.p; try { - return X.p = n, a(); + return Y.p = n, a(); } finally { - X.p = r; + Y.p = r; } } - var dn = Math.random().toString(36).slice(2), nn = "__reactFiber$" + dn, Gn = "__reactProps$" + dn, Yi = "__reactContainer$" + dn, $o = "__reactEvents$" + dn, x = "__reactListeners$" + dn, W = "__reactHandles$" + dn, Ve = "__reactResources$" + dn, he = "__reactMarker$" + dn; - function ut(n) { + var dn = Math.random().toString(36).slice(2), nn = "__reactFiber$" + dn, Gn = "__reactProps$" + dn, Yi = "__reactContainer$" + dn, $o = "__reactEvents$" + dn, x = "__reactListeners$" + dn, W = "__reactHandles$" + dn, Ce = "__reactResources$" + dn, ue = "__reactMarker$" + dn; + function ht(n) { delete n[nn], delete n[Gn], delete n[$o], delete n[x], delete n[W]; } function tt(n) { @@ -6983,7 +7140,7 @@ function U4() { } return null; } - function qe(n) { + function $e(n) { if (n = n[nn] || n[Yi]) { var a = n.tag; if (a === 5 || a === 6 || a === 13 || a === 26 || a === 27 || a === 3) @@ -6994,31 +7151,31 @@ function U4() { function Ct(n) { var a = n.tag; if (a === 5 || a === 26 || a === 27 || a === 6) return n.stateNode; - throw Error(p(33)); + throw Error(m(33)); } function Pt(n) { - var a = n[Ve]; - return a || (a = n[Ve] = { hoistableStyles: /* @__PURE__ */ new Map(), hoistableScripts: /* @__PURE__ */ new Map() }), a; + var a = n[Ce]; + return a || (a = n[Ce] = { hoistableStyles: /* @__PURE__ */ new Map(), hoistableScripts: /* @__PURE__ */ new Map() }), a; } function un(n) { - n[he] = !0; + n[ue] = !0; } - var vd = /* @__PURE__ */ new Set(), ga = {}; + var Rd = /* @__PURE__ */ new Set(), ga = {}; function es(n, a) { ts(n, a), ts(n + "Capture", a); } function ts(n, a) { for (ga[n] = a, n = 0; n < a.length; n++) - vd.add(a[n]); + Rd.add(a[n]); } - var Xf = RegExp( + var qf = RegExp( "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" - ), du = {}, Hh = {}; - function Kf(n) { - return qt.call(Hh, n) ? !0 : qt.call(du, n) ? !1 : Xf.test(n) ? Hh[n] = !0 : (du[n] = !0, !1); + ), hu = {}, zh = {}; + function $f(n) { + return qt.call(zh, n) ? !0 : qt.call(hu, n) ? !1 : qf.test(n) ? zh[n] = !0 : (hu[n] = !0, !1); } - function vo(n, a, r) { - if (Kf(a)) + function Ro(n, a, r) { + if ($f(a)) if (r === null) n.removeAttribute(a); else { switch (typeof r) { @@ -7028,8 +7185,8 @@ function U4() { n.removeAttribute(a); return; case "boolean": - var l = a.toLowerCase().slice(0, 5); - if (l !== "data-" && l !== "aria-") { + var c = a.toLowerCase().slice(0, 5); + if (c !== "data-" && c !== "aria-") { n.removeAttribute(a); return; } @@ -7037,7 +7194,7 @@ function U4() { n.setAttribute(a, "" + r); } } - function Sd(n, a, r) { + function Ed(n, a, r) { if (r === null) n.removeAttribute(a); else { switch (typeof r) { @@ -7051,10 +7208,10 @@ function U4() { n.setAttribute(a, "" + r); } } - function Tr(n, a, r, l) { - if (l === null) n.removeAttribute(r); + function Nr(n, a, r, c) { + if (c === null) n.removeAttribute(r); else { - switch (typeof l) { + switch (typeof c) { case "undefined": case "function": case "symbol": @@ -7062,21 +7219,21 @@ function U4() { n.removeAttribute(r); return; } - n.setAttributeNS(a, r, "" + l); + n.setAttributeNS(a, r, "" + c); } } - var uu, zh; - function Ws(n) { - if (uu === void 0) + var mu, jh; + function Hs(n) { + if (mu === void 0) try { throw Error(); } catch (r) { var a = r.stack.trim().match(/\n( *(at )?)/); - uu = a && a[1] || "", zh = -1 < r.stack.indexOf(` + mu = a && a[1] || "", jh = -1 < r.stack.indexOf(` at`) ? " ()" : -1 < r.stack.indexOf("@") ? "@unknown:0:0" : ""; } return ` -` + uu + n + zh; +` + mu + n + jh; } var wi = !1; function ns(n, a) { @@ -7085,102 +7242,102 @@ function U4() { var r = Error.prepareStackTrace; Error.prepareStackTrace = void 0; try { - var l = { + var c = { DetermineComponentFrameRoot: function() { try { if (a) { - var Se = function() { + var Re = function() { throw Error(); }; - if (Object.defineProperty(Se.prototype, "props", { + if (Object.defineProperty(Re.prototype, "props", { set: function() { throw Error(); } }), typeof Reflect == "object" && Reflect.construct) { try { - Reflect.construct(Se, []); - } catch (ie) { - var te = ie; + Reflect.construct(Re, []); + } catch (ae) { + var te = ae; } - Reflect.construct(n, [], Se); + Reflect.construct(n, [], Re); } else { try { - Se.call(); - } catch (ie) { - te = ie; + Re.call(); + } catch (ae) { + te = ae; } - n.call(Se.prototype); + n.call(Re.prototype); } } else { try { throw Error(); - } catch (ie) { - te = ie; + } catch (ae) { + te = ae; } - (Se = n()) && typeof Se.catch == "function" && Se.catch(function() { + (Re = n()) && typeof Re.catch == "function" && Re.catch(function() { }); } - } catch (ie) { - if (ie && te && typeof ie.stack == "string") - return [ie.stack, te.stack]; + } catch (ae) { + if (ae && te && typeof ae.stack == "string") + return [ae.stack, te.stack]; } return [null, null]; } }; - l.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot"; - var m = Object.getOwnPropertyDescriptor( - l.DetermineComponentFrameRoot, + c.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot"; + var p = Object.getOwnPropertyDescriptor( + c.DetermineComponentFrameRoot, "name" ); - m && m.configurable && Object.defineProperty( - l.DetermineComponentFrameRoot, + p && p.configurable && Object.defineProperty( + c.DetermineComponentFrameRoot, "name", { value: "DetermineComponentFrameRoot" } ); - var f = l.DetermineComponentFrameRoot(), E = f[0], _ = f[1]; + var f = c.DetermineComponentFrameRoot(), E = f[0], _ = f[1]; if (E && _) { var O = E.split(` `), q = _.split(` `); - for (m = l = 0; l < O.length && !O[l].includes("DetermineComponentFrameRoot"); ) - l++; - for (; m < q.length && !q[m].includes( + for (p = c = 0; c < O.length && !O[c].includes("DetermineComponentFrameRoot"); ) + c++; + for (; p < q.length && !q[p].includes( "DetermineComponentFrameRoot" ); ) - m++; - if (l === O.length || m === q.length) - for (l = O.length - 1, m = q.length - 1; 1 <= l && 0 <= m && O[l] !== q[m]; ) - m--; - for (; 1 <= l && 0 <= m; l--, m--) - if (O[l] !== q[m]) { - if (l !== 1 || m !== 1) + p++; + if (c === O.length || p === q.length) + for (c = O.length - 1, p = q.length - 1; 1 <= c && 0 <= p && O[c] !== q[p]; ) + p--; + for (; 1 <= c && 0 <= p; c--, p--) + if (O[c] !== q[p]) { + if (c !== 1 || p !== 1) do - if (l--, m--, 0 > m || O[l] !== q[m]) { + if (c--, p--, 0 > p || O[c] !== q[p]) { var fe = ` -` + O[l].replace(" at new ", " at "); +` + O[c].replace(" at new ", " at "); return n.displayName && fe.includes("") && (fe = fe.replace("", n.displayName)), fe; } - while (1 <= l && 0 <= m); + while (1 <= c && 0 <= p); break; } } } finally { wi = !1, Error.prepareStackTrace = r; } - return (r = n ? n.displayName || n.name : "") ? Ws(r) : ""; + return (r = n ? n.displayName || n.name : "") ? Hs(r) : ""; } - function Hs(n) { + function zs(n) { switch (n.tag) { case 26: case 27: case 5: - return Ws(n.type); + return Hs(n.type); case 16: - return Ws("Lazy"); + return Hs("Lazy"); case 13: - return Ws("Suspense"); + return Hs("Suspense"); case 19: - return Ws("SuspenseList"); + return Hs("SuspenseList"); case 0: case 15: return ns(n.type, !1); @@ -7189,16 +7346,16 @@ function U4() { case 1: return ns(n.type, !0); case 31: - return Ws("Activity"); + return Hs("Activity"); default: return ""; } } - function jh(n) { + function Ph(n) { try { var a = ""; do - a += Hs(n), n = n.return; + a += zs(n), n = n.return; while (n); return a; } catch (r) { @@ -7221,33 +7378,33 @@ Error generating stack: ` + r.message + ` return ""; } } - function Rd(n) { + function Ud(n) { var a = n.type; return (n = n.nodeName) && n.toLowerCase() === "input" && (a === "checkbox" || a === "radio"); } - function Ph(n) { - var a = Rd(n) ? "checked" : "value", r = Object.getOwnPropertyDescriptor( + function Gh(n) { + var a = Ud(n) ? "checked" : "value", r = Object.getOwnPropertyDescriptor( n.constructor.prototype, a - ), l = "" + n[a]; + ), c = "" + n[a]; if (!n.hasOwnProperty(a) && typeof r < "u" && typeof r.get == "function" && typeof r.set == "function") { - var m = r.get, f = r.set; + var p = r.get, f = r.set; return Object.defineProperty(n, a, { configurable: !0, get: function() { - return m.call(this); + return p.call(this); }, set: function(E) { - l = "" + E, f.call(this, E); + c = "" + E, f.call(this, E); } }), Object.defineProperty(n, a, { enumerable: r.enumerable }), { getValue: function() { - return l; + return c; }, setValue: function(E) { - l = "" + E; + c = "" + E; }, stopTracking: function() { n._valueTracker = null, delete n[a]; @@ -7256,16 +7413,16 @@ Error generating stack: ` + r.message + ` } } function is(n) { - n._valueTracker || (n._valueTracker = Ph(n)); + n._valueTracker || (n._valueTracker = Gh(n)); } - function zs(n) { + function js(n) { if (!n) return !1; var a = n._valueTracker; if (!a) return !0; - var r = a.getValue(), l = ""; - return n && (l = Rd(n) ? n.checked ? "true" : "false" : n.value), n = l, n !== r ? (a.setValue(n), !0) : !1; + var r = a.getValue(), c = ""; + return n && (c = Ud(n) ? n.checked ? "true" : "false" : n.value), n = c, n !== r ? (a.setValue(n), !0) : !1; } - function $l(n) { + function tc(n) { if (n = n || (typeof document < "u" ? document : void 0), typeof n > "u") return null; try { return n.activeElement || n.body; @@ -7273,69 +7430,69 @@ Error generating stack: ` + r.message + ` return n.body; } } - var vv = /[\n"\\]/g; + var Rv = /[\n"\\]/g; function xa(n) { return n.replace( - vv, + Rv, function(a) { return "\\" + a.charCodeAt(0).toString(16) + " "; } ); } - function hu(n, a, r, l, m, f, E, _) { - n.name = "", E != null && typeof E != "function" && typeof E != "symbol" && typeof E != "boolean" ? n.type = E : n.removeAttribute("type"), a != null ? E === "number" ? (a === 0 && n.value === "" || n.value != a) && (n.value = "" + Vi(a)) : n.value !== "" + Vi(a) && (n.value = "" + Vi(a)) : E !== "submit" && E !== "reset" || n.removeAttribute("value"), a != null ? Ed(n, E, Vi(a)) : r != null ? Ed(n, E, Vi(r)) : l != null && n.removeAttribute("value"), m == null && f != null && (n.defaultChecked = !!f), m != null && (n.checked = m && typeof m != "function" && typeof m != "symbol"), _ != null && typeof _ != "function" && typeof _ != "symbol" && typeof _ != "boolean" ? n.name = "" + Vi(_) : n.removeAttribute("name"); + function pu(n, a, r, c, p, f, E, _) { + n.name = "", E != null && typeof E != "function" && typeof E != "symbol" && typeof E != "boolean" ? n.type = E : n.removeAttribute("type"), a != null ? E === "number" ? (a === 0 && n.value === "" || n.value != a) && (n.value = "" + Vi(a)) : n.value !== "" + Vi(a) && (n.value = "" + Vi(a)) : E !== "submit" && E !== "reset" || n.removeAttribute("value"), a != null ? Td(n, E, Vi(a)) : r != null ? Td(n, E, Vi(r)) : c != null && n.removeAttribute("value"), p == null && f != null && (n.defaultChecked = !!f), p != null && (n.checked = p && typeof p != "function" && typeof p != "symbol"), _ != null && typeof _ != "function" && typeof _ != "symbol" && typeof _ != "boolean" ? n.name = "" + Vi(_) : n.removeAttribute("name"); } - function mu(n, a, r, l, m, f, E, _) { + function fu(n, a, r, c, p, f, E, _) { if (f != null && typeof f != "function" && typeof f != "symbol" && typeof f != "boolean" && (n.type = f), a != null || r != null) { if (!(f !== "submit" && f !== "reset" || a != null)) return; r = r != null ? "" + Vi(r) : "", a = a != null ? "" + Vi(a) : r, _ || a === n.value || (n.value = a), n.defaultValue = a; } - l = l ?? m, l = typeof l != "function" && typeof l != "symbol" && !!l, n.checked = _ ? n.checked : !!l, n.defaultChecked = !!l, E != null && typeof E != "function" && typeof E != "symbol" && typeof E != "boolean" && (n.name = E); + c = c ?? p, c = typeof c != "function" && typeof c != "symbol" && !!c, n.checked = _ ? n.checked : !!c, n.defaultChecked = !!c, E != null && typeof E != "function" && typeof E != "symbol" && typeof E != "boolean" && (n.name = E); } - function Ed(n, a, r) { - a === "number" && $l(n.ownerDocument) === n || n.defaultValue === "" + r || (n.defaultValue = "" + r); + function Td(n, a, r) { + a === "number" && tc(n.ownerDocument) === n || n.defaultValue === "" + r || (n.defaultValue = "" + r); } - function js(n, a, r, l) { + function Ps(n, a, r, c) { if (n = n.options, a) { a = {}; - for (var m = 0; m < r.length; m++) - a["$" + r[m]] = !0; + for (var p = 0; p < r.length; p++) + a["$" + r[p]] = !0; for (r = 0; r < n.length; r++) - m = a.hasOwnProperty("$" + n[r].value), n[r].selected !== m && (n[r].selected = m), m && l && (n[r].defaultSelected = !0); + p = a.hasOwnProperty("$" + n[r].value), n[r].selected !== p && (n[r].selected = p), p && c && (n[r].defaultSelected = !0); } else { - for (r = "" + Vi(r), a = null, m = 0; m < n.length; m++) { - if (n[m].value === r) { - n[m].selected = !0, l && (n[m].defaultSelected = !0); + for (r = "" + Vi(r), a = null, p = 0; p < n.length; p++) { + if (n[p].value === r) { + n[p].selected = !0, c && (n[p].defaultSelected = !0); return; } - a !== null || n[m].disabled || (a = n[m]); + a !== null || n[p].disabled || (a = n[p]); } a !== null && (a.selected = !0); } } - function Gh(n, a, r) { + function Yh(n, a, r) { if (a != null && (a = "" + Vi(a), a !== n.value && (n.value = a), r == null)) { n.defaultValue !== a && (n.defaultValue = a); return; } n.defaultValue = r != null ? "" + Vi(r) : ""; } - function Yh(n, a, r, l) { + function Xh(n, a, r, c) { if (a == null) { - if (l != null) { - if (r != null) throw Error(p(92)); - if (Ne(l)) { - if (1 < l.length) throw Error(p(93)); - l = l[0]; + if (c != null) { + if (r != null) throw Error(m(92)); + if (Ue(c)) { + if (1 < c.length) throw Error(m(93)); + c = c[0]; } - r = l; + r = c; } r == null && (r = ""), a = r; } - r = Vi(a), n.defaultValue = r, l = n.textContent, l === r && l !== "" && l !== null && (n.value = l); + r = Vi(a), n.defaultValue = r, c = n.textContent, c === r && c !== "" && c !== null && (n.value = c); } - function ec(n, a) { + function nc(n, a) { if (a) { var r = n.firstChild; if (r && r === n.lastChild && r.nodeType === 3) { @@ -7345,28 +7502,28 @@ Error generating stack: ` + r.message + ` } n.textContent = a; } - var qf = new Set( + var e2 = new Set( "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( " " ) ); - function pu(n, a, r) { - var l = a.indexOf("--") === 0; - r == null || typeof r == "boolean" || r === "" ? l ? n.setProperty(a, "") : a === "float" ? n.cssFloat = "" : n[a] = "" : l ? n.setProperty(a, r) : typeof r != "number" || r === 0 || qf.has(a) ? a === "float" ? n.cssFloat = r : n[a] = ("" + r).trim() : n[a] = r + "px"; + function gu(n, a, r) { + var c = a.indexOf("--") === 0; + r == null || typeof r == "boolean" || r === "" ? c ? n.setProperty(a, "") : a === "float" ? n.cssFloat = "" : n[a] = "" : c ? n.setProperty(a, r) : typeof r != "number" || r === 0 || e2.has(a) ? a === "float" ? n.cssFloat = r : n[a] = ("" + r).trim() : n[a] = r + "px"; } - function Ud(n, a, r) { + function yd(n, a, r) { if (a != null && typeof a != "object") - throw Error(p(62)); + throw Error(m(62)); if (n = n.style, r != null) { - for (var l in r) - !r.hasOwnProperty(l) || a != null && a.hasOwnProperty(l) || (l.indexOf("--") === 0 ? n.setProperty(l, "") : l === "float" ? n.cssFloat = "" : n[l] = ""); - for (var m in a) - l = a[m], a.hasOwnProperty(m) && r[m] !== l && pu(n, m, l); + for (var c in r) + !r.hasOwnProperty(c) || a != null && a.hasOwnProperty(c) || (c.indexOf("--") === 0 ? n.setProperty(c, "") : c === "float" ? n.cssFloat = "" : n[c] = ""); + for (var p in a) + c = a[p], a.hasOwnProperty(p) && r[p] !== c && gu(n, p, c); } else for (var f in a) - a.hasOwnProperty(f) && pu(n, f, a[f]); + a.hasOwnProperty(f) && gu(n, f, a[f]); } - function Ps(n) { + function Gs(n) { if (n.indexOf("-") === -1) return !1; switch (n) { case "annotation-xml": @@ -7382,7 +7539,7 @@ Error generating stack: ` + r.message + ` return !0; } } - var Sv = /* @__PURE__ */ new Map([ + var Ev = /* @__PURE__ */ new Map([ ["acceptCharset", "accept-charset"], ["htmlFor", "for"], ["httpEquiv", "http-equiv"], @@ -7461,22 +7618,22 @@ Error generating stack: ` + r.message + ` ["writingMode", "writing-mode"], ["xmlnsXlink", "xmlns:xlink"], ["xHeight", "x-height"] - ]), $f = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; - function Td(n) { - return $f.test("" + n) ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" : n; + ]), t2 = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; + function Nd(n) { + return t2.test("" + n) ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" : n; } - var Gs = null; - function fu(n) { + var Ys = null; + function vu(n) { return n = n.target || n.srcElement || window, n.correspondingUseElement && (n = n.correspondingUseElement), n.nodeType === 3 ? n.parentNode : n; } - var tc = null, nc = null; - function e2(n) { - var a = qe(n); + var ic = null, ac = null; + function n2(n) { + var a = $e(n); if (a && (n = a.stateNode)) { var r = n[Gn] || null; e: switch (n = a.stateNode, a.type) { case "input": - if (hu( + if (pu( n, r.value, r.defaultValue, @@ -7492,52 +7649,52 @@ Error generating stack: ` + r.message + ` "" + a ) + '"][type="radio"]' ), a = 0; a < r.length; a++) { - var l = r[a]; - if (l !== n && l.form === n.form) { - var m = l[Gn] || null; - if (!m) throw Error(p(90)); - hu( - l, - m.value, - m.defaultValue, - m.defaultValue, - m.checked, - m.defaultChecked, - m.type, - m.name + var c = r[a]; + if (c !== n && c.form === n.form) { + var p = c[Gn] || null; + if (!p) throw Error(m(90)); + pu( + c, + p.value, + p.defaultValue, + p.defaultValue, + p.checked, + p.defaultChecked, + p.type, + p.name ); } } for (a = 0; a < r.length; a++) - l = r[a], l.form === n.form && zs(l); + c = r[a], c.form === n.form && js(c); } break e; case "textarea": - Gh(n, r.value, r.defaultValue); + Yh(n, r.value, r.defaultValue); break e; case "select": - a = r.value, a != null && js(n, !!r.multiple, a, !1); + a = r.value, a != null && Ps(n, !!r.multiple, a, !1); } } } - var Xh = !1; - function ic(n, a, r) { - if (Xh) return n(a, r); - Xh = !0; + var Kh = !1; + function rc(n, a, r) { + if (Kh) return n(a, r); + Kh = !0; try { - var l = n(a); - return l; + var c = n(a); + return c; } finally { - if (Xh = !1, (tc !== null || nc !== null) && (Vl(), tc && (a = tc, n = nc, nc = tc = null, e2(a), n))) - for (a = 0; a < n.length; a++) e2(n[a]); + if (Kh = !1, (ic !== null || ac !== null) && (Cl(), ic && (a = ic, n = ac, ac = ic = null, n2(a), n))) + for (a = 0; a < n.length; a++) n2(n[a]); } } - function Ys(n, a) { + function Xs(n, a) { var r = n.stateNode; if (r === null) return null; - var l = r[Gn] || null; - if (l === null) return null; - r = l[a]; + var c = r[Gn] || null; + if (c === null) return null; + r = c[a]; e: switch (a) { case "onClick": case "onClickCapture": @@ -7550,7 +7707,7 @@ Error generating stack: ` + r.message + ` case "onMouseUp": case "onMouseUpCapture": case "onMouseEnter": - (l = !l.disabled) || (n = n.type, l = !(n === "button" || n === "input" || n === "select" || n === "textarea")), n = !l; + (c = !c.disabled) || (n = n.type, c = !(n === "button" || n === "input" || n === "select" || n === "textarea")), n = !c; break e; default: n = !1; @@ -7558,61 +7715,61 @@ Error generating stack: ` + r.message + ` if (n) return null; if (r && typeof r != "function") throw Error( - p(231, a, typeof r) + m(231, a, typeof r) ); return r; } - var yr = !(typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u"), gu = !1; - if (yr) + var br = !(typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u"), Su = !1; + if (br) try { - var So = {}; - Object.defineProperty(So, "passive", { + var Eo = {}; + Object.defineProperty(Eo, "passive", { get: function() { - gu = !0; + Su = !0; } - }), window.addEventListener("test", So, So), window.removeEventListener("test", So, So); + }), window.addEventListener("test", Eo, Eo), window.removeEventListener("test", Eo, Eo); } catch { - gu = !1; + Su = !1; } - var Ro = null, ac = null, Xs = null; - function Kh() { - if (Xs) return Xs; - var n, a = ac, r = a.length, l, m = "value" in Ro ? Ro.value : Ro.textContent, f = m.length; - for (n = 0; n < r && a[n] === m[n]; n++) ; + var Uo = null, oc = null, Ks = null; + function qh() { + if (Ks) return Ks; + var n, a = oc, r = a.length, c, p = "value" in Uo ? Uo.value : Uo.textContent, f = p.length; + for (n = 0; n < r && a[n] === p[n]; n++) ; var E = r - n; - for (l = 1; l <= E && a[r - l] === m[f - l]; l++) ; - return Xs = m.slice(n, 1 < l ? 1 - l : void 0); + for (c = 1; c <= E && a[r - c] === p[f - c]; c++) ; + return Ks = p.slice(n, 1 < c ? 1 - c : void 0); } function ui(n) { var a = n.keyCode; return "charCode" in n ? (n = n.charCode, n === 0 && a === 13 && (n = 13)) : n = a, n === 10 && (n = 13), 32 <= n || n === 13 ? n : 0; } - function vu() { + function Ru() { return !0; } - function Su() { + function Eu() { return !1; } function Ai(n) { - function a(r, l, m, f, E) { - this._reactName = r, this._targetInst = m, this.type = l, this.nativeEvent = f, this.target = E, this.currentTarget = null; + function a(r, c, p, f, E) { + this._reactName = r, this._targetInst = p, this.type = c, this.nativeEvent = f, this.target = E, this.currentTarget = null; for (var _ in n) n.hasOwnProperty(_) && (r = n[_], this[_] = r ? r(f) : f[_]); - return this.isDefaultPrevented = (f.defaultPrevented != null ? f.defaultPrevented : f.returnValue === !1) ? vu : Su, this.isPropagationStopped = Su, this; + return this.isDefaultPrevented = (f.defaultPrevented != null ? f.defaultPrevented : f.returnValue === !1) ? Ru : Eu, this.isPropagationStopped = Eu, this; } return b(a.prototype, { preventDefault: function() { this.defaultPrevented = !0; var r = this.nativeEvent; - r && (r.preventDefault ? r.preventDefault() : typeof r.returnValue != "unknown" && (r.returnValue = !1), this.isDefaultPrevented = vu); + r && (r.preventDefault ? r.preventDefault() : typeof r.returnValue != "unknown" && (r.returnValue = !1), this.isDefaultPrevented = Ru); }, stopPropagation: function() { var r = this.nativeEvent; - r && (r.stopPropagation ? r.stopPropagation() : typeof r.cancelBubble != "unknown" && (r.cancelBubble = !0), this.isPropagationStopped = vu); + r && (r.stopPropagation ? r.stopPropagation() : typeof r.cancelBubble != "unknown" && (r.cancelBubble = !0), this.isPropagationStopped = Ru); }, persist: function() { }, - isPersistent: vu + isPersistent: Ru }), a; } var as = { @@ -7624,7 +7781,7 @@ Error generating stack: ` + r.message + ` }, defaultPrevented: 0, isTrusted: 0 - }, Ru = Ai(as), yd = b({}, as, { view: 0, detail: 0 }), t2 = Ai(yd), qh, Eu, Nd, Ks = b({}, yd, { + }, Uu = Ai(as), bd = b({}, as, { view: 0, detail: 0 }), i2 = Ai(bd), $h, Tu, Vd, qs = b({}, bd, { screenX: 0, screenY: 0, clientX: 0, @@ -7635,27 +7792,27 @@ Error generating stack: ` + r.message + ` shiftKey: 0, altKey: 0, metaKey: 0, - getModifierState: Eo, + getModifierState: To, button: 0, buttons: 0, relatedTarget: function(n) { return n.relatedTarget === void 0 ? n.fromElement === n.srcElement ? n.toElement : n.fromElement : n.relatedTarget; }, movementX: function(n) { - return "movementX" in n ? n.movementX : (n !== Nd && (Nd && n.type === "mousemove" ? (qh = n.screenX - Nd.screenX, Eu = n.screenY - Nd.screenY) : Eu = qh = 0, Nd = n), qh); + return "movementX" in n ? n.movementX : (n !== Vd && (Vd && n.type === "mousemove" ? ($h = n.screenX - Vd.screenX, Tu = n.screenY - Vd.screenY) : Tu = $h = 0, Vd = n), $h); }, movementY: function(n) { - return "movementY" in n ? n.movementY : Eu; + return "movementY" in n ? n.movementY : Tu; } - }), $h = Ai(Ks), n2 = b({}, Ks, { dataTransfer: 0 }), i2 = Ai(n2), Rv = b({}, yd, { relatedTarget: 0 }), em = Ai(Rv), Ev = b({}, as, { + }), em = Ai(qs), a2 = b({}, qs, { dataTransfer: 0 }), r2 = Ai(a2), Uv = b({}, bd, { relatedTarget: 0 }), tm = Ai(Uv), Tv = b({}, as, { animationName: 0, elapsedTime: 0, pseudoElement: 0 - }), Uv = Ai(Ev), Tv = b({}, as, { + }), yv = Ai(Tv), Nv = b({}, as, { clipboardData: function(n) { return "clipboardData" in n ? n.clipboardData : window.clipboardData; } - }), bd = Ai(Tv), a2 = b({}, as, { data: 0 }), tm = Ai(a2), r2 = { + }), Cd = Ai(Nv), o2 = b({}, as, { data: 0 }), nm = Ai(o2), s2 = { Esc: "Escape", Spacebar: " ", Left: "ArrowLeft", @@ -7668,7 +7825,7 @@ Error generating stack: ` + r.message + ` Apps: "ContextMenu", Scroll: "ScrollLock", MozPrintableKey: "Unidentified" - }, o2 = { + }, l2 = { 8: "Backspace", 9: "Tab", 12: "Clear", @@ -7705,26 +7862,26 @@ Error generating stack: ` + r.message + ` 144: "NumLock", 145: "ScrollLock", 224: "Meta" - }, nm = { + }, im = { Alt: "altKey", Control: "ctrlKey", Meta: "metaKey", Shift: "shiftKey" }; - function s2(n) { + function c2(n) { var a = this.nativeEvent; - return a.getModifierState ? a.getModifierState(n) : (n = nm[n]) ? !!a[n] : !1; + return a.getModifierState ? a.getModifierState(n) : (n = im[n]) ? !!a[n] : !1; } - function Eo() { - return s2; + function To() { + return c2; } - var qs = b({}, yd, { + var $s = b({}, bd, { key: function(n) { if (n.key) { - var a = r2[n.key] || n.key; + var a = s2[n.key] || n.key; if (a !== "Unidentified") return a; } - return n.type === "keypress" ? (n = ui(n), n === 13 ? "Enter" : String.fromCharCode(n)) : n.type === "keydown" || n.type === "keyup" ? o2[n.keyCode] || "Unidentified" : ""; + return n.type === "keypress" ? (n = ui(n), n === 13 ? "Enter" : String.fromCharCode(n)) : n.type === "keydown" || n.type === "keyup" ? l2[n.keyCode] || "Unidentified" : ""; }, code: 0, location: 0, @@ -7734,7 +7891,7 @@ Error generating stack: ` + r.message + ` metaKey: 0, repeat: 0, locale: 0, - getModifierState: Eo, + getModifierState: To, charCode: function(n) { return n.type === "keypress" ? ui(n) : 0; }, @@ -7744,7 +7901,7 @@ Error generating stack: ` + r.message + ` which: function(n) { return n.type === "keypress" ? ui(n) : n.type === "keydown" || n.type === "keyup" ? n.keyCode : 0; } - }), tr = Ai(qs), va = b({}, Ks, { + }), nr = Ai($s), va = b({}, qs, { pointerId: 0, width: 0, height: 0, @@ -7755,7 +7912,7 @@ Error generating stack: ` + r.message + ` twist: 0, pointerType: 0, isPrimary: 0 - }), Vd = Ai(va), Uu = b({}, yd, { + }), Fd = Ai(va), yu = b({}, bd, { touches: 0, targetTouches: 0, changedTouches: 0, @@ -7763,12 +7920,12 @@ Error generating stack: ` + r.message + ` metaKey: 0, ctrlKey: 0, shiftKey: 0, - getModifierState: Eo - }), im = Ai(Uu), Xi = b({}, as, { + getModifierState: To + }), am = Ai(yu), Xi = b({}, as, { propertyName: 0, elapsedTime: 0, pseudoElement: 0 - }), l2 = Ai(Xi), Tu = b({}, Ks, { + }), d2 = Ai(Xi), Nu = b({}, qs, { deltaX: function(n) { return "deltaX" in n ? n.deltaX : "wheelDeltaX" in n ? -n.wheelDeltaX : 0; }, @@ -7777,16 +7934,16 @@ Error generating stack: ` + r.message + ` }, deltaZ: 0, deltaMode: 0 - }), $s = Ai(Tu), am = b({}, as, { + }), el = Ai(Nu), rm = b({}, as, { newState: 0, oldState: 0 - }), c2 = Ai(am), d2 = [9, 13, 27, 32], Cd = yr && "CompositionEvent" in window, Fd = null; - yr && "documentMode" in document && (Fd = document.documentMode); - var rm = yr && "TextEvent" in window && !Fd, Nr = yr && (!Cd || Fd && 8 < Fd && 11 >= Fd), om = " ", yu = !1; - function _d(n, a) { + }), u2 = Ai(rm), h2 = [9, 13, 27, 32], _d = br && "CompositionEvent" in window, Md = null; + br && "documentMode" in document && (Md = document.documentMode); + var om = br && "TextEvent" in window && !Md, Vr = br && (!_d || Md && 8 < Md && 11 >= Md), sm = " ", bu = !1; + function kd(n, a) { switch (n) { case "keyup": - return d2.indexOf(a.keyCode) !== -1; + return h2.indexOf(a.keyCode) !== -1; case "keydown": return a.keyCode !== 229; case "keypress": @@ -7801,21 +7958,21 @@ Error generating stack: ` + r.message + ` return n = n.detail, typeof n == "object" && "data" in n ? n.data : null; } var os = !1; - function sm(n, a) { + function lm(n, a) { switch (n) { case "compositionend": return rs(a); case "keypress": - return a.which !== 32 ? null : (yu = !0, om); + return a.which !== 32 ? null : (bu = !0, sm); case "textInput": - return n = a.data, n === om && yu ? null : n; + return n = a.data, n === sm && bu ? null : n; default: return null; } } - function el(n, a) { + function tl(n, a) { if (os) - return n === "compositionend" || !Cd && _d(n, a) ? (n = Kh(), Xs = ac = Ro = null, os = !1, n) : null; + return n === "compositionend" || !_d && kd(n, a) ? (n = qh(), Ks = oc = Uo = null, os = !1, n) : null; switch (n) { case "paste": return null; @@ -7827,12 +7984,12 @@ Error generating stack: ` + r.message + ` } return null; case "compositionend": - return Nr && a.locale !== "ko" ? null : a.data; + return Vr && a.locale !== "ko" ? null : a.data; default: return null; } } - var u2 = { + var m2 = { color: !0, date: !0, datetime: !0, @@ -7849,84 +8006,84 @@ Error generating stack: ` + r.message + ` url: !0, week: !0 }; - function Nu(n) { + function Vu(n) { var a = n && n.nodeName && n.nodeName.toLowerCase(); - return a === "input" ? !!u2[n.type] : a === "textarea"; + return a === "input" ? !!m2[n.type] : a === "textarea"; } - function bu(n, a, r, l) { - tc ? nc ? nc.push(l) : nc = [l] : tc = l, a = Lc(a, "onChange"), 0 < a.length && (r = new Ru( + function Cu(n, a, r, c) { + ic ? ac ? ac.push(c) : ac = [c] : ic = c, a = Wc(a, "onChange"), 0 < a.length && (r = new Uu( "onChange", "change", null, r, - l + c ), n.push({ event: r, listeners: a })); } - var nr = null, ir = null; - function lm(n) { - Ml(n, 0); + var ir = null, ar = null; + function cm(n) { + kl(n, 0); } - function br(n) { + function Cr(n) { var a = Ct(n); - if (zs(a)) return n; + if (js(a)) return n; } - function cm(n, a) { + function dm(n, a) { if (n === "change") return a; } - var dm = !1; - if (yr) { - var tl; - if (yr) { - var nl = "oninput" in document; - if (!nl) { - var um = document.createElement("div"); - um.setAttribute("oninput", "return;"), nl = typeof um.oninput == "function"; + var um = !1; + if (br) { + var nl; + if (br) { + var il = "oninput" in document; + if (!il) { + var hm = document.createElement("div"); + hm.setAttribute("oninput", "return;"), il = typeof hm.oninput == "function"; } - tl = nl; - } else tl = !1; - dm = tl && (!document.documentMode || 9 < document.documentMode); + nl = il; + } else nl = !1; + um = nl && (!document.documentMode || 9 < document.documentMode); } - function rc() { - nr && (nr.detachEvent("onpropertychange", hm), ir = nr = null); + function sc() { + ir && (ir.detachEvent("onpropertychange", mm), ar = ir = null); } - function hm(n) { - if (n.propertyName === "value" && br(ir)) { + function mm(n) { + if (n.propertyName === "value" && Cr(ar)) { var a = []; - bu( + Cu( a, - ir, + ar, n, - fu(n) - ), ic(lm, a); + vu(n) + ), rc(cm, a); } } - function Vu(n, a, r) { - n === "focusin" ? (rc(), nr = a, ir = r, nr.attachEvent("onpropertychange", hm)) : n === "focusout" && rc(); + function Fu(n, a, r) { + n === "focusin" ? (sc(), ir = a, ar = r, ir.attachEvent("onpropertychange", mm)) : n === "focusout" && sc(); } function ss(n) { if (n === "selectionchange" || n === "keyup" || n === "keydown") - return br(ir); + return Cr(ar); } - function Uo(n, a) { - if (n === "click") return br(a); + function yo(n, a) { + if (n === "click") return Cr(a); } - function mm(n, a) { + function pm(n, a) { if (n === "input" || n === "change") - return br(a); + return Cr(a); } - function pm(n, a) { + function fm(n, a) { return n === a && (n !== 0 || 1 / n === 1 / a) || n !== n && a !== a; } - var hi = typeof Object.is == "function" ? Object.is : pm; + var hi = typeof Object.is == "function" ? Object.is : fm; function ls(n, a) { if (hi(n, a)) return !0; if (typeof n != "object" || n === null || typeof a != "object" || a === null) return !1; - var r = Object.keys(n), l = Object.keys(a); - if (r.length !== l.length) return !1; - for (l = 0; l < r.length; l++) { - var m = r[l]; - if (!qt.call(a, m) || !hi(n[m], a[m])) + var r = Object.keys(n), c = Object.keys(a); + if (r.length !== c.length) return !1; + for (c = 0; c < r.length; c++) { + var p = r[c]; + if (!qt.call(a, p) || !hi(n[p], a[p])) return !1; } return !0; @@ -7938,11 +8095,11 @@ Error generating stack: ` + r.message + ` function hn(n, a) { var r = cs(n); n = 0; - for (var l; r; ) { + for (var c; r; ) { if (r.nodeType === 3) { - if (l = n + r.textContent.length, n <= a && l >= a) + if (c = n + r.textContent.length, n <= a && c >= a) return { node: r, offset: a - n }; - n = l; + n = c; } e: { for (; r; ) { @@ -7957,12 +8114,12 @@ Error generating stack: ` + r.message + ` r = cs(r); } } - function Md(n, a) { - return n && a ? n === a ? !0 : n && n.nodeType === 3 ? !1 : a && a.nodeType === 3 ? Md(n, a.parentNode) : "contains" in n ? n.contains(a) : n.compareDocumentPosition ? !!(n.compareDocumentPosition(a) & 16) : !1 : !1; + function Qd(n, a) { + return n && a ? n === a ? !0 : n && n.nodeType === 3 ? !1 : a && a.nodeType === 3 ? Qd(n, a.parentNode) : "contains" in n ? n.contains(a) : n.compareDocumentPosition ? !!(n.compareDocumentPosition(a) & 16) : !1 : !1; } - function fm(n) { + function gm(n) { n = n != null && n.ownerDocument != null && n.ownerDocument.defaultView != null ? n.ownerDocument.defaultView : window; - for (var a = $l(n.document); a instanceof n.HTMLIFrameElement; ) { + for (var a = tc(n.document); a instanceof n.HTMLIFrameElement; ) { try { var r = typeof a.contentWindow.location.href == "string"; } catch { @@ -7970,128 +8127,128 @@ Error generating stack: ` + r.message + ` } if (r) n = a.contentWindow; else break; - a = $l(n.document); + a = tc(n.document); } return a; } - function kd(n) { + function Dd(n) { var a = n && n.nodeName && n.nodeName.toLowerCase(); return a && (a === "input" && (n.type === "text" || n.type === "search" || n.type === "tel" || n.type === "url" || n.type === "password") || a === "textarea" || n.contentEditable === "true"); } - var il = yr && "documentMode" in document && 11 >= document.documentMode, Vr = null, ar = null, ds = null, al = !1; - function Cu(n, a, r) { - var l = r.window === r ? r.document : r.nodeType === 9 ? r : r.ownerDocument; - al || Vr == null || Vr !== $l(l) || (l = Vr, "selectionStart" in l && kd(l) ? l = { start: l.selectionStart, end: l.selectionEnd } : (l = (l.ownerDocument && l.ownerDocument.defaultView || window).getSelection(), l = { - anchorNode: l.anchorNode, - anchorOffset: l.anchorOffset, - focusNode: l.focusNode, - focusOffset: l.focusOffset - }), ds && ls(ds, l) || (ds = l, l = Lc(ar, "onSelect"), 0 < l.length && (a = new Ru( + var al = br && "documentMode" in document && 11 >= document.documentMode, Fr = null, rr = null, ds = null, rl = !1; + function _u(n, a, r) { + var c = r.window === r ? r.document : r.nodeType === 9 ? r : r.ownerDocument; + rl || Fr == null || Fr !== tc(c) || (c = Fr, "selectionStart" in c && Dd(c) ? c = { start: c.selectionStart, end: c.selectionEnd } : (c = (c.ownerDocument && c.ownerDocument.defaultView || window).getSelection(), c = { + anchorNode: c.anchorNode, + anchorOffset: c.anchorOffset, + focusNode: c.focusNode, + focusOffset: c.focusOffset + }), ds && ls(ds, c) || (ds = c, c = Wc(rr, "onSelect"), 0 < c.length && (a = new Uu( "onSelect", "select", null, a, r - ), n.push({ event: a, listeners: l }), a.target = Vr))); + ), n.push({ event: a, listeners: c }), a.target = Fr))); } - function To(n, a) { + function No(n, a) { var r = {}; return r[n.toLowerCase()] = a.toLowerCase(), r["Webkit" + n] = "webkit" + a, r["Moz" + n] = "moz" + a, r; } - var rl = { - animationend: To("Animation", "AnimationEnd"), - animationiteration: To("Animation", "AnimationIteration"), - animationstart: To("Animation", "AnimationStart"), - transitionrun: To("Transition", "TransitionRun"), - transitionstart: To("Transition", "TransitionStart"), - transitioncancel: To("Transition", "TransitionCancel"), - transitionend: To("Transition", "TransitionEnd") - }, Za = {}, rr = {}; - yr && (rr = document.createElement("div").style, "AnimationEvent" in window || (delete rl.animationend.animation, delete rl.animationiteration.animation, delete rl.animationstart.animation), "TransitionEvent" in window || delete rl.transitionend.transition); - function Cr(n) { + var ol = { + animationend: No("Animation", "AnimationEnd"), + animationiteration: No("Animation", "AnimationIteration"), + animationstart: No("Animation", "AnimationStart"), + transitionrun: No("Transition", "TransitionRun"), + transitionstart: No("Transition", "TransitionStart"), + transitioncancel: No("Transition", "TransitionCancel"), + transitionend: No("Transition", "TransitionEnd") + }, Za = {}, or = {}; + br && (or = document.createElement("div").style, "AnimationEvent" in window || (delete ol.animationend.animation, delete ol.animationiteration.animation, delete ol.animationstart.animation), "TransitionEvent" in window || delete ol.transitionend.transition); + function _r(n) { if (Za[n]) return Za[n]; - if (!rl[n]) return n; - var a = rl[n], r; + if (!ol[n]) return n; + var a = ol[n], r; for (r in a) - if (a.hasOwnProperty(r) && r in rr) + if (a.hasOwnProperty(r) && r in or) return Za[n] = a[r]; return n; } - var h2 = Cr("animationend"), gm = Cr("animationiteration"), m2 = Cr("animationstart"), vm = Cr("transitionrun"), Fu = Cr("transitionstart"), p2 = Cr("transitioncancel"), Sm = Cr("transitionend"), Rm = /* @__PURE__ */ new Map(), oc = "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split( + var p2 = _r("animationend"), vm = _r("animationiteration"), f2 = _r("animationstart"), Sm = _r("transitionrun"), Mu = _r("transitionstart"), g2 = _r("transitioncancel"), Rm = _r("transitionend"), Em = /* @__PURE__ */ new Map(), lc = "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split( " " ); - oc.push("scrollEnd"); + lc.push("scrollEnd"); function Oa(n, a) { - Rm.set(n, a), es(a, [n]); + Em.set(n, a), es(a, [n]); } - var Em = /* @__PURE__ */ new WeakMap(); + var Um = /* @__PURE__ */ new WeakMap(); function Sa(n, a) { if (typeof n == "object" && n !== null) { - var r = Em.get(n); + var r = Um.get(n); return r !== void 0 ? r : (a = { value: n, source: a, - stack: jh(a) - }, Em.set(n, a), a); + stack: Ph(a) + }, Um.set(n, a), a); } return { value: n, source: a, - stack: jh(a) + stack: Ph(a) }; } - var Ki = [], us = 0, Fr = 0; - function or() { - for (var n = us, a = Fr = us = 0; a < n; ) { + var Ki = [], us = 0, Mr = 0; + function sr() { + for (var n = us, a = Mr = us = 0; a < n; ) { var r = Ki[a]; Ki[a++] = null; - var l = Ki[a]; + var c = Ki[a]; Ki[a++] = null; - var m = Ki[a]; + var p = Ki[a]; Ki[a++] = null; var f = Ki[a]; - if (Ki[a++] = null, l !== null && m !== null) { - var E = l.pending; - E === null ? m.next = m : (m.next = E.next, E.next = m), l.pending = m; + if (Ki[a++] = null, c !== null && p !== null) { + var E = c.pending; + E === null ? p.next = p : (p.next = E.next, E.next = p), c.pending = p; } - f !== 0 && lc(r, m, f); + f !== 0 && dc(r, p, f); } } - function hs(n, a, r, l) { - Ki[us++] = n, Ki[us++] = a, Ki[us++] = r, Ki[us++] = l, Fr |= l, n.lanes |= l, n = n.alternate, n !== null && (n.lanes |= l); + function hs(n, a, r, c) { + Ki[us++] = n, Ki[us++] = a, Ki[us++] = r, Ki[us++] = c, Mr |= c, n.lanes |= c, n = n.alternate, n !== null && (n.lanes |= c); } - function sc(n, a, r, l) { - return hs(n, a, r, l), Qd(n); + function cc(n, a, r, c) { + return hs(n, a, r, c), xd(n); } - function _r(n, a) { - return hs(n, null, null, a), Qd(n); + function kr(n, a) { + return hs(n, null, null, a), xd(n); } - function lc(n, a, r) { + function dc(n, a, r) { n.lanes |= r; - var l = n.alternate; - l !== null && (l.lanes |= r); - for (var m = !1, f = n.return; f !== null; ) - f.childLanes |= r, l = f.alternate, l !== null && (l.childLanes |= r), f.tag === 22 && (n = f.stateNode, n === null || n._visibility & 1 || (m = !0)), n = f, f = f.return; - return n.tag === 3 ? (f = n.stateNode, m && a !== null && (m = 31 - Jn(r), n = f.hiddenUpdates, l = n[m], l === null ? n[m] = [a] : l.push(a), a.lane = r | 536870912), f) : null; - } - function Qd(n) { - if (50 < Zc) - throw Zc = 0, Ep = null, Error(p(185)); + var c = n.alternate; + c !== null && (c.lanes |= r); + for (var p = !1, f = n.return; f !== null; ) + f.childLanes |= r, c = f.alternate, c !== null && (c.childLanes |= r), f.tag === 22 && (n = f.stateNode, n === null || n._visibility & 1 || (p = !0)), n = f, f = f.return; + return n.tag === 3 ? (f = n.stateNode, p && a !== null && (p = 31 - Jn(r), n = f.hiddenUpdates, c = n[p], c === null ? n[p] = [a] : c.push(a), a.lane = r | 536870912), f) : null; + } + function xd(n) { + if (50 < Bc) + throw Bc = 0, Up = null, Error(m(185)); for (var a = n.return; a !== null; ) n = a, a = n.return; return n.tag === 3 ? n.stateNode : null; } - var cc = {}; - function f2(n, a, r, l) { - this.tag = n, this.key = r, this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null, this.index = 0, this.refCleanup = this.ref = null, this.pendingProps = a, this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null, this.mode = l, this.subtreeFlags = this.flags = 0, this.deletions = null, this.childLanes = this.lanes = 0, this.alternate = null; + var uc = {}; + function v2(n, a, r, c) { + this.tag = n, this.key = r, this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null, this.index = 0, this.refCleanup = this.ref = null, this.pendingProps = a, this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null, this.mode = c, this.subtreeFlags = this.flags = 0, this.deletions = null, this.childLanes = this.lanes = 0, this.alternate = null; } - function qi(n, a, r, l) { - return new f2(n, a, r, l); + function qi(n, a, r, c) { + return new v2(n, a, r, c); } - function Dd(n) { + function Zd(n) { return n = n.prototype, !(!n || !n.isReactComponent); } - function sr(n, a) { + function lr(n, a) { var r = n.alternate; return r === null ? (r = qi( n.tag, @@ -8108,63 +8265,63 @@ Error generating stack: ` + r.message + ` firstContext: a.firstContext }), n; } - function _e(n, a, r, l, m, f) { + function _e(n, a, r, c, p, f) { var E = 0; - if (l = n, typeof n == "function") Dd(n) && (E = 1); + if (c = n, typeof n == "function") Zd(n) && (E = 1); else if (typeof n == "string") - E = Y2( + E = K2( n, r, Fe.current ) ? 26 : n === "html" || n === "head" || n === "body" ? 27 : 5; else e: switch (n) { - case ye: - return n = qi(31, r, a, m), n.elementType = ye, n.lanes = f, n; - case ge: - return Ba(r.children, m, f, a); - case de: - E = 8, m |= 24; + case be: + return n = qi(31, r, a, p), n.elementType = be, n.lanes = f, n; + case ve: + return Ba(r.children, p, f, a); + case me: + E = 8, p |= 24; break; - case Me: - return n = qi(12, r, a, m | 2), n.elementType = Me, n.lanes = f, n; - case G: - return n = qi(13, r, a, m), n.elementType = G, n.lanes = f, n; case Qe: - return n = qi(19, r, a, m), n.elementType = Qe, n.lanes = f, n; + return n = qi(12, r, a, p | 2), n.elementType = Qe, n.lanes = f, n; + case G: + return n = qi(13, r, a, p), n.elementType = G, n.lanes = f, n; + case De: + return n = qi(19, r, a, p), n.elementType = De, n.lanes = f, n; default: if (typeof n == "object" && n !== null) switch (n.$$typeof) { - case ee: - case Re: + case ne: + case ge: E = 10; break e; - case ae: + case ee: E = 9; break e; - case Le: + case we: E = 11; break e; case Te: E = 14; break e; - case Ee: - E = 16, l = null; + case ke: + E = 16, c = null; break e; } E = 29, r = Error( - p(130, n === null ? "null" : typeof n, "") - ), l = null; + m(130, n === null ? "null" : typeof n, "") + ), c = null; } - return a = qi(E, r, a, m), a.elementType = n, a.type = l, a.lanes = f, a; + return a = qi(E, r, a, p), a.elementType = n, a.type = c, a.lanes = f, a; } - function Ba(n, a, r, l) { - return n = qi(7, n, l, a), n.lanes = r, n; + function Ba(n, a, r, c) { + return n = qi(7, n, c, a), n.lanes = r, n; } - function dc(n, a, r) { + function hc(n, a, r) { return n = qi(6, n, null, a), n.lanes = r, n; } - function Nn(n, a, r) { + function bn(n, a, r) { return a = qi( 4, n.children !== null ? n.children : [], @@ -8176,40 +8333,40 @@ Error generating stack: ` + r.message + ` implementation: n.implementation }, a; } - var ms = [], ps = 0, xd = null, uc = 0, wa = [], $i = 0, yo = null, lr = 1, _n = ""; - function wt(n, a) { - ms[ps++] = uc, ms[ps++] = xd, xd = n, uc = a; + var ms = [], ps = 0, Od = null, mc = 0, wa = [], $i = 0, bo = null, cr = 1, _n = ""; + function At(n, a) { + ms[ps++] = mc, ms[ps++] = Od, Od = n, mc = a; } - function _u(n, a, r) { - wa[$i++] = lr, wa[$i++] = _n, wa[$i++] = yo, yo = n; - var l = lr; + function ku(n, a, r) { + wa[$i++] = cr, wa[$i++] = _n, wa[$i++] = bo, bo = n; + var c = cr; n = _n; - var m = 32 - Jn(l) - 1; - l &= ~(1 << m), r += 1; - var f = 32 - Jn(a) + m; + var p = 32 - Jn(c) - 1; + c &= ~(1 << p), r += 1; + var f = 32 - Jn(a) + p; if (30 < f) { - var E = m - m % 5; - f = (l & (1 << E) - 1).toString(32), l >>= E, m -= E, lr = 1 << 32 - Jn(a) + m | r << m | l, _n = f + n; + var E = p - p % 5; + f = (c & (1 << E) - 1).toString(32), c >>= E, p -= E, cr = 1 << 32 - Jn(a) + p | r << p | c, _n = f + n; } else - lr = 1 << f | r << m | l, _n = n; + cr = 1 << f | r << p | c, _n = n; } - function ol(n) { - n.return !== null && (wt(n, 1), _u(n, 1, 0)); + function sl(n) { + n.return !== null && (At(n, 1), ku(n, 1, 0)); } - function Mr(n) { - for (; n === xd; ) - xd = ms[--ps], ms[ps] = null, uc = ms[--ps], ms[ps] = null; - for (; n === yo; ) - yo = wa[--$i], wa[$i] = null, _n = wa[--$i], wa[$i] = null, lr = wa[--$i], wa[$i] = null; + function Qr(n) { + for (; n === Od; ) + Od = ms[--ps], ms[ps] = null, mc = ms[--ps], ms[ps] = null; + for (; n === bo; ) + bo = wa[--$i], wa[$i] = null, _n = wa[--$i], wa[$i] = null, cr = wa[--$i], wa[$i] = null; } - var Ln = null, Wt = null, It = !1, Aa = null, Ja = !1, sl = Error(p(519)); - function No(n) { - var a = Error(p(418, "")); - throw pc(Sa(a, n)), sl; + var Ln = null, Wt = null, It = !1, Aa = null, Ja = !1, ll = Error(m(519)); + function Vo(n) { + var a = Error(m(418, "")); + throw gc(Sa(a, n)), ll; } - function Zd(n) { - var a = n.stateNode, r = n.type, l = n.memoizedProps; - switch (a[nn] = n, a[Gn] = l, r) { + function Bd(n) { + var a = n.stateNode, r = n.type, c = n.memoizedProps; + switch (a[nn] = n, a[Gn] = c, r) { case "dialog": Ut("cancel", a), Ut("close", a); break; @@ -8220,8 +8377,8 @@ Error generating stack: ` + r.message + ` break; case "video": case "audio": - for (r = 0; r < E0.length; r++) - Ut(E0[r], a); + for (r = 0; r < T0.length; r++) + Ut(T0[r], a); break; case "source": Ut("error", a); @@ -8235,14 +8392,14 @@ Error generating stack: ` + r.message + ` Ut("toggle", a); break; case "input": - Ut("invalid", a), mu( + Ut("invalid", a), fu( a, - l.value, - l.defaultValue, - l.checked, - l.defaultChecked, - l.type, - l.name, + c.value, + c.defaultValue, + c.checked, + c.defaultChecked, + c.type, + c.name, !0 ), is(a); break; @@ -8250,11 +8407,11 @@ Error generating stack: ` + r.message + ` Ut("invalid", a); break; case "textarea": - Ut("invalid", a), Yh(a, l.value, l.defaultValue, l.children), is(a); + Ut("invalid", a), Xh(a, c.value, c.defaultValue, c.children), is(a); } - r = l.children, typeof r != "string" && typeof r != "number" && typeof r != "bigint" || a.textContent === "" + r || l.suppressHydrationWarning === !0 || xp(a.textContent, r) ? (l.popover != null && (Ut("beforetoggle", a), Ut("toggle", a)), l.onScroll != null && Ut("scroll", a), l.onScrollEnd != null && Ut("scrollend", a), l.onClick != null && (a.onclick = A1), a = !0) : a = !1, a || No(n); + r = c.children, typeof r != "string" && typeof r != "number" && typeof r != "bigint" || a.textContent === "" + r || c.suppressHydrationWarning === !0 || Zp(a.textContent, r) ? (c.popover != null && (Ut("beforetoggle", a), Ut("toggle", a)), c.onScroll != null && Ut("scroll", a), c.onScrollEnd != null && Ut("scrollend", a), c.onClick != null && (a.onclick = L1), a = !0) : a = !1, a || Vo(n); } - function Um(n) { + function Tm(n) { for (Ln = n.return; Ln; ) switch (Ln.tag) { case 5: @@ -8269,18 +8426,18 @@ Error generating stack: ` + r.message + ` Ln = Ln.return; } } - function hc(n) { + function pc(n) { if (n !== Ln) return !1; - if (!It) return Um(n), It = !0, !1; + if (!It) return Tm(n), It = !0, !1; var a = n.tag, r; - if ((r = a !== 3 && a !== 27) && ((r = a === 5) && (r = n.type, r = !(r !== "form" && r !== "button") || Xr(n.type, n.memoizedProps)), r = !r), r && Wt && No(n), Um(n), a === 13) { - if (n = n.memoizedState, n = n !== null ? n.dehydrated : null, !n) throw Error(p(317)); + if ((r = a !== 3 && a !== 27) && ((r = a === 5) && (r = n.type, r = !(r !== "form" && r !== "button") || qr(n.type, n.memoizedProps)), r = !r), r && Wt && Vo(n), Tm(n), a === 13) { + if (n = n.memoizedState, n = n !== null ? n.dehydrated : null, !n) throw Error(m(317)); e: { for (n = n.nextSibling, a = 0; n; ) { if (n.nodeType === 8) if (r = n.data, r === "/$") { if (a === 0) { - Wt = pr(n.nextSibling); + Wt = fr(n.nextSibling); break e; } a--; @@ -8291,105 +8448,105 @@ Error generating stack: ` + r.message + ` Wt = null; } } else - a === 27 ? (a = Wt, Qs(n.type) ? (n = Ds, Ds = null, Wt = n) : Wt = a) : Wt = Ln ? pr(n.stateNode.nextSibling) : null; + a === 27 ? (a = Wt, Qs(n.type) ? (n = Ds, Ds = null, Wt = n) : Wt = a) : Wt = Ln ? fr(n.stateNode.nextSibling) : null; return !0; } - function mc() { + function fc() { Wt = Ln = null, It = !1; } - function Tm() { + function ym() { var n = Aa; return n !== null && (ra === null ? ra = n : ra.push.apply( ra, n ), Aa = null), n; } - function pc(n) { + function gc(n) { Aa === null ? Aa = [n] : Aa.push(n); } - var Od = L(null), bo = null, cr = null; - function Vo(n, a, r) { - pe(Od, a._currentValue), a._currentValue = r; + var wd = L(null), Co = null, dr = null; + function Fo(n, a, r) { + pe(wd, a._currentValue), a._currentValue = r; } - function kr(n) { - n._currentValue = Od.current, j(Od); + function Dr(n) { + n._currentValue = wd.current, j(wd); } - function Mu(n, a, r) { + function Qu(n, a, r) { for (; n !== null; ) { - var l = n.alternate; - if ((n.childLanes & a) !== a ? (n.childLanes |= a, l !== null && (l.childLanes |= a)) : l !== null && (l.childLanes & a) !== a && (l.childLanes |= a), n === r) break; + var c = n.alternate; + if ((n.childLanes & a) !== a ? (n.childLanes |= a, c !== null && (c.childLanes |= a)) : c !== null && (c.childLanes & a) !== a && (c.childLanes |= a), n === r) break; n = n.return; } } - function ym(n, a, r, l) { - var m = n.child; - for (m !== null && (m.return = n); m !== null; ) { - var f = m.dependencies; + function Nm(n, a, r, c) { + var p = n.child; + for (p !== null && (p.return = n); p !== null; ) { + var f = p.dependencies; if (f !== null) { - var E = m.child; + var E = p.child; f = f.firstContext; e: for (; f !== null; ) { var _ = f; - f = m; + f = p; for (var O = 0; O < a.length; O++) if (_.context === a[O]) { - f.lanes |= r, _ = f.alternate, _ !== null && (_.lanes |= r), Mu( + f.lanes |= r, _ = f.alternate, _ !== null && (_.lanes |= r), Qu( f.return, r, n - ), l || (E = null); + ), c || (E = null); break e; } f = _.next; } - } else if (m.tag === 18) { - if (E = m.return, E === null) throw Error(p(341)); - E.lanes |= r, f = E.alternate, f !== null && (f.lanes |= r), Mu(E, r, n), E = null; - } else E = m.child; - if (E !== null) E.return = m; + } else if (p.tag === 18) { + if (E = p.return, E === null) throw Error(m(341)); + E.lanes |= r, f = E.alternate, f !== null && (f.lanes |= r), Qu(E, r, n), E = null; + } else E = p.child; + if (E !== null) E.return = p; else - for (E = m; E !== null; ) { + for (E = p; E !== null; ) { if (E === n) { E = null; break; } - if (m = E.sibling, m !== null) { - m.return = E.return, E = m; + if (p = E.sibling, p !== null) { + p.return = E.return, E = p; break; } E = E.return; } - m = E; + p = E; } } - function fc(n, a, r, l) { + function vc(n, a, r, c) { n = null; - for (var m = a, f = !1; m !== null; ) { + for (var p = a, f = !1; p !== null; ) { if (!f) { - if ((m.flags & 524288) !== 0) f = !0; - else if ((m.flags & 262144) !== 0) break; + if ((p.flags & 524288) !== 0) f = !0; + else if ((p.flags & 262144) !== 0) break; } - if (m.tag === 10) { - var E = m.alternate; - if (E === null) throw Error(p(387)); + if (p.tag === 10) { + var E = p.alternate; + if (E === null) throw Error(m(387)); if (E = E.memoizedProps, E !== null) { - var _ = m.type; - hi(m.pendingProps.value, E.value) || (n !== null ? n.push(_) : n = [_]); + var _ = p.type; + hi(p.pendingProps.value, E.value) || (n !== null ? n.push(_) : n = [_]); } - } else if (m === tn.current) { - if (E = m.alternate, E === null) throw Error(p(387)); - E.memoizedState.memoizedState !== m.memoizedState.memoizedState && (n !== null ? n.push(ca) : n = [ca]); + } else if (p === tn.current) { + if (E = p.alternate, E === null) throw Error(m(387)); + E.memoizedState.memoizedState !== p.memoizedState.memoizedState && (n !== null ? n.push(ca) : n = [ca]); } - m = m.return; + p = p.return; } - n !== null && ym( + n !== null && Nm( a, n, r, - l + c ), a.flags |= 262144; } - function Bd(n) { + function Ad(n) { for (n = n.firstContext; n !== null; ) { if (!hi( n.context._currentValue, @@ -8401,27 +8558,27 @@ Error generating stack: ` + r.message + ` return !1; } function fs(n) { - bo = n, cr = null, n = n.dependencies, n !== null && (n.firstContext = null); + Co = n, dr = null, n = n.dependencies, n !== null && (n.firstContext = null); } function ii(n) { - return Nm(bo, n); + return bm(Co, n); } - function wd(n, a) { - return bo === null && fs(n), Nm(n, a); + function Jd(n, a) { + return Co === null && fs(n), bm(n, a); } - function Nm(n, a) { + function bm(n, a) { var r = a._currentValue; - if (a = { context: a, memoizedValue: r, next: null }, cr === null) { - if (n === null) throw Error(p(308)); - cr = a, n.dependencies = { lanes: 0, firstContext: a }, n.flags |= 524288; - } else cr = cr.next = a; + if (a = { context: a, memoizedValue: r, next: null }, dr === null) { + if (n === null) throw Error(m(308)); + dr = a, n.dependencies = { lanes: 0, firstContext: a }, n.flags |= 524288; + } else dr = dr.next = a; return r; } - var gc = typeof AbortController < "u" ? AbortController : function() { + var Sc = typeof AbortController < "u" ? AbortController : function() { var n = [], a = this.signal = { aborted: !1, - addEventListener: function(r, l) { - n.push(l); + addEventListener: function(r, c) { + n.push(c); } }; this.abort = function() { @@ -8429,113 +8586,113 @@ Error generating stack: ` + r.message + ` return r(); }); }; - }, ku = c.unstable_scheduleCallback, g2 = c.unstable_NormalPriority, Yn = { - $$typeof: Re, + }, Du = l.unstable_scheduleCallback, S2 = l.unstable_NormalPriority, Yn = { + $$typeof: ge, Consumer: null, Provider: null, _currentValue: null, _currentValue2: null, _threadCount: 0 }; - function vc() { + function Rc() { return { - controller: new gc(), + controller: new Sc(), data: /* @__PURE__ */ new Map(), refCount: 0 }; } - function Qr(n) { - n.refCount--, n.refCount === 0 && ku(g2, function() { + function xr(n) { + n.refCount--, n.refCount === 0 && Du(S2, function() { n.controller.abort(); }); } - var gs = null, Ad = 0, La = 0, Xn = null; - function Qu(n, a) { + var gs = null, Ld = 0, La = 0, Xn = null; + function xu(n, a) { if (gs === null) { var r = gs = []; - Ad = 0, La = _l(), Xn = { + Ld = 0, La = Ml(), Xn = { status: "pending", value: void 0, - then: function(l) { - r.push(l); + then: function(c) { + r.push(c); } }; } - return Ad++, a.then(Du, Du), a; + return Ld++, a.then(Zu, Zu), a; } - function Du() { - if (--Ad === 0 && gs !== null) { + function Zu() { + if (--Ld === 0 && gs !== null) { Xn !== null && (Xn.status = "fulfilled"); var n = gs; gs = null, La = 0, Xn = null; for (var a = 0; a < n.length; a++) (0, n[a])(); } } - function v2(n, a) { - var r = [], l = { + function R2(n, a) { + var r = [], c = { status: "pending", value: null, reason: null, - then: function(m) { - r.push(m); + then: function(p) { + r.push(p); } }; return n.then( function() { - l.status = "fulfilled", l.value = a; - for (var m = 0; m < r.length; m++) (0, r[m])(a); + c.status = "fulfilled", c.value = a; + for (var p = 0; p < r.length; p++) (0, r[p])(a); }, - function(m) { - for (l.status = "rejected", l.reason = m, m = 0; m < r.length; m++) - (0, r[m])(void 0); + function(p) { + for (c.status = "rejected", c.reason = p, p = 0; p < r.length; p++) + (0, r[p])(void 0); } - ), l; + ), c; } - var xu = Z.S; + var Ou = Z.S; Z.S = function(n, a) { - typeof a == "object" && a !== null && typeof a.then == "function" && Qu(n, a), xu !== null && xu(n, a); + typeof a == "object" && a !== null && typeof a.then == "function" && xu(n, a), Ou !== null && Ou(n, a); }; - var Dr = L(null); - function Jd() { - var n = Dr.current; + var Zr = L(null); + function Id() { + var n = Zr.current; return n !== null ? n : ln.pooledCache; } - function ll(n, a) { - a === null ? pe(Dr, Dr.current) : pe(Dr, a.pool); + function cl(n, a) { + a === null ? pe(Zr, Zr.current) : pe(Zr, a.pool); } - function Zu() { - var n = Jd(); + function Bu() { + var n = Id(); return n === null ? null : { parent: Yn._currentValue, pool: n }; } - var vs = Error(p(460)), Ou = Error(p(474)), Ld = Error(p(542)), Bu = { then: function() { + var vs = Error(m(460)), wu = Error(m(474)), Wd = Error(m(542)), Au = { then: function() { } }; - function wu(n) { + function Ju(n) { return n = n.status, n === "fulfilled" || n === "rejected"; } - function Id() { + function Hd() { } - function bm(n, a, r) { - switch (r = n[r], r === void 0 ? n.push(a) : r !== a && (a.then(Id, Id), a = r), a.status) { + function Vm(n, a, r) { + switch (r = n[r], r === void 0 ? n.push(a) : r !== a && (a.then(Hd, Hd), a = r), a.status) { case "fulfilled": return a.value; case "rejected": - throw n = a.reason, Cm(n), n; + throw n = a.reason, Fm(n), n; default: - if (typeof a.status == "string") a.then(Id, Id); + if (typeof a.status == "string") a.then(Hd, Hd); else { if (n = ln, n !== null && 100 < n.shellSuspendCounter) - throw Error(p(482)); + throw Error(m(482)); n = a, n.status = "pending", n.then( - function(l) { + function(c) { if (a.status === "pending") { - var m = a; - m.status = "fulfilled", m.value = l; + var p = a; + p.status = "fulfilled", p.value = c; } }, - function(l) { + function(c) { if (a.status === "pending") { - var m = a; - m.status = "rejected", m.reason = l; + var p = a; + p.status = "rejected", p.reason = c; } } ); @@ -8544,23 +8701,23 @@ Error generating stack: ` + r.message + ` case "fulfilled": return a.value; case "rejected": - throw n = a.reason, Cm(n), n; + throw n = a.reason, Fm(n), n; } - throw cl = a, vs; + throw dl = a, vs; } } - var cl = null; - function Vm() { - if (cl === null) throw Error(p(459)); - var n = cl; - return cl = null, n; + var dl = null; + function Cm() { + if (dl === null) throw Error(m(459)); + var n = dl; + return dl = null, n; } - function Cm(n) { - if (n === vs || n === Ld) - throw Error(p(483)); + function Fm(n) { + if (n === vs || n === Wd) + throw Error(m(483)); } - var xr = !1; - function Au(n) { + var Or = !1; + function Lu(n) { n.updateQueue = { baseState: n.memoizedState, firstBaseUpdate: null, @@ -8569,7 +8726,7 @@ Error generating stack: ` + r.message + ` callbacks: null }; } - function Ju(n, a) { + function Iu(n, a) { n = n.updateQueue, a.updateQueue === n && (a.updateQueue = { baseState: n.baseState, firstBaseUpdate: n.firstBaseUpdate, @@ -8581,25 +8738,25 @@ Error generating stack: ` + r.message + ` function ea(n) { return { lane: n, tag: 0, payload: null, callback: null, next: null }; } - function Zr(n, a, r) { - var l = n.updateQueue; - if (l === null) return null; - if (l = l.shared, (Yt & 2) !== 0) { - var m = l.pending; - return m === null ? a.next = a : (a.next = m.next, m.next = a), l.pending = a, a = Qd(n), lc(n, null, r), a; + function Br(n, a, r) { + var c = n.updateQueue; + if (c === null) return null; + if (c = c.shared, (Yt & 2) !== 0) { + var p = c.pending; + return p === null ? a.next = a : (a.next = p.next, p.next = a), c.pending = a, a = xd(n), dc(n, null, r), a; } - return hs(n, l, a, r), Qd(n); + return hs(n, c, a, r), xd(n); } - function dl(n, a, r) { + function ul(n, a, r) { if (a = a.updateQueue, a !== null && (a = a.shared, (r & 4194048) !== 0)) { - var l = a.lanes; - l &= n.pendingLanes, r |= l, a.lanes = r, dt(n, r); + var c = a.lanes; + c &= n.pendingLanes, r |= c, a.lanes = r, ut(n, r); } } - function Fm(n, a) { - var r = n.updateQueue, l = n.alternate; - if (l !== null && (l = l.updateQueue, r === l)) { - var m = null, f = null; + function _m(n, a) { + var r = n.updateQueue, c = n.alternate; + if (c !== null && (c = c.updateQueue, r === c)) { + var p = null, f = null; if (r = r.firstBaseUpdate, r !== null) { do { var E = { @@ -8609,47 +8766,47 @@ Error generating stack: ` + r.message + ` callback: null, next: null }; - f === null ? m = f = E : f = f.next = E, r = r.next; + f === null ? p = f = E : f = f.next = E, r = r.next; } while (r !== null); - f === null ? m = f = a : f = f.next = a; - } else m = f = a; + f === null ? p = f = a : f = f.next = a; + } else p = f = a; r = { - baseState: l.baseState, - firstBaseUpdate: m, + baseState: c.baseState, + firstBaseUpdate: p, lastBaseUpdate: f, - shared: l.shared, - callbacks: l.callbacks + shared: c.shared, + callbacks: c.callbacks }, n.updateQueue = r; return; } n = r.lastBaseUpdate, n === null ? r.firstBaseUpdate = a : n.next = a, r.lastBaseUpdate = a; } - var _m = !1; - function Sc() { - if (_m) { + var Mm = !1; + function Ec() { + if (Mm) { var n = Xn; if (n !== null) throw n; } } - function Co(n, a, r, l) { - _m = !1; - var m = n.updateQueue; - xr = !1; - var f = m.firstBaseUpdate, E = m.lastBaseUpdate, _ = m.shared.pending; + function _o(n, a, r, c) { + Mm = !1; + var p = n.updateQueue; + Or = !1; + var f = p.firstBaseUpdate, E = p.lastBaseUpdate, _ = p.shared.pending; if (_ !== null) { - m.shared.pending = null; + p.shared.pending = null; var O = _, q = O.next; O.next = null, E === null ? f = q : E.next = q, E = O; var fe = n.alternate; fe !== null && (fe = fe.updateQueue, _ = fe.lastBaseUpdate, _ !== E && (_ === null ? fe.firstBaseUpdate = q : _.next = q, fe.lastBaseUpdate = O)); } if (f !== null) { - var Se = m.baseState; + var Re = p.baseState; E = 0, fe = q = O = null, _ = f; do { - var te = _.lane & -536870913, ie = te !== _.lane; - if (ie ? (xt & te) === te : (l & te) === te) { - te !== 0 && te === La && (_m = !0), fe !== null && (fe = fe.next = { + var te = _.lane & -536870913, ae = te !== _.lane; + if (ae ? (xt & te) === te : (c & te) === te) { + te !== 0 && te === La && (Mm = !0), fe !== null && (fe = fe.next = { lane: 0, tag: _.tag, payload: _.payload, @@ -8663,117 +8820,117 @@ Error generating stack: ` + r.message + ` switch (at.tag) { case 1: if (it = at.payload, typeof it == "function") { - Se = it.call(zt, Se, te); + Re = it.call(zt, Re, te); break e; } - Se = it; + Re = it; break e; case 3: it.flags = it.flags & -65537 | 128; case 0: - if (it = at.payload, te = typeof it == "function" ? it.call(zt, Se, te) : it, te == null) break e; - Se = b({}, Se, te); + if (it = at.payload, te = typeof it == "function" ? it.call(zt, Re, te) : it, te == null) break e; + Re = b({}, Re, te); break e; case 2: - xr = !0; + Or = !0; } } - te = _.callback, te !== null && (n.flags |= 64, ie && (n.flags |= 8192), ie = m.callbacks, ie === null ? m.callbacks = [te] : ie.push(te)); + te = _.callback, te !== null && (n.flags |= 64, ae && (n.flags |= 8192), ae = p.callbacks, ae === null ? p.callbacks = [te] : ae.push(te)); } else - ie = { + ae = { lane: te, tag: _.tag, payload: _.payload, callback: _.callback, next: null - }, fe === null ? (q = fe = ie, O = Se) : fe = fe.next = ie, E |= te; + }, fe === null ? (q = fe = ae, O = Re) : fe = fe.next = ae, E |= te; if (_ = _.next, _ === null) { - if (_ = m.shared.pending, _ === null) + if (_ = p.shared.pending, _ === null) break; - ie = _, _ = ie.next, ie.next = null, m.lastBaseUpdate = ie, m.shared.pending = null; + ae = _, _ = ae.next, ae.next = null, p.lastBaseUpdate = ae, p.shared.pending = null; } } while (!0); - fe === null && (O = Se), m.baseState = O, m.firstBaseUpdate = q, m.lastBaseUpdate = fe, f === null && (m.shared.lanes = 0), xo |= E, n.lanes = E, n.memoizedState = Se; + fe === null && (O = Re), p.baseState = O, p.firstBaseUpdate = q, p.lastBaseUpdate = fe, f === null && (p.shared.lanes = 0), Oo |= E, n.lanes = E, n.memoizedState = Re; } } - function Lu(n, a) { + function Wu(n, a) { if (typeof n != "function") - throw Error(p(191, n)); + throw Error(m(191, n)); n.call(a); } - function Wd(n, a) { + function zd(n, a) { var r = n.callbacks; if (r !== null) for (n.callbacks = null, n = 0; n < r.length; n++) - Lu(r[n], a); + Wu(r[n], a); } - var ul = L(null), Hd = L(0); + var hl = L(null), jd = L(0); function ai(n, a) { - n = Do, pe(Hd, n), pe(ul, a), Do = n | a.baseLanes; + n = Zo, pe(jd, n), pe(hl, a), Zo = n | a.baseLanes; } - function Rc() { - pe(Hd, Do), pe(ul, ul.current); + function Uc() { + pe(jd, Zo), pe(hl, hl.current); } - function Ec() { - Do = Hd.current, j(ul), j(Hd); + function Tc() { + Zo = jd.current, j(hl), j(jd); } - var Ia = 0, Et = null, Gt = null, bn = null, zd = !1, Ra = !1, Ss = !1, dr = 0, Ea = 0, Fo = null, Mm = 0; - function Vn() { - throw Error(p(321)); + var Ia = 0, Et = null, Gt = null, Vn = null, Pd = !1, Ra = !1, Ss = !1, ur = 0, Ea = 0, Mo = null, km = 0; + function Cn() { + throw Error(m(321)); } - function Iu(n, a) { + function Hu(n, a) { if (a === null) return !1; for (var r = 0; r < a.length && r < n.length; r++) if (!hi(n[r], a[r])) return !1; return !0; } - function Wu(n, a, r, l, m, f) { - return Ia = f, Et = a, a.memoizedState = null, a.updateQueue = null, a.lanes = 0, Z.H = n === null || n.memoizedState === null ? zm : jm, Ss = !1, f = r(l, m), Ss = !1, Ra && (f = km( + function zu(n, a, r, c, p, f) { + return Ia = f, Et = a, a.memoizedState = null, a.updateQueue = null, a.lanes = 0, Z.H = n === null || n.memoizedState === null ? jm : Pm, Ss = !1, f = r(c, p), Ss = !1, Ra && (f = Qm( a, r, - l, - m + c, + p )), Rs(n), f; } function Rs(n) { - Z.H = o1; + Z.H = l1; var a = Gt !== null && Gt.next !== null; - if (Ia = 0, bn = Gt = Et = null, zd = !1, Ea = 0, Fo = null, a) throw Error(p(300)); - n === null || Kn || (n = n.dependencies, n !== null && Bd(n) && (Kn = !0)); + if (Ia = 0, Vn = Gt = Et = null, Pd = !1, Ea = 0, Mo = null, a) throw Error(m(300)); + n === null || Kn || (n = n.dependencies, n !== null && Ad(n) && (Kn = !0)); } - function km(n, a, r, l) { + function Qm(n, a, r, c) { Et = n; - var m = 0; + var p = 0; do { - if (Ra && (Fo = null), Ea = 0, Ra = !1, 25 <= m) throw Error(p(301)); - if (m += 1, bn = Gt = null, n.updateQueue != null) { + if (Ra && (Mo = null), Ea = 0, Ra = !1, 25 <= p) throw Error(m(301)); + if (p += 1, Vn = Gt = null, n.updateQueue != null) { var f = n.updateQueue; f.lastEffect = null, f.events = null, f.stores = null, f.memoCache != null && (f.memoCache.index = 0); } - Z.H = _o, f = a(r, l); + Z.H = ko, f = a(r, c); } while (Ra); return f; } - function S2() { + function E2() { var n = Z.H, a = n.useState()[0]; - return a = typeof a.then == "function" ? Pd(a) : a, n = n.useState()[0], (Gt !== null ? Gt.memoizedState : null) !== n && (Et.flags |= 1024), a; + return a = typeof a.then == "function" ? Yd(a) : a, n = n.useState()[0], (Gt !== null ? Gt.memoizedState : null) !== n && (Et.flags |= 1024), a; } - function Hu() { - var n = dr !== 0; - return dr = 0, n; + function ju() { + var n = ur !== 0; + return ur = 0, n; } - function Uc(n, a, r) { + function yc(n, a, r) { a.updateQueue = n.updateQueue, a.flags &= -2053, n.lanes &= ~r; } - function zu(n) { - if (zd) { + function Pu(n) { + if (Pd) { for (n = n.memoizedState; n !== null; ) { var a = n.queue; a !== null && (a.pending = null), n = n.next; } - zd = !1; + Pd = !1; } - Ia = 0, bn = Gt = Et = null, Ra = !1, Ea = dr = 0, Fo = null; + Ia = 0, Vn = Gt = Et = null, Ra = !1, Ea = ur = 0, Mo = null; } function Ci() { var n = { @@ -8783,85 +8940,85 @@ Error generating stack: ` + r.message + ` queue: null, next: null }; - return bn === null ? Et.memoizedState = bn = n : bn = bn.next = n, bn; + return Vn === null ? Et.memoizedState = Vn = n : Vn = Vn.next = n, Vn; } function Mn() { if (Gt === null) { var n = Et.alternate; n = n !== null ? n.memoizedState : null; } else n = Gt.next; - var a = bn === null ? Et.memoizedState : bn.next; + var a = Vn === null ? Et.memoizedState : Vn.next; if (a !== null) - bn = a, Gt = n; + Vn = a, Gt = n; else { if (n === null) - throw Et.alternate === null ? Error(p(467)) : Error(p(310)); + throw Et.alternate === null ? Error(m(467)) : Error(m(310)); Gt = n, n = { memoizedState: Gt.memoizedState, baseState: Gt.baseState, baseQueue: Gt.baseQueue, queue: Gt.queue, next: null - }, bn === null ? Et.memoizedState = bn = n : bn = bn.next = n; + }, Vn === null ? Et.memoizedState = Vn = n : Vn = Vn.next = n; } - return bn; + return Vn; } - function jd() { + function Gd() { return { lastEffect: null, events: null, stores: null, memoCache: null }; } - function Pd(n) { + function Yd(n) { var a = Ea; - return Ea += 1, Fo === null && (Fo = []), n = bm(Fo, n, a), a = Et, (bn === null ? a.memoizedState : bn.next) === null && (a = a.alternate, Z.H = a === null || a.memoizedState === null ? zm : jm), n; + return Ea += 1, Mo === null && (Mo = []), n = Vm(Mo, n, a), a = Et, (Vn === null ? a.memoizedState : Vn.next) === null && (a = a.alternate, Z.H = a === null || a.memoizedState === null ? jm : Pm), n; } function zn(n) { if (n !== null && typeof n == "object") { - if (typeof n.then == "function") return Pd(n); - if (n.$$typeof === Re) return ii(n); + if (typeof n.then == "function") return Yd(n); + if (n.$$typeof === ge) return ii(n); } - throw Error(p(438, String(n))); + throw Error(m(438, String(n))); } - function ju(n) { + function Gu(n) { var a = null, r = Et.updateQueue; if (r !== null && (a = r.memoCache), a == null) { - var l = Et.alternate; - l !== null && (l = l.updateQueue, l !== null && (l = l.memoCache, l != null && (a = { - data: l.data.map(function(m) { - return m.slice(); + var c = Et.alternate; + c !== null && (c = c.updateQueue, c !== null && (c = c.memoCache, c != null && (a = { + data: c.data.map(function(p) { + return p.slice(); }), index: 0 }))); } - if (a == null && (a = { data: [], index: 0 }), r === null && (r = jd(), Et.updateQueue = r), r.memoCache = a, r = a.data[a.index], r === void 0) - for (r = a.data[a.index] = Array(n), l = 0; l < n; l++) - r[l] = Ue; + if (a == null && (a = { data: [], index: 0 }), r === null && (r = Gd(), Et.updateQueue = r), r.memoCache = a, r = a.data[a.index], r === void 0) + for (r = a.data[a.index] = Array(n), c = 0; c < n; c++) + r[c] = ye; return a.index++, r; } - function Or(n, a) { + function wr(n, a) { return typeof a == "function" ? a(n) : a; } - function Gd(n) { + function Xd(n) { var a = Mn(); - return Pu(a, Gt, n); + return Yu(a, Gt, n); } - function Pu(n, a, r) { - var l = n.queue; - if (l === null) throw Error(p(311)); - l.lastRenderedReducer = r; - var m = n.baseQueue, f = l.pending; + function Yu(n, a, r) { + var c = n.queue; + if (c === null) throw Error(m(311)); + c.lastRenderedReducer = r; + var p = n.baseQueue, f = c.pending; if (f !== null) { - if (m !== null) { - var E = m.next; - m.next = f.next, f.next = E; + if (p !== null) { + var E = p.next; + p.next = f.next, f.next = E; } - a.baseQueue = m = f, l.pending = null; + a.baseQueue = p = f, c.pending = null; } - if (f = n.baseState, m === null) n.memoizedState = f; + if (f = n.baseState, p === null) n.memoizedState = f; else { - a = m.next; + a = p.next; var _ = E = null, O = null, q = a, fe = !1; do { - var Se = q.lane & -536870913; - if (Se !== q.lane ? (xt & Se) === Se : (Ia & Se) === Se) { + var Re = q.lane & -536870913; + if (Re !== q.lane ? (xt & Re) === Re : (Ia & Re) === Re) { var te = q.revertLane; if (te === 0) O !== null && (O = O.next = { @@ -8871,93 +9028,93 @@ Error generating stack: ` + r.message + ` hasEagerState: q.hasEagerState, eagerState: q.eagerState, next: null - }), Se === La && (fe = !0); + }), Re === La && (fe = !0); else if ((Ia & te) === te) { q = q.next, te === La && (fe = !0); continue; } else - Se = { + Re = { lane: 0, revertLane: q.revertLane, action: q.action, hasEagerState: q.hasEagerState, eagerState: q.eagerState, next: null - }, O === null ? (_ = O = Se, E = f) : O = O.next = Se, Et.lanes |= te, xo |= te; - Se = q.action, Ss && r(f, Se), f = q.hasEagerState ? q.eagerState : r(f, Se); + }, O === null ? (_ = O = Re, E = f) : O = O.next = Re, Et.lanes |= te, Oo |= te; + Re = q.action, Ss && r(f, Re), f = q.hasEagerState ? q.eagerState : r(f, Re); } else te = { - lane: Se, + lane: Re, revertLane: q.revertLane, action: q.action, hasEagerState: q.hasEagerState, eagerState: q.eagerState, next: null - }, O === null ? (_ = O = te, E = f) : O = O.next = te, Et.lanes |= Se, xo |= Se; + }, O === null ? (_ = O = te, E = f) : O = O.next = te, Et.lanes |= Re, Oo |= Re; q = q.next; } while (q !== null && q !== a); if (O === null ? E = f : O.next = _, !hi(f, n.memoizedState) && (Kn = !0, fe && (r = Xn, r !== null))) throw r; - n.memoizedState = f, n.baseState = E, n.baseQueue = O, l.lastRenderedState = f; + n.memoizedState = f, n.baseState = E, n.baseQueue = O, c.lastRenderedState = f; } - return m === null && (l.lanes = 0), [n.memoizedState, l.dispatch]; + return p === null && (c.lanes = 0), [n.memoizedState, c.dispatch]; } - function Gu(n) { + function Xu(n) { var a = Mn(), r = a.queue; - if (r === null) throw Error(p(311)); + if (r === null) throw Error(m(311)); r.lastRenderedReducer = n; - var l = r.dispatch, m = r.pending, f = a.memoizedState; - if (m !== null) { + var c = r.dispatch, p = r.pending, f = a.memoizedState; + if (p !== null) { r.pending = null; - var E = m = m.next; + var E = p = p.next; do f = n(f, E.action), E = E.next; - while (E !== m); + while (E !== p); hi(f, a.memoizedState) || (Kn = !0), a.memoizedState = f, a.baseQueue === null && (a.baseState = f), r.lastRenderedState = f; } - return [f, l]; + return [f, c]; } - function Yd(n, a, r) { - var l = Et, m = Mn(), f = It; + function Kd(n, a, r) { + var c = Et, p = Mn(), f = It; if (f) { - if (r === void 0) throw Error(p(407)); + if (r === void 0) throw Error(m(407)); r = r(); } else r = a(); var E = !hi( - (Gt || m).memoizedState, + (Gt || p).memoizedState, r ); - E && (m.memoizedState = r, Kn = !0), m = m.queue; - var _ = Dm.bind(null, l, m, n); - if (an(2048, 8, _, [n]), m.getSnapshot !== a || E || bn !== null && bn.memoizedState.tag & 1) { - if (l.flags |= 2048, ta( + E && (p.memoizedState = r, Kn = !0), p = p.queue; + var _ = xm.bind(null, c, p, n); + if (an(2048, 8, _, [n]), p.getSnapshot !== a || E || Vn !== null && Vn.memoizedState.tag & 1) { + if (c.flags |= 2048, ta( 9, - qd(), - Qm.bind( + e0(), + Dm.bind( null, - l, - m, + c, + p, r, a ), null - ), ln === null) throw Error(p(349)); - f || (Ia & 124) !== 0 || Yu(l, a, r); + ), ln === null) throw Error(m(349)); + f || (Ia & 124) !== 0 || Ku(c, a, r); } return r; } - function Yu(n, a, r) { - n.flags |= 16384, n = { getSnapshot: a, value: r }, a = Et.updateQueue, a === null ? (a = jd(), Et.updateQueue = a, a.stores = [n]) : (r = a.stores, r === null ? a.stores = [n] : r.push(n)); + function Ku(n, a, r) { + n.flags |= 16384, n = { getSnapshot: a, value: r }, a = Et.updateQueue, a === null ? (a = Gd(), Et.updateQueue = a, a.stores = [n]) : (r = a.stores, r === null ? a.stores = [n] : r.push(n)); } - function Qm(n, a, r, l) { - a.value = r, a.getSnapshot = l, xm(a) && Xu(n); + function Dm(n, a, r, c) { + a.value = r, a.getSnapshot = c, Zm(a) && qu(n); } - function Dm(n, a, r) { + function xm(n, a, r) { return r(function() { - xm(a) && Xu(n); + Zm(a) && qu(n); }); } - function xm(n) { + function Zm(n) { var a = n.getSnapshot; n = n.value; try { @@ -8967,11 +9124,11 @@ Error generating stack: ` + r.message + ` return !0; } } - function Xu(n) { - var a = _r(n, 2); + function qu(n) { + var a = kr(n, 2); a !== null && ya(a, n, 2); } - function Xd(n) { + function qd(n) { var a = Ci(); if (typeof n == "function") { var r = n; @@ -8988,22 +9145,22 @@ Error generating stack: ` + r.message + ` pending: null, lanes: 0, dispatch: null, - lastRenderedReducer: Or, + lastRenderedReducer: wr, lastRenderedState: n }, a; } - function Ku(n, a, r, l) { - return n.baseState = r, Pu( + function $u(n, a, r, c) { + return n.baseState = r, Yu( n, Gt, - typeof l == "function" ? l : Or + typeof c == "function" ? c : wr ); } - function R2(n, a, r, l, m) { - if (fl(n)) throw Error(p(485)); + function U2(n, a, r, c, p) { + if (gl(n)) throw Error(m(485)); if (n = a.action, n !== null) { var f = { - payload: m, + payload: p, action: n, next: null, isTransition: !0, @@ -9015,202 +9172,202 @@ Error generating stack: ` + r.message + ` f.listeners.push(E); } }; - Z.T !== null ? r(!0) : f.isTransition = !1, l(f), r = a.pending, r === null ? (f.next = a.pending = f, qu(a, f)) : (f.next = r.next, a.pending = r.next = f); + Z.T !== null ? r(!0) : f.isTransition = !1, c(f), r = a.pending, r === null ? (f.next = a.pending = f, e1(a, f)) : (f.next = r.next, a.pending = r.next = f); } } - function qu(n, a) { - var r = a.action, l = a.payload, m = n.state; + function e1(n, a) { + var r = a.action, c = a.payload, p = n.state; if (a.isTransition) { var f = Z.T, E = {}; Z.T = E; try { - var _ = r(m, l), O = Z.S; - O !== null && O(E, _), Kd(n, a, _); + var _ = r(p, c), O = Z.S; + O !== null && O(E, _), $d(n, a, _); } catch (q) { - e1(n, a, q); + n1(n, a, q); } finally { Z.T = f; } } else try { - f = r(m, l), Kd(n, a, f); + f = r(p, c), $d(n, a, f); } catch (q) { - e1(n, a, q); + n1(n, a, q); } } - function Kd(n, a, r) { + function $d(n, a, r) { r !== null && typeof r == "object" && typeof r.then == "function" ? r.then( - function(l) { - $u(n, a, l); + function(c) { + t1(n, a, c); }, - function(l) { - return e1(n, a, l); + function(c) { + return n1(n, a, c); } - ) : $u(n, a, r); + ) : t1(n, a, r); } - function $u(n, a, r) { - a.status = "fulfilled", a.value = r, Zm(a), n.state = r, a = n.pending, a !== null && (r = a.next, r === a ? n.pending = null : (r = r.next, a.next = r, qu(n, r))); + function t1(n, a, r) { + a.status = "fulfilled", a.value = r, Om(a), n.state = r, a = n.pending, a !== null && (r = a.next, r === a ? n.pending = null : (r = r.next, a.next = r, e1(n, r))); } - function e1(n, a, r) { - var l = n.pending; - if (n.pending = null, l !== null) { - l = l.next; + function n1(n, a, r) { + var c = n.pending; + if (n.pending = null, c !== null) { + c = c.next; do - a.status = "rejected", a.reason = r, Zm(a), a = a.next; - while (a !== l); + a.status = "rejected", a.reason = r, Om(a), a = a.next; + while (a !== c); } n.action = null; } - function Zm(n) { + function Om(n) { n = n.listeners; for (var a = 0; a < n.length; a++) (0, n[a])(); } - function t1(n, a) { + function i1(n, a) { return a; } - function Om(n, a) { + function Bm(n, a) { if (It) { var r = ln.formState; if (r !== null) { e: { - var l = Et; + var c = Et; if (It) { if (Wt) { t: { - for (var m = Wt, f = Ja; m.nodeType !== 8; ) { + for (var p = Wt, f = Ja; p.nodeType !== 8; ) { if (!f) { - m = null; + p = null; break t; } - if (m = pr( - m.nextSibling - ), m === null) { - m = null; + if (p = fr( + p.nextSibling + ), p === null) { + p = null; break t; } } - f = m.data, m = f === "F!" || f === "F" ? m : null; + f = p.data, p = f === "F!" || f === "F" ? p : null; } - if (m) { - Wt = pr( - m.nextSibling - ), l = m.data === "F!"; + if (p) { + Wt = fr( + p.nextSibling + ), c = p.data === "F!"; break e; } } - No(l); + Vo(c); } - l = !1; + c = !1; } - l && (a = r[0]); + c && (a = r[0]); } } - return r = Ci(), r.memoizedState = r.baseState = a, l = { + return r = Ci(), r.memoizedState = r.baseState = a, c = { pending: null, lanes: 0, dispatch: null, - lastRenderedReducer: t1, + lastRenderedReducer: i1, lastRenderedState: a - }, r.queue = l, r = Wm.bind( + }, r.queue = c, r = Hm.bind( null, Et, - l - ), l.dispatch = r, l = Xd(!1), f = t0.bind( + c + ), c.dispatch = r, c = qd(!1), f = i0.bind( null, Et, !1, - l.queue - ), l = Ci(), m = { + c.queue + ), c = Ci(), p = { state: a, dispatch: null, action: n, pending: null - }, l.queue = m, r = R2.bind( + }, c.queue = p, r = U2.bind( null, Et, - m, + p, f, r - ), m.dispatch = r, l.memoizedState = n, [a, r, !1]; + ), p.dispatch = r, c.memoizedState = n, [a, r, !1]; } - function Br(n) { + function Ar(n) { var a = Mn(); - return n1(a, Gt, n); + return a1(a, Gt, n); } - function n1(n, a, r) { - if (a = Pu( + function a1(n, a, r) { + if (a = Yu( n, a, - t1 - )[0], n = Gd(Or)[0], typeof a == "object" && a !== null && typeof a.then == "function") + i1 + )[0], n = Xd(wr)[0], typeof a == "object" && a !== null && typeof a.then == "function") try { - var l = Pd(a); + var c = Yd(a); } catch (E) { - throw E === vs ? Ld : E; + throw E === vs ? Wd : E; } - else l = a; + else c = a; a = Mn(); - var m = a.queue, f = m.dispatch; + var p = a.queue, f = p.dispatch; return r !== a.memoizedState && (Et.flags |= 2048, ta( 9, - qd(), - yv.bind(null, m, r), + e0(), + bv.bind(null, p, r), null - )), [l, f, n]; + )), [c, f, n]; } - function yv(n, a) { + function bv(n, a) { n.action = a; } - function i1(n) { + function r1(n) { var a = Mn(), r = Gt; if (r !== null) - return n1(a, r, n); + return a1(a, r, n); Mn(), a = a.memoizedState, r = Mn(); - var l = r.queue.dispatch; - return r.memoizedState = n, [a, l, !1]; + var c = r.queue.dispatch; + return r.memoizedState = n, [a, c, !1]; } - function ta(n, a, r, l) { - return n = { tag: n, create: r, deps: l, inst: a, next: null }, a = Et.updateQueue, a === null && (a = jd(), Et.updateQueue = a), r = a.lastEffect, r === null ? a.lastEffect = n.next = n : (l = r.next, r.next = n, n.next = l, a.lastEffect = n), n; + function ta(n, a, r, c) { + return n = { tag: n, create: r, deps: c, inst: a, next: null }, a = Et.updateQueue, a === null && (a = Gd(), Et.updateQueue = a), r = a.lastEffect, r === null ? a.lastEffect = n.next = n : (c = r.next, r.next = n, n.next = c, a.lastEffect = n), n; } - function qd() { + function e0() { return { destroy: void 0, resource: void 0 }; } - function $d() { + function t0() { return Mn().memoizedState; } - function Es(n, a, r, l) { - var m = Ci(); - l = l === void 0 ? null : l, Et.flags |= n, m.memoizedState = ta( + function Es(n, a, r, c) { + var p = Ci(); + c = c === void 0 ? null : c, Et.flags |= n, p.memoizedState = ta( 1 | a, - qd(), + e0(), r, - l + c ); } - function an(n, a, r, l) { - var m = Mn(); - l = l === void 0 ? null : l; - var f = m.memoizedState.inst; - Gt !== null && l !== null && Iu(l, Gt.memoizedState.deps) ? m.memoizedState = ta(a, f, r, l) : (Et.flags |= n, m.memoizedState = ta( + function an(n, a, r, c) { + var p = Mn(); + c = c === void 0 ? null : c; + var f = p.memoizedState.inst; + Gt !== null && c !== null && Hu(c, Gt.memoizedState.deps) ? p.memoizedState = ta(a, f, r, c) : (Et.flags |= n, p.memoizedState = ta( 1 | a, f, r, - l + c )); } - function E2(n, a) { + function T2(n, a) { Es(8390656, 8, n, a); } - function U2(n, a) { + function y2(n, a) { an(2048, 8, n, a); } - function Bm(n, a) { + function wm(n, a) { return an(4, 2, n, a); } - function ur(n, a) { + function hr(n, a) { return an(4, 4, n, a); } - function wm(n, a) { + function Am(n, a) { if (typeof a == "function") { n = n(); var r = a(n); @@ -9223,24 +9380,24 @@ Error generating stack: ` + r.message + ` a.current = null; }; } - function a1(n, a, r) { - r = r != null ? r.concat([n]) : null, an(4, 4, wm.bind(null, a, n), r); + function o1(n, a, r) { + r = r != null ? r.concat([n]) : null, an(4, 4, Am.bind(null, a, n), r); } - function hl() { + function ml() { } - function ml(n, a) { + function pl(n, a) { var r = Mn(); a = a === void 0 ? null : a; - var l = r.memoizedState; - return a !== null && Iu(a, l[1]) ? l[0] : (r.memoizedState = [n, a], n); + var c = r.memoizedState; + return a !== null && Hu(a, c[1]) ? c[0] : (r.memoizedState = [n, a], n); } - function Am(n, a) { + function Jm(n, a) { var r = Mn(); a = a === void 0 ? null : a; - var l = r.memoizedState; - if (a !== null && Iu(a, l[1])) - return l[0]; - if (l = n(), Ss) { + var c = r.memoizedState; + if (a !== null && Hu(a, c[1])) + return c[0]; + if (c = n(), Ss) { bi(!0); try { n(); @@ -9248,79 +9405,79 @@ Error generating stack: ` + r.message + ` bi(!1); } } - return r.memoizedState = [l, a], l; + return r.memoizedState = [c, a], c; } - function e0(n, a, r) { - return r === void 0 || (Ia & 1073741824) !== 0 ? n.memoizedState = a : (n.memoizedState = r, n = Up(), Et.lanes |= n, xo |= n, r); + function n0(n, a, r) { + return r === void 0 || (Ia & 1073741824) !== 0 ? n.memoizedState = a : (n.memoizedState = r, n = Tp(), Et.lanes |= n, Oo |= n, r); } - function Jm(n, a, r, l) { - return hi(r, a) ? r : ul.current !== null ? (n = e0(n, r, l), hi(n, a) || (Kn = !0), n) : (Ia & 42) === 0 ? (Kn = !0, n.memoizedState = r) : (n = Up(), Et.lanes |= n, xo |= n, a); + function Lm(n, a, r, c) { + return hi(r, a) ? r : hl.current !== null ? (n = n0(n, r, c), hi(n, a) || (Kn = !0), n) : (Ia & 42) === 0 ? (Kn = !0, n.memoizedState = r) : (n = Tp(), Et.lanes |= n, Oo |= n, a); } - function T2(n, a, r, l, m) { - var f = X.p; - X.p = f !== 0 && 8 > f ? f : 8; + function N2(n, a, r, c, p) { + var f = Y.p; + Y.p = f !== 0 && 8 > f ? f : 8; var E = Z.T, _ = {}; - Z.T = _, t0(n, !1, a, r); + Z.T = _, i0(n, !1, a, r); try { - var O = m(), q = Z.S; + var O = p(), q = Z.S; if (q !== null && q(_, O), O !== null && typeof O == "object" && typeof O.then == "function") { - var fe = v2( + var fe = R2( O, - l + c ); - pl( + fl( n, a, fe, Ta(n) ); } else - pl( + fl( n, a, - l, + c, Ta(n) ); - } catch (Se) { - pl( + } catch (Re) { + fl( n, a, { then: function() { - }, status: "rejected", reason: Se }, + }, status: "rejected", reason: Re }, Ta() ); } finally { - X.p = f, Z.T = E; + Y.p = f, Z.T = E; } } - function Nv() { + function Vv() { } - function r1(n, a, r, l) { - if (n.tag !== 5) throw Error(p(476)); - var m = y2(n).queue; - T2( + function s1(n, a, r, c) { + if (n.tag !== 5) throw Error(m(476)); + var p = b2(n).queue; + N2( n, - m, + p, a, - le, - r === null ? Nv : function() { - return Tc(n), r(l); + oe, + r === null ? Vv : function() { + return Nc(n), r(c); } ); } - function y2(n) { + function b2(n) { var a = n.memoizedState; if (a !== null) return a; a = { - memoizedState: le, - baseState: le, + memoizedState: oe, + baseState: oe, baseQueue: null, queue: { pending: null, lanes: 0, dispatch: null, - lastRenderedReducer: Or, - lastRenderedState: le + lastRenderedReducer: wr, + lastRenderedState: oe }, next: null }; @@ -9333,137 +9490,137 @@ Error generating stack: ` + r.message + ` pending: null, lanes: 0, dispatch: null, - lastRenderedReducer: Or, + lastRenderedReducer: wr, lastRenderedState: r }, next: null }, n.memoizedState = a, n = n.alternate, n !== null && (n.memoizedState = a), a; } - function Tc(n) { - var a = y2(n).next.queue; - pl(n, a, {}, Ta()); + function Nc(n) { + var a = b2(n).next.queue; + fl(n, a, {}, Ta()); } function Wa() { return ii(ca); } - function Lm() { + function Im() { return Mn().memoizedState; } - function N2() { + function V2() { return Mn().memoizedState; } - function b2(n) { + function C2(n) { for (var a = n.return; a !== null; ) { switch (a.tag) { case 24: case 3: var r = Ta(); n = ea(r); - var l = Zr(a, n, r); - l !== null && (ya(l, a, r), dl(l, a, r)), a = { cache: vc() }, n.payload = a; + var c = Br(a, n, r); + c !== null && (ya(c, a, r), ul(c, a, r)), a = { cache: Rc() }, n.payload = a; return; } a = a.return; } } - function Im(n, a, r) { - var l = Ta(); + function Wm(n, a, r) { + var c = Ta(); r = { - lane: l, + lane: c, revertLane: 0, action: r, hasEagerState: !1, eagerState: null, next: null - }, fl(n) ? V2(a, r) : (r = sc(n, a, r, l), r !== null && (ya(r, n, l), Hm(r, a, l))); + }, gl(n) ? F2(a, r) : (r = cc(n, a, r, c), r !== null && (ya(r, n, c), zm(r, a, c))); } - function Wm(n, a, r) { - var l = Ta(); - pl(n, a, r, l); + function Hm(n, a, r) { + var c = Ta(); + fl(n, a, r, c); } - function pl(n, a, r, l) { - var m = { - lane: l, + function fl(n, a, r, c) { + var p = { + lane: c, revertLane: 0, action: r, hasEagerState: !1, eagerState: null, next: null }; - if (fl(n)) V2(a, m); + if (gl(n)) F2(a, p); else { var f = n.alternate; if (n.lanes === 0 && (f === null || f.lanes === 0) && (f = a.lastRenderedReducer, f !== null)) try { var E = a.lastRenderedState, _ = f(E, r); - if (m.hasEagerState = !0, m.eagerState = _, hi(_, E)) - return hs(n, a, m, 0), ln === null && or(), !1; + if (p.hasEagerState = !0, p.eagerState = _, hi(_, E)) + return hs(n, a, p, 0), ln === null && sr(), !1; } catch { } finally { } - if (r = sc(n, a, m, l), r !== null) - return ya(r, n, l), Hm(r, a, l), !0; + if (r = cc(n, a, p, c), r !== null) + return ya(r, n, c), zm(r, a, c), !0; } return !1; } - function t0(n, a, r, l) { - if (l = { + function i0(n, a, r, c) { + if (c = { lane: 2, - revertLane: _l(), - action: l, + revertLane: Ml(), + action: c, hasEagerState: !1, eagerState: null, next: null - }, fl(n)) { - if (a) throw Error(p(479)); + }, gl(n)) { + if (a) throw Error(m(479)); } else - a = sc( + a = cc( n, r, - l, + c, 2 ), a !== null && ya(a, n, 2); } - function fl(n) { + function gl(n) { var a = n.alternate; return n === Et || a !== null && a === Et; } - function V2(n, a) { - Ra = zd = !0; + function F2(n, a) { + Ra = Pd = !0; var r = n.pending; r === null ? a.next = a : (a.next = r.next, r.next = a), n.pending = a; } - function Hm(n, a, r) { + function zm(n, a, r) { if ((r & 4194048) !== 0) { - var l = a.lanes; - l &= n.pendingLanes, r |= l, a.lanes = r, dt(n, r); + var c = a.lanes; + c &= n.pendingLanes, r |= c, a.lanes = r, ut(n, r); } } - var o1 = { + var l1 = { readContext: ii, use: zn, - useCallback: Vn, - useContext: Vn, - useEffect: Vn, - useImperativeHandle: Vn, - useLayoutEffect: Vn, - useInsertionEffect: Vn, - useMemo: Vn, - useReducer: Vn, - useRef: Vn, - useState: Vn, - useDebugValue: Vn, - useDeferredValue: Vn, - useTransition: Vn, - useSyncExternalStore: Vn, - useId: Vn, - useHostTransitionStatus: Vn, - useFormState: Vn, - useActionState: Vn, - useOptimistic: Vn, - useMemoCache: Vn, - useCacheRefresh: Vn - }, zm = { + useCallback: Cn, + useContext: Cn, + useEffect: Cn, + useImperativeHandle: Cn, + useLayoutEffect: Cn, + useInsertionEffect: Cn, + useMemo: Cn, + useReducer: Cn, + useRef: Cn, + useState: Cn, + useDebugValue: Cn, + useDeferredValue: Cn, + useTransition: Cn, + useSyncExternalStore: Cn, + useId: Cn, + useHostTransitionStatus: Cn, + useFormState: Cn, + useActionState: Cn, + useOptimistic: Cn, + useMemoCache: Cn, + useCacheRefresh: Cn + }, jm = { readContext: ii, use: zn, useCallback: function(n, a) { @@ -9473,12 +9630,12 @@ Error generating stack: ` + r.message + ` ], n; }, useContext: ii, - useEffect: E2, + useEffect: T2, useImperativeHandle: function(n, a, r) { r = r != null ? r.concat([n]) : null, Es( 4194308, 4, - wm.bind(null, a, n), + Am.bind(null, a, n), r ); }, @@ -9491,7 +9648,7 @@ Error generating stack: ` + r.message + ` useMemo: function(n, a) { var r = Ci(); a = a === void 0 ? null : a; - var l = n(); + var c = n(); if (Ss) { bi(!0); try { @@ -9500,12 +9657,12 @@ Error generating stack: ` + r.message + ` bi(!1); } } - return r.memoizedState = [l, a], l; + return r.memoizedState = [c, a], c; }, useReducer: function(n, a, r) { - var l = Ci(); + var c = Ci(); if (r !== void 0) { - var m = r(a); + var p = r(a); if (Ss) { bi(!0); try { @@ -9514,36 +9671,36 @@ Error generating stack: ` + r.message + ` bi(!1); } } - } else m = a; - return l.memoizedState = l.baseState = m, n = { + } else p = a; + return c.memoizedState = c.baseState = p, n = { pending: null, lanes: 0, dispatch: null, lastRenderedReducer: n, - lastRenderedState: m - }, l.queue = n, n = n.dispatch = Im.bind( + lastRenderedState: p + }, c.queue = n, n = n.dispatch = Wm.bind( null, Et, n - ), [l.memoizedState, n]; + ), [c.memoizedState, n]; }, useRef: function(n) { var a = Ci(); return n = { current: n }, a.memoizedState = n; }, useState: function(n) { - n = Xd(n); - var a = n.queue, r = Wm.bind(null, Et, a); + n = qd(n); + var a = n.queue, r = Hm.bind(null, Et, a); return a.dispatch = r, [n.memoizedState, r]; }, - useDebugValue: hl, + useDebugValue: ml, useDeferredValue: function(n, a) { var r = Ci(); - return e0(r, n, a); + return n0(r, n, a); }, useTransition: function() { - var n = Xd(!1); - return n = T2.bind( + var n = qd(!1); + return n = N2.bind( null, Et, n.queue, @@ -9552,26 +9709,26 @@ Error generating stack: ` + r.message + ` ), Ci().memoizedState = n, [!1, n]; }, useSyncExternalStore: function(n, a, r) { - var l = Et, m = Ci(); + var c = Et, p = Ci(); if (It) { if (r === void 0) - throw Error(p(407)); + throw Error(m(407)); r = r(); } else { if (r = a(), ln === null) - throw Error(p(349)); - (xt & 124) !== 0 || Yu(l, a, r); + throw Error(m(349)); + (xt & 124) !== 0 || Ku(c, a, r); } - m.memoizedState = r; + p.memoizedState = r; var f = { value: r, getSnapshot: a }; - return m.queue = f, E2(Dm.bind(null, l, f, n), [ + return p.queue = f, T2(xm.bind(null, c, f, n), [ n - ]), l.flags |= 2048, ta( + ]), c.flags |= 2048, ta( 9, - qd(), - Qm.bind( + e0(), + Dm.bind( null, - l, + c, f, r, a @@ -9582,15 +9739,15 @@ Error generating stack: ` + r.message + ` useId: function() { var n = Ci(), a = ln.identifierPrefix; if (It) { - var r = _n, l = lr; - r = (l & ~(1 << 32 - Jn(l) - 1)).toString(32) + r, a = "«" + a + "R" + r, r = dr++, 0 < r && (a += "H" + r.toString(32)), a += "»"; + var r = _n, c = cr; + r = (c & ~(1 << 32 - Jn(c) - 1)).toString(32) + r, a = "«" + a + "R" + r, r = ur++, 0 < r && (a += "H" + r.toString(32)), a += "»"; } else - r = Mm++, a = "«" + a + "r" + r.toString(32) + "»"; + r = km++, a = "«" + a + "r" + r.toString(32) + "»"; return n.memoizedState = a; }, useHostTransitionStatus: Wa, - useFormState: Om, - useActionState: Om, + useFormState: Bm, + useActionState: Bm, useOptimistic: function(n) { var a = Ci(); a.memoizedState = a.baseState = n; @@ -9601,39 +9758,39 @@ Error generating stack: ` + r.message + ` lastRenderedReducer: null, lastRenderedState: null }; - return a.queue = r, a = t0.bind( + return a.queue = r, a = i0.bind( null, Et, !0, r ), r.dispatch = a, [n, a]; }, - useMemoCache: ju, + useMemoCache: Gu, useCacheRefresh: function() { - return Ci().memoizedState = b2.bind( + return Ci().memoizedState = C2.bind( null, Et ); } - }, jm = { + }, Pm = { readContext: ii, use: zn, - useCallback: ml, + useCallback: pl, useContext: ii, - useEffect: U2, - useImperativeHandle: a1, - useInsertionEffect: Bm, - useLayoutEffect: ur, - useMemo: Am, - useReducer: Gd, - useRef: $d, + useEffect: y2, + useImperativeHandle: o1, + useInsertionEffect: wm, + useLayoutEffect: hr, + useMemo: Jm, + useReducer: Xd, + useRef: t0, useState: function() { - return Gd(Or); + return Xd(wr); }, - useDebugValue: hl, + useDebugValue: ml, useDeferredValue: function(n, a) { var r = Mn(); - return Jm( + return Lm( r, Gt.memoizedState, n, @@ -9641,42 +9798,42 @@ Error generating stack: ` + r.message + ` ); }, useTransition: function() { - var n = Gd(Or)[0], a = Mn().memoizedState; + var n = Xd(wr)[0], a = Mn().memoizedState; return [ - typeof n == "boolean" ? n : Pd(n), + typeof n == "boolean" ? n : Yd(n), a ]; }, - useSyncExternalStore: Yd, - useId: Lm, + useSyncExternalStore: Kd, + useId: Im, useHostTransitionStatus: Wa, - useFormState: Br, - useActionState: Br, + useFormState: Ar, + useActionState: Ar, useOptimistic: function(n, a) { var r = Mn(); - return Ku(r, Gt, n, a); + return $u(r, Gt, n, a); }, - useMemoCache: ju, - useCacheRefresh: N2 - }, _o = { + useMemoCache: Gu, + useCacheRefresh: V2 + }, ko = { readContext: ii, use: zn, - useCallback: ml, + useCallback: pl, useContext: ii, - useEffect: U2, - useImperativeHandle: a1, - useInsertionEffect: Bm, - useLayoutEffect: ur, - useMemo: Am, - useReducer: Gu, - useRef: $d, + useEffect: y2, + useImperativeHandle: o1, + useInsertionEffect: wm, + useLayoutEffect: hr, + useMemo: Jm, + useReducer: Xu, + useRef: t0, useState: function() { - return Gu(Or); + return Xu(wr); }, - useDebugValue: hl, + useDebugValue: ml, useDeferredValue: function(n, a) { var r = Mn(); - return Gt === null ? e0(r, n, a) : Jm( + return Gt === null ? n0(r, n, a) : Lm( r, Gt.memoizedState, n, @@ -9684,48 +9841,48 @@ Error generating stack: ` + r.message + ` ); }, useTransition: function() { - var n = Gu(Or)[0], a = Mn().memoizedState; + var n = Xu(wr)[0], a = Mn().memoizedState; return [ - typeof n == "boolean" ? n : Pd(n), + typeof n == "boolean" ? n : Yd(n), a ]; }, - useSyncExternalStore: Yd, - useId: Lm, + useSyncExternalStore: Kd, + useId: Im, useHostTransitionStatus: Wa, - useFormState: i1, - useActionState: i1, + useFormState: r1, + useActionState: r1, useOptimistic: function(n, a) { var r = Mn(); - return Gt !== null ? Ku(r, Gt, n, a) : (r.baseState = n, [n, r.queue.dispatch]); + return Gt !== null ? $u(r, Gt, n, a) : (r.baseState = n, [n, r.queue.dispatch]); }, - useMemoCache: ju, - useCacheRefresh: N2 - }, gl = null, yc = 0; - function s1(n) { - var a = yc; - return yc += 1, gl === null && (gl = []), bm(gl, n, a); - } - function vl(n, a) { + useMemoCache: Gu, + useCacheRefresh: V2 + }, vl = null, bc = 0; + function c1(n) { + var a = bc; + return bc += 1, vl === null && (vl = []), Vm(vl, n, a); + } + function Sl(n, a) { a = a.props.ref, n.ref = a !== void 0 ? a : null; } function Fi(n, a) { - throw a.$$typeof === M ? Error(p(525)) : (n = Object.prototype.toString.call(a), Error( - p( + throw a.$$typeof === k ? Error(m(525)) : (n = Object.prototype.toString.call(a), Error( + m( 31, n === "[object Object]" ? "object with keys {" + Object.keys(a).join(", ") + "}" : n ) )); } - function Pm(n) { + function Gm(n) { var a = n._init; return a(n._payload); } function na(n) { function a(P, I) { if (n) { - var Y = P.deletions; - Y === null ? (P.deletions = [I], P.flags |= 16) : Y.push(I); + var K = P.deletions; + K === null ? (P.deletions = [I], P.flags |= 16) : K.push(I); } } function r(P, I) { @@ -9734,267 +9891,267 @@ Error generating stack: ` + r.message + ` a(P, I), I = I.sibling; return null; } - function l(P) { + function c(P) { for (var I = /* @__PURE__ */ new Map(); P !== null; ) P.key !== null ? I.set(P.key, P) : I.set(P.index, P), P = P.sibling; return I; } - function m(P, I) { - return P = sr(P, I), P.index = 0, P.sibling = null, P; + function p(P, I) { + return P = lr(P, I), P.index = 0, P.sibling = null, P; } - function f(P, I, Y) { - return P.index = Y, n ? (Y = P.alternate, Y !== null ? (Y = Y.index, Y < I ? (P.flags |= 67108866, I) : Y) : (P.flags |= 67108866, I)) : (P.flags |= 1048576, I); + function f(P, I, K) { + return P.index = K, n ? (K = P.alternate, K !== null ? (K = K.index, K < I ? (P.flags |= 67108866, I) : K) : (P.flags |= 67108866, I)) : (P.flags |= 1048576, I); } function E(P) { return n && P.alternate === null && (P.flags |= 67108866), P; } - function _(P, I, Y, ve) { - return I === null || I.tag !== 6 ? (I = dc(Y, P.mode, ve), I.return = P, I) : (I = m(I, Y), I.return = P, I); + function _(P, I, K, Se) { + return I === null || I.tag !== 6 ? (I = hc(K, P.mode, Se), I.return = P, I) : (I = p(I, K), I.return = P, I); } - function O(P, I, Y, ve) { - var Pe = Y.type; - return Pe === ge ? fe( + function O(P, I, K, Se) { + var Ge = K.type; + return Ge === ve ? fe( P, I, - Y.props.children, - ve, - Y.key - ) : I !== null && (I.elementType === Pe || typeof Pe == "object" && Pe !== null && Pe.$$typeof === Ee && Pm(Pe) === I.type) ? (I = m(I, Y.props), vl(I, Y), I.return = P, I) : (I = _e( - Y.type, - Y.key, - Y.props, + K.props.children, + Se, + K.key + ) : I !== null && (I.elementType === Ge || typeof Ge == "object" && Ge !== null && Ge.$$typeof === ke && Gm(Ge) === I.type) ? (I = p(I, K.props), Sl(I, K), I.return = P, I) : (I = _e( + K.type, + K.key, + K.props, null, P.mode, - ve - ), vl(I, Y), I.return = P, I); + Se + ), Sl(I, K), I.return = P, I); } - function q(P, I, Y, ve) { - return I === null || I.tag !== 4 || I.stateNode.containerInfo !== Y.containerInfo || I.stateNode.implementation !== Y.implementation ? (I = Nn(Y, P.mode, ve), I.return = P, I) : (I = m(I, Y.children || []), I.return = P, I); + function q(P, I, K, Se) { + return I === null || I.tag !== 4 || I.stateNode.containerInfo !== K.containerInfo || I.stateNode.implementation !== K.implementation ? (I = bn(K, P.mode, Se), I.return = P, I) : (I = p(I, K.children || []), I.return = P, I); } - function fe(P, I, Y, ve, Pe) { + function fe(P, I, K, Se, Ge) { return I === null || I.tag !== 7 ? (I = Ba( - Y, + K, P.mode, - ve, - Pe - ), I.return = P, I) : (I = m(I, Y), I.return = P, I); + Se, + Ge + ), I.return = P, I) : (I = p(I, K), I.return = P, I); } - function Se(P, I, Y) { + function Re(P, I, K) { if (typeof I == "string" && I !== "" || typeof I == "number" || typeof I == "bigint") - return I = dc( + return I = hc( "" + I, P.mode, - Y + K ), I.return = P, I; if (typeof I == "object" && I !== null) { switch (I.$$typeof) { case V: - return Y = _e( + return K = _e( I.type, I.key, I.props, null, P.mode, - Y - ), vl(Y, I), Y.return = P, Y; + K + ), Sl(K, I), K.return = P, K; case A: - return I = Nn( + return I = bn( I, P.mode, - Y + K ), I.return = P, I; - case Ee: - var ve = I._init; - return I = ve(I._payload), Se(P, I, Y); + case ke: + var Se = I._init; + return I = Se(I._payload), Re(P, I, K); } - if (Ne(I) || xe(I)) + if (Ue(I) || Ee(I)) return I = Ba( I, P.mode, - Y, + K, null ), I.return = P, I; if (typeof I.then == "function") - return Se(P, s1(I), Y); - if (I.$$typeof === Re) - return Se( + return Re(P, c1(I), K); + if (I.$$typeof === ge) + return Re( P, - wd(P, I), - Y + Jd(P, I), + K ); Fi(P, I); } return null; } - function te(P, I, Y, ve) { - var Pe = I !== null ? I.key : null; - if (typeof Y == "string" && Y !== "" || typeof Y == "number" || typeof Y == "bigint") - return Pe !== null ? null : _(P, I, "" + Y, ve); - if (typeof Y == "object" && Y !== null) { - switch (Y.$$typeof) { + function te(P, I, K, Se) { + var Ge = I !== null ? I.key : null; + if (typeof K == "string" && K !== "" || typeof K == "number" || typeof K == "bigint") + return Ge !== null ? null : _(P, I, "" + K, Se); + if (typeof K == "object" && K !== null) { + switch (K.$$typeof) { case V: - return Y.key === Pe ? O(P, I, Y, ve) : null; + return K.key === Ge ? O(P, I, K, Se) : null; case A: - return Y.key === Pe ? q(P, I, Y, ve) : null; - case Ee: - return Pe = Y._init, Y = Pe(Y._payload), te(P, I, Y, ve); + return K.key === Ge ? q(P, I, K, Se) : null; + case ke: + return Ge = K._init, K = Ge(K._payload), te(P, I, K, Se); } - if (Ne(Y) || xe(Y)) - return Pe !== null ? null : fe(P, I, Y, ve, null); - if (typeof Y.then == "function") + if (Ue(K) || Ee(K)) + return Ge !== null ? null : fe(P, I, K, Se, null); + if (typeof K.then == "function") return te( P, I, - s1(Y), - ve + c1(K), + Se ); - if (Y.$$typeof === Re) + if (K.$$typeof === ge) return te( P, I, - wd(P, Y), - ve + Jd(P, K), + Se ); - Fi(P, Y); + Fi(P, K); } return null; } - function ie(P, I, Y, ve, Pe) { - if (typeof ve == "string" && ve !== "" || typeof ve == "number" || typeof ve == "bigint") - return P = P.get(Y) || null, _(I, P, "" + ve, Pe); - if (typeof ve == "object" && ve !== null) { - switch (ve.$$typeof) { + function ae(P, I, K, Se, Ge) { + if (typeof Se == "string" && Se !== "" || typeof Se == "number" || typeof Se == "bigint") + return P = P.get(K) || null, _(I, P, "" + Se, Ge); + if (typeof Se == "object" && Se !== null) { + switch (Se.$$typeof) { case V: return P = P.get( - ve.key === null ? Y : ve.key - ) || null, O(I, P, ve, Pe); + Se.key === null ? K : Se.key + ) || null, O(I, P, Se, Ge); case A: return P = P.get( - ve.key === null ? Y : ve.key - ) || null, q(I, P, ve, Pe); - case Ee: - var _t = ve._init; - return ve = _t(ve._payload), ie( + Se.key === null ? K : Se.key + ) || null, q(I, P, Se, Ge); + case ke: + var _t = Se._init; + return Se = _t(Se._payload), ae( P, I, - Y, - ve, - Pe + K, + Se, + Ge ); } - if (Ne(ve) || xe(ve)) - return P = P.get(Y) || null, fe(I, P, ve, Pe, null); - if (typeof ve.then == "function") - return ie( + if (Ue(Se) || Ee(Se)) + return P = P.get(K) || null, fe(I, P, Se, Ge, null); + if (typeof Se.then == "function") + return ae( P, I, - Y, - s1(ve), - Pe + K, + c1(Se), + Ge ); - if (ve.$$typeof === Re) - return ie( + if (Se.$$typeof === ge) + return ae( P, I, - Y, - wd(I, ve), - Pe + K, + Jd(I, Se), + Ge ); - Fi(I, ve); + Fi(I, Se); } return null; } - function it(P, I, Y, ve) { - for (var Pe = null, _t = null, nt = I, ot = I = 0, si = null; nt !== null && ot < Y.length; ot++) { - nt.index > ot ? (si = nt, nt = null) : si = nt.sibling; + function it(P, I, K, Se) { + for (var Ge = null, _t = null, nt = I, st = I = 0, si = null; nt !== null && st < K.length; st++) { + nt.index > st ? (si = nt, nt = null) : si = nt.sibling; var Lt = te( P, nt, - Y[ot], - ve + K[st], + Se ); if (Lt === null) { nt === null && (nt = si); break; } - n && nt && Lt.alternate === null && a(P, nt), I = f(Lt, I, ot), _t === null ? Pe = Lt : _t.sibling = Lt, _t = Lt, nt = si; + n && nt && Lt.alternate === null && a(P, nt), I = f(Lt, I, st), _t === null ? Ge = Lt : _t.sibling = Lt, _t = Lt, nt = si; } - if (ot === Y.length) - return r(P, nt), It && wt(P, ot), Pe; + if (st === K.length) + return r(P, nt), It && At(P, st), Ge; if (nt === null) { - for (; ot < Y.length; ot++) - nt = Se(P, Y[ot], ve), nt !== null && (I = f( + for (; st < K.length; st++) + nt = Re(P, K[st], Se), nt !== null && (I = f( nt, I, - ot - ), _t === null ? Pe = nt : _t.sibling = nt, _t = nt); - return It && wt(P, ot), Pe; + st + ), _t === null ? Ge = nt : _t.sibling = nt, _t = nt); + return It && At(P, st), Ge; } - for (nt = l(nt); ot < Y.length; ot++) - si = ie( + for (nt = c(nt); st < K.length; st++) + si = ae( nt, P, - ot, - Y[ot], - ve + st, + K[st], + Se ), si !== null && (n && si.alternate !== null && nt.delete( - si.key === null ? ot : si.key + si.key === null ? st : si.key ), I = f( si, I, - ot - ), _t === null ? Pe = si : _t.sibling = si, _t = si); + st + ), _t === null ? Ge = si : _t.sibling = si, _t = si); return n && nt.forEach(function(ws) { return a(P, ws); - }), It && wt(P, ot), Pe; + }), It && At(P, st), Ge; } - function at(P, I, Y, ve) { - if (Y == null) throw Error(p(151)); - for (var Pe = null, _t = null, nt = I, ot = I = 0, si = null, Lt = Y.next(); nt !== null && !Lt.done; ot++, Lt = Y.next()) { - nt.index > ot ? (si = nt, nt = null) : si = nt.sibling; - var ws = te(P, nt, Lt.value, ve); + function at(P, I, K, Se) { + if (K == null) throw Error(m(151)); + for (var Ge = null, _t = null, nt = I, st = I = 0, si = null, Lt = K.next(); nt !== null && !Lt.done; st++, Lt = K.next()) { + nt.index > st ? (si = nt, nt = null) : si = nt.sibling; + var ws = te(P, nt, Lt.value, Se); if (ws === null) { nt === null && (nt = si); break; } - n && nt && ws.alternate === null && a(P, nt), I = f(ws, I, ot), _t === null ? Pe = ws : _t.sibling = ws, _t = ws, nt = si; + n && nt && ws.alternate === null && a(P, nt), I = f(ws, I, st), _t === null ? Ge = ws : _t.sibling = ws, _t = ws, nt = si; } if (Lt.done) - return r(P, nt), It && wt(P, ot), Pe; + return r(P, nt), It && At(P, st), Ge; if (nt === null) { - for (; !Lt.done; ot++, Lt = Y.next()) - Lt = Se(P, Lt.value, ve), Lt !== null && (I = f(Lt, I, ot), _t === null ? Pe = Lt : _t.sibling = Lt, _t = Lt); - return It && wt(P, ot), Pe; - } - for (nt = l(nt); !Lt.done; ot++, Lt = Y.next()) - Lt = ie(nt, P, ot, Lt.value, ve), Lt !== null && (n && Lt.alternate !== null && nt.delete(Lt.key === null ? ot : Lt.key), I = f(Lt, I, ot), _t === null ? Pe = Lt : _t.sibling = Lt, _t = Lt); - return n && nt.forEach(function(Ov) { - return a(P, Ov); - }), It && wt(P, ot), Pe; - } - function zt(P, I, Y, ve) { - if (typeof Y == "object" && Y !== null && Y.type === ge && Y.key === null && (Y = Y.props.children), typeof Y == "object" && Y !== null) { - switch (Y.$$typeof) { + for (; !Lt.done; st++, Lt = K.next()) + Lt = Re(P, Lt.value, Se), Lt !== null && (I = f(Lt, I, st), _t === null ? Ge = Lt : _t.sibling = Lt, _t = Lt); + return It && At(P, st), Ge; + } + for (nt = c(nt); !Lt.done; st++, Lt = K.next()) + Lt = ae(nt, P, st, Lt.value, Se), Lt !== null && (n && Lt.alternate !== null && nt.delete(Lt.key === null ? st : Lt.key), I = f(Lt, I, st), _t === null ? Ge = Lt : _t.sibling = Lt, _t = Lt); + return n && nt.forEach(function(wv) { + return a(P, wv); + }), It && At(P, st), Ge; + } + function zt(P, I, K, Se) { + if (typeof K == "object" && K !== null && K.type === ve && K.key === null && (K = K.props.children), typeof K == "object" && K !== null) { + switch (K.$$typeof) { case V: e: { - for (var Pe = Y.key; I !== null; ) { - if (I.key === Pe) { - if (Pe = Y.type, Pe === ge) { + for (var Ge = K.key; I !== null; ) { + if (I.key === Ge) { + if (Ge = K.type, Ge === ve) { if (I.tag === 7) { r( P, I.sibling - ), ve = m( + ), Se = p( I, - Y.props.children - ), ve.return = P, P = ve; + K.props.children + ), Se.return = P, P = Se; break e; } - } else if (I.elementType === Pe || typeof Pe == "object" && Pe !== null && Pe.$$typeof === Ee && Pm(Pe) === I.type) { + } else if (I.elementType === Ge || typeof Ge == "object" && Ge !== null && Ge.$$typeof === ke && Gm(Ge) === I.type) { r( P, I.sibling - ), ve = m(I, Y.props), vl(ve, Y), ve.return = P, P = ve; + ), Se = p(I, K.props), Sl(Se, K), Se.return = P, P = Se; break e; } r(P, I); @@ -10002,30 +10159,30 @@ Error generating stack: ` + r.message + ` } else a(P, I); I = I.sibling; } - Y.type === ge ? (ve = Ba( - Y.props.children, + K.type === ve ? (Se = Ba( + K.props.children, P.mode, - ve, - Y.key - ), ve.return = P, P = ve) : (ve = _e( - Y.type, - Y.key, - Y.props, + Se, + K.key + ), Se.return = P, P = Se) : (Se = _e( + K.type, + K.key, + K.props, null, P.mode, - ve - ), vl(ve, Y), ve.return = P, P = ve); + Se + ), Sl(Se, K), Se.return = P, P = Se); } return E(P); case A: e: { - for (Pe = Y.key; I !== null; ) { - if (I.key === Pe) - if (I.tag === 4 && I.stateNode.containerInfo === Y.containerInfo && I.stateNode.implementation === Y.implementation) { + for (Ge = K.key; I !== null; ) { + if (I.key === Ge) + if (I.tag === 4 && I.stateNode.containerInfo === K.containerInfo && I.stateNode.implementation === K.implementation) { r( P, I.sibling - ), ve = m(I, Y.children || []), ve.return = P, P = ve; + ), Se = p(I, K.children || []), Se.return = P, P = Se; break e; } else { r(P, I); @@ -10034,94 +10191,94 @@ Error generating stack: ` + r.message + ` else a(P, I); I = I.sibling; } - ve = Nn(Y, P.mode, ve), ve.return = P, P = ve; + Se = bn(K, P.mode, Se), Se.return = P, P = Se; } return E(P); - case Ee: - return Pe = Y._init, Y = Pe(Y._payload), zt( + case ke: + return Ge = K._init, K = Ge(K._payload), zt( P, I, - Y, - ve + K, + Se ); } - if (Ne(Y)) + if (Ue(K)) return it( P, I, - Y, - ve + K, + Se ); - if (xe(Y)) { - if (Pe = xe(Y), typeof Pe != "function") throw Error(p(150)); - return Y = Pe.call(Y), at( + if (Ee(K)) { + if (Ge = Ee(K), typeof Ge != "function") throw Error(m(150)); + return K = Ge.call(K), at( P, I, - Y, - ve + K, + Se ); } - if (typeof Y.then == "function") + if (typeof K.then == "function") return zt( P, I, - s1(Y), - ve + c1(K), + Se ); - if (Y.$$typeof === Re) + if (K.$$typeof === ge) return zt( P, I, - wd(P, Y), - ve + Jd(P, K), + Se ); - Fi(P, Y); + Fi(P, K); } - return typeof Y == "string" && Y !== "" || typeof Y == "number" || typeof Y == "bigint" ? (Y = "" + Y, I !== null && I.tag === 6 ? (r(P, I.sibling), ve = m(I, Y), ve.return = P, P = ve) : (r(P, I), ve = dc(Y, P.mode, ve), ve.return = P, P = ve), E(P)) : r(P, I); + return typeof K == "string" && K !== "" || typeof K == "number" || typeof K == "bigint" ? (K = "" + K, I !== null && I.tag === 6 ? (r(P, I.sibling), Se = p(I, K), Se.return = P, P = Se) : (r(P, I), Se = hc(K, P.mode, Se), Se.return = P, P = Se), E(P)) : r(P, I); } - return function(P, I, Y, ve) { + return function(P, I, K, Se) { try { - yc = 0; - var Pe = zt( + bc = 0; + var Ge = zt( P, I, - Y, - ve + K, + Se ); - return gl = null, Pe; + return vl = null, Ge; } catch (nt) { - if (nt === vs || nt === Ld) throw nt; + if (nt === vs || nt === Wd) throw nt; var _t = qi(29, nt, null, P.mode); - return _t.lanes = ve, _t.return = P, _t; + return _t.lanes = Se, _t.return = P, _t; } finally { } }; } - var Sl = na(!0), wr = na(!1), Ua = L(null), _i = null; - function Mo(n) { + var Rl = na(!0), Jr = na(!1), Ua = L(null), _i = null; + function Qo(n) { var a = n.alternate; - pe(rn, rn.current & 1), pe(Ua, n), _i === null && (a === null || ul.current !== null || a.memoizedState !== null) && (_i = n); + pe(rn, rn.current & 1), pe(Ua, n), _i === null && (a === null || hl.current !== null || a.memoizedState !== null) && (_i = n); } - function Ar(n) { + function Lr(n) { if (n.tag === 22) { if (pe(rn, rn.current), pe(Ua, n), _i === null) { var a = n.alternate; a !== null && a.memoizedState !== null && (_i = n); } - } else Jr(); + } else Ir(); } - function Jr() { + function Ir() { pe(rn, rn.current), pe(Ua, Ua.current); } - function hr(n) { + function mr(n) { j(Ua), _i === n && (_i = null), j(rn); } var rn = L(0); - function n0(n) { + function a0(n) { for (var a = n; a !== null; ) { if (a.tag === 13) { var r = a.memoizedState; - if (r !== null && (r = r.dehydrated, r === null || r.data === "$?" || b0(r))) + if (r !== null && (r = r.dehydrated, r === null || r.data === "$?" || C0(r))) return a; } else if (a.tag === 19 && a.memoizedProps.revealOrder !== void 0) { if ((a.flags & 128) !== 0) return a; @@ -10138,47 +10295,47 @@ Error generating stack: ` + r.message + ` } return null; } - function Us(n, a, r, l) { - a = n.memoizedState, r = r(l, a), r = r == null ? a : b({}, a, r), n.memoizedState = r, n.lanes === 0 && (n.updateQueue.baseState = r); + function Us(n, a, r, c) { + a = n.memoizedState, r = r(c, a), r = r == null ? a : b({}, a, r), n.memoizedState = r, n.lanes === 0 && (n.updateQueue.baseState = r); } - var l1 = { + var d1 = { enqueueSetState: function(n, a, r) { n = n._reactInternals; - var l = Ta(), m = ea(l); - m.payload = a, r != null && (m.callback = r), a = Zr(n, m, l), a !== null && (ya(a, n, l), dl(a, n, l)); + var c = Ta(), p = ea(c); + p.payload = a, r != null && (p.callback = r), a = Br(n, p, c), a !== null && (ya(a, n, c), ul(a, n, c)); }, enqueueReplaceState: function(n, a, r) { n = n._reactInternals; - var l = Ta(), m = ea(l); - m.tag = 1, m.payload = a, r != null && (m.callback = r), a = Zr(n, m, l), a !== null && (ya(a, n, l), dl(a, n, l)); + var c = Ta(), p = ea(c); + p.tag = 1, p.payload = a, r != null && (p.callback = r), a = Br(n, p, c), a !== null && (ya(a, n, c), ul(a, n, c)); }, enqueueForceUpdate: function(n, a) { n = n._reactInternals; - var r = Ta(), l = ea(r); - l.tag = 2, a != null && (l.callback = a), a = Zr(n, l, r), a !== null && (ya(a, n, r), dl(a, n, r)); + var r = Ta(), c = ea(r); + c.tag = 2, a != null && (c.callback = a), a = Br(n, c, r), a !== null && (ya(a, n, r), ul(a, n, r)); } }; - function Nc(n, a, r, l, m, f, E) { - return n = n.stateNode, typeof n.shouldComponentUpdate == "function" ? n.shouldComponentUpdate(l, f, E) : a.prototype && a.prototype.isPureReactComponent ? !ls(r, l) || !ls(m, f) : !0; + function Vc(n, a, r, c, p, f, E) { + return n = n.stateNode, typeof n.shouldComponentUpdate == "function" ? n.shouldComponentUpdate(c, f, E) : a.prototype && a.prototype.isPureReactComponent ? !ls(r, c) || !ls(p, f) : !0; } - function Rl(n, a, r, l) { - n = a.state, typeof a.componentWillReceiveProps == "function" && a.componentWillReceiveProps(r, l), typeof a.UNSAFE_componentWillReceiveProps == "function" && a.UNSAFE_componentWillReceiveProps(r, l), a.state !== n && l1.enqueueReplaceState(a, a.state, null); + function El(n, a, r, c) { + n = a.state, typeof a.componentWillReceiveProps == "function" && a.componentWillReceiveProps(r, c), typeof a.UNSAFE_componentWillReceiveProps == "function" && a.UNSAFE_componentWillReceiveProps(r, c), a.state !== n && d1.enqueueReplaceState(a, a.state, null); } function Ts(n, a) { var r = a; if ("ref" in a) { r = {}; - for (var l in a) - l !== "ref" && (r[l] = a[l]); + for (var c in a) + c !== "ref" && (r[c] = a[c]); } if (n = n.defaultProps) { r === a && (r = b({}, r)); - for (var m in n) - r[m] === void 0 && (r[m] = n[m]); + for (var p in n) + r[p] === void 0 && (r[p] = n[p]); } return r; } - var i0 = typeof reportError == "function" ? reportError : function(n) { + var r0 = typeof reportError == "function" ? reportError : function(n) { if (typeof window == "object" && typeof window.ErrorEvent == "function") { var a = new window.ErrorEvent("error", { bubbles: !0, @@ -10193,352 +10350,352 @@ Error generating stack: ` + r.message + ` } console.error(n); }; - function bc(n) { - i0(n); + function Cc(n) { + r0(n); } - function Gm(n) { + function Ym(n) { console.error(n); } - function a0(n) { - i0(n); + function o0(n) { + r0(n); } - function r0(n, a) { + function s0(n, a) { try { var r = n.onUncaughtError; r(a.value, { componentStack: a.stack }); - } catch (l) { + } catch (c) { setTimeout(function() { - throw l; + throw c; }); } } - function Ym(n, a, r) { + function Xm(n, a, r) { try { - var l = n.onCaughtError; - l(r.value, { + var c = n.onCaughtError; + c(r.value, { componentStack: r.stack, errorBoundary: a.tag === 1 ? a.stateNode : null }); - } catch (m) { + } catch (p) { setTimeout(function() { - throw m; + throw p; }); } } - function Xm(n, a, r) { + function Km(n, a, r) { return r = ea(r), r.tag = 3, r.payload = { element: null }, r.callback = function() { - r0(n, a); + s0(n, a); }, r; } - function Km(n) { + function qm(n) { return n = ea(n), n.tag = 3, n; } - function ia(n, a, r, l) { - var m = r.type.getDerivedStateFromError; - if (typeof m == "function") { - var f = l.value; + function ia(n, a, r, c) { + var p = r.type.getDerivedStateFromError; + if (typeof p == "function") { + var f = c.value; n.payload = function() { - return m(f); + return p(f); }, n.callback = function() { - Ym(a, r, l); + Xm(a, r, c); }; } var E = r.stateNode; E !== null && typeof E.componentDidCatch == "function" && (n.callback = function() { - Ym(a, r, l), typeof m != "function" && (Vs === null ? Vs = /* @__PURE__ */ new Set([this]) : Vs.add(this)); - var _ = l.stack; - this.componentDidCatch(l.value, { + Xm(a, r, c), typeof p != "function" && (Vs === null ? Vs = /* @__PURE__ */ new Set([this]) : Vs.add(this)); + var _ = c.stack; + this.componentDidCatch(c.value, { componentStack: _ !== null ? _ : "" }); }); } - function C2(n, a, r, l, m) { - if (r.flags |= 32768, l !== null && typeof l == "object" && typeof l.then == "function") { - if (a = r.alternate, a !== null && fc( + function _2(n, a, r, c, p) { + if (r.flags |= 32768, c !== null && typeof c == "object" && typeof c.then == "function") { + if (a = r.alternate, a !== null && vc( a, r, - m, + p, !0 ), r = Ua.current, r !== null) { switch (r.tag) { case 13: - return _i === null ? Fl() : r.alternate === null && xn === 0 && (xn = 3), r.flags &= -257, r.flags |= 65536, r.lanes = m, l === Bu ? r.flags |= 16384 : (a = r.updateQueue, a === null ? r.updateQueue = /* @__PURE__ */ new Set([l]) : a.add(l), x1(n, l, m)), !1; + return _i === null ? _l() : r.alternate === null && xn === 0 && (xn = 3), r.flags &= -257, r.flags |= 65536, r.lanes = p, c === Au ? r.flags |= 16384 : (a = r.updateQueue, a === null ? r.updateQueue = /* @__PURE__ */ new Set([c]) : a.add(c), O1(n, c, p)), !1; case 22: - return r.flags |= 65536, l === Bu ? r.flags |= 16384 : (a = r.updateQueue, a === null ? (a = { + return r.flags |= 65536, c === Au ? r.flags |= 16384 : (a = r.updateQueue, a === null ? (a = { transitions: null, markerInstances: null, - retryQueue: /* @__PURE__ */ new Set([l]) - }, r.updateQueue = a) : (r = a.retryQueue, r === null ? a.retryQueue = /* @__PURE__ */ new Set([l]) : r.add(l)), x1(n, l, m)), !1; + retryQueue: /* @__PURE__ */ new Set([c]) + }, r.updateQueue = a) : (r = a.retryQueue, r === null ? a.retryQueue = /* @__PURE__ */ new Set([c]) : r.add(c)), O1(n, c, p)), !1; } - throw Error(p(435, r.tag)); + throw Error(m(435, r.tag)); } - return x1(n, l, m), Fl(), !1; + return O1(n, c, p), _l(), !1; } if (It) - return a = Ua.current, a !== null ? ((a.flags & 65536) === 0 && (a.flags |= 256), a.flags |= 65536, a.lanes = m, l !== sl && (n = Error(p(422), { cause: l }), pc(Sa(n, r)))) : (l !== sl && (a = Error(p(423), { - cause: l - }), pc( + return a = Ua.current, a !== null ? ((a.flags & 65536) === 0 && (a.flags |= 256), a.flags |= 65536, a.lanes = p, c !== ll && (n = Error(m(422), { cause: c }), gc(Sa(n, r)))) : (c !== ll && (a = Error(m(423), { + cause: c + }), gc( Sa(a, r) - )), n = n.current.alternate, n.flags |= 65536, m &= -m, n.lanes |= m, l = Sa(l, r), m = Xm( + )), n = n.current.alternate, n.flags |= 65536, p &= -p, n.lanes |= p, c = Sa(c, r), p = Km( n.stateNode, - l, - m - ), Fm(n, m), xn !== 4 && (xn = 2)), !1; - var f = Error(p(520), { cause: l }); - if (f = Sa(f, r), Qc === null ? Qc = [f] : Qc.push(f), xn !== 4 && (xn = 2), a === null) return !0; - l = Sa(l, r), r = a; + c, + p + ), _m(n, p), xn !== 4 && (xn = 2)), !1; + var f = Error(m(520), { cause: c }); + if (f = Sa(f, r), xc === null ? xc = [f] : xc.push(f), xn !== 4 && (xn = 2), a === null) return !0; + c = Sa(c, r), r = a; do { switch (r.tag) { case 3: - return r.flags |= 65536, n = m & -m, r.lanes |= n, n = Xm(r.stateNode, l, n), Fm(r, n), !1; + return r.flags |= 65536, n = p & -p, r.lanes |= n, n = Km(r.stateNode, c, n), _m(r, n), !1; case 1: if (a = r.type, f = r.stateNode, (r.flags & 128) === 0 && (typeof a.getDerivedStateFromError == "function" || f !== null && typeof f.componentDidCatch == "function" && (Vs === null || !Vs.has(f)))) - return r.flags |= 65536, m &= -m, r.lanes |= m, m = Km(m), ia( - m, + return r.flags |= 65536, p &= -p, r.lanes |= p, p = qm(p), ia( + p, n, r, - l - ), Fm(r, m), !1; + c + ), _m(r, p), !1; } r = r.return; } while (r !== null); return !1; } - var kn = Error(p(461)), Kn = !1; - function ri(n, a, r, l) { - a.child = n === null ? wr(a, null, r, l) : Sl( + var kn = Error(m(461)), Kn = !1; + function ri(n, a, r, c) { + a.child = n === null ? Jr(a, null, r, c) : Rl( a, n.child, r, - l + c ); } - function F2(n, a, r, l, m) { + function M2(n, a, r, c, p) { r = r.render; var f = a.ref; - if ("ref" in l) { + if ("ref" in c) { var E = {}; - for (var _ in l) - _ !== "ref" && (E[_] = l[_]); - } else E = l; - return fs(a), l = Wu( + for (var _ in c) + _ !== "ref" && (E[_] = c[_]); + } else E = c; + return fs(a), c = zu( n, a, r, E, f, - m - ), _ = Hu(), n !== null && !Kn ? (Uc(n, a, m), Lr(n, a, m)) : (It && _ && ol(a), a.flags |= 1, ri(n, a, l, m), a.child); + p + ), _ = ju(), n !== null && !Kn ? (yc(n, a, p), Wr(n, a, p)) : (It && _ && sl(a), a.flags |= 1, ri(n, a, c, p), a.child); } - function ko(n, a, r, l, m) { + function Do(n, a, r, c, p) { if (n === null) { var f = r.type; - return typeof f == "function" && !Dd(f) && f.defaultProps === void 0 && r.compare === null ? (a.tag = 15, a.type = f, El( + return typeof f == "function" && !Zd(f) && f.defaultProps === void 0 && r.compare === null ? (a.tag = 15, a.type = f, Ul( n, a, f, - l, - m + c, + p )) : (n = _e( r.type, null, - l, + c, a, a.mode, - m + p ), n.ref = a.ref, n.return = a, a.child = n); } - if (f = n.child, !S1(n, m)) { + if (f = n.child, !E1(n, p)) { var E = f.memoizedProps; - if (r = r.compare, r = r !== null ? r : ls, r(E, l) && n.ref === a.ref) - return Lr(n, a, m); + if (r = r.compare, r = r !== null ? r : ls, r(E, c) && n.ref === a.ref) + return Wr(n, a, p); } - return a.flags |= 1, n = sr(f, l), n.ref = a.ref, n.return = a, a.child = n; + return a.flags |= 1, n = lr(f, c), n.ref = a.ref, n.return = a, a.child = n; } - function El(n, a, r, l, m) { + function Ul(n, a, r, c, p) { if (n !== null) { var f = n.memoizedProps; - if (ls(f, l) && n.ref === a.ref) - if (Kn = !1, a.pendingProps = l = f, S1(n, m)) + if (ls(f, c) && n.ref === a.ref) + if (Kn = !1, a.pendingProps = c = f, E1(n, p)) (n.flags & 131072) !== 0 && (Kn = !0); else - return a.lanes = n.lanes, Lr(n, a, m); + return a.lanes = n.lanes, Wr(n, a, p); } - return d1( + return h1( n, a, r, - l, - m + c, + p ); } - function c1(n, a, r) { - var l = a.pendingProps, m = l.children, f = n !== null ? n.memoizedState : null; - if (l.mode === "hidden") { + function u1(n, a, r) { + var c = a.pendingProps, p = c.children, f = n !== null ? n.memoizedState : null; + if (c.mode === "hidden") { if ((a.flags & 128) !== 0) { - if (l = f !== null ? f.baseLanes | r : r, n !== null) { - for (m = a.child = n.child, f = 0; m !== null; ) - f = f | m.lanes | m.childLanes, m = m.sibling; - a.childLanes = f & ~l; + if (c = f !== null ? f.baseLanes | r : r, n !== null) { + for (p = a.child = n.child, f = 0; p !== null; ) + f = f | p.lanes | p.childLanes, p = p.sibling; + a.childLanes = f & ~c; } else a.childLanes = 0, a.child = null; - return Ul( + return Tl( n, a, - l, + c, r ); } if ((r & 536870912) !== 0) - a.memoizedState = { baseLanes: 0, cachePool: null }, n !== null && ll( + a.memoizedState = { baseLanes: 0, cachePool: null }, n !== null && cl( a, f !== null ? f.cachePool : null - ), f !== null ? ai(a, f) : Rc(), Ar(a); + ), f !== null ? ai(a, f) : Uc(), Lr(a); else - return a.lanes = a.childLanes = 536870912, Ul( + return a.lanes = a.childLanes = 536870912, Tl( n, a, f !== null ? f.baseLanes | r : r, r ); } else - f !== null ? (ll(a, f.cachePool), ai(a, f), Jr(), a.memoizedState = null) : (n !== null && ll(a, null), Rc(), Jr()); - return ri(n, a, m, r), a.child; + f !== null ? (cl(a, f.cachePool), ai(a, f), Ir(), a.memoizedState = null) : (n !== null && cl(a, null), Uc(), Ir()); + return ri(n, a, p, r), a.child; } - function Ul(n, a, r, l) { - var m = Jd(); - return m = m === null ? null : { parent: Yn._currentValue, pool: m }, a.memoizedState = { + function Tl(n, a, r, c) { + var p = Id(); + return p = p === null ? null : { parent: Yn._currentValue, pool: p }, a.memoizedState = { baseLanes: r, - cachePool: m - }, n !== null && ll(a, null), Rc(), Ar(a), n !== null && fc(n, a, l, !0), null; + cachePool: p + }, n !== null && cl(a, null), Uc(), Lr(a), n !== null && vc(n, a, c, !0), null; } - function o0(n, a) { + function l0(n, a) { var r = a.ref; if (r === null) n !== null && n.ref !== null && (a.flags |= 4194816); else { if (typeof r != "function" && typeof r != "object") - throw Error(p(284)); + throw Error(m(284)); (n === null || n.ref !== r) && (a.flags |= 4194816); } } - function d1(n, a, r, l, m) { - return fs(a), r = Wu( + function h1(n, a, r, c, p) { + return fs(a), r = zu( n, a, r, - l, + c, void 0, - m - ), l = Hu(), n !== null && !Kn ? (Uc(n, a, m), Lr(n, a, m)) : (It && l && ol(a), a.flags |= 1, ri(n, a, r, m), a.child); + p + ), c = ju(), n !== null && !Kn ? (yc(n, a, p), Wr(n, a, p)) : (It && c && sl(a), a.flags |= 1, ri(n, a, r, p), a.child); } - function qm(n, a, r, l, m, f) { - return fs(a), a.updateQueue = null, r = km( + function $m(n, a, r, c, p, f) { + return fs(a), a.updateQueue = null, r = Qm( a, - l, + c, r, - m - ), Rs(n), l = Hu(), n !== null && !Kn ? (Uc(n, a, f), Lr(n, a, f)) : (It && l && ol(a), a.flags |= 1, ri(n, a, r, f), a.child); + p + ), Rs(n), c = ju(), n !== null && !Kn ? (yc(n, a, f), Wr(n, a, f)) : (It && c && sl(a), a.flags |= 1, ri(n, a, r, f), a.child); } - function u1(n, a, r, l, m) { + function m1(n, a, r, c, p) { if (fs(a), a.stateNode === null) { - var f = cc, E = r.contextType; - typeof E == "object" && E !== null && (f = ii(E)), f = new r(l, f), a.memoizedState = f.state !== null && f.state !== void 0 ? f.state : null, f.updater = l1, a.stateNode = f, f._reactInternals = a, f = a.stateNode, f.props = l, f.state = a.memoizedState, f.refs = {}, Au(a), E = r.contextType, f.context = typeof E == "object" && E !== null ? ii(E) : cc, f.state = a.memoizedState, E = r.getDerivedStateFromProps, typeof E == "function" && (Us( + var f = uc, E = r.contextType; + typeof E == "object" && E !== null && (f = ii(E)), f = new r(c, f), a.memoizedState = f.state !== null && f.state !== void 0 ? f.state : null, f.updater = d1, a.stateNode = f, f._reactInternals = a, f = a.stateNode, f.props = c, f.state = a.memoizedState, f.refs = {}, Lu(a), E = r.contextType, f.context = typeof E == "object" && E !== null ? ii(E) : uc, f.state = a.memoizedState, E = r.getDerivedStateFromProps, typeof E == "function" && (Us( a, r, E, - l - ), f.state = a.memoizedState), typeof r.getDerivedStateFromProps == "function" || typeof f.getSnapshotBeforeUpdate == "function" || typeof f.UNSAFE_componentWillMount != "function" && typeof f.componentWillMount != "function" || (E = f.state, typeof f.componentWillMount == "function" && f.componentWillMount(), typeof f.UNSAFE_componentWillMount == "function" && f.UNSAFE_componentWillMount(), E !== f.state && l1.enqueueReplaceState(f, f.state, null), Co(a, l, f, m), Sc(), f.state = a.memoizedState), typeof f.componentDidMount == "function" && (a.flags |= 4194308), l = !0; + c + ), f.state = a.memoizedState), typeof r.getDerivedStateFromProps == "function" || typeof f.getSnapshotBeforeUpdate == "function" || typeof f.UNSAFE_componentWillMount != "function" && typeof f.componentWillMount != "function" || (E = f.state, typeof f.componentWillMount == "function" && f.componentWillMount(), typeof f.UNSAFE_componentWillMount == "function" && f.UNSAFE_componentWillMount(), E !== f.state && d1.enqueueReplaceState(f, f.state, null), _o(a, c, f, p), Ec(), f.state = a.memoizedState), typeof f.componentDidMount == "function" && (a.flags |= 4194308), c = !0; } else if (n === null) { f = a.stateNode; var _ = a.memoizedProps, O = Ts(r, _); f.props = O; var q = f.context, fe = r.contextType; - E = cc, typeof fe == "object" && fe !== null && (E = ii(fe)); - var Se = r.getDerivedStateFromProps; - fe = typeof Se == "function" || typeof f.getSnapshotBeforeUpdate == "function", _ = a.pendingProps !== _, fe || typeof f.UNSAFE_componentWillReceiveProps != "function" && typeof f.componentWillReceiveProps != "function" || (_ || q !== E) && Rl( + E = uc, typeof fe == "object" && fe !== null && (E = ii(fe)); + var Re = r.getDerivedStateFromProps; + fe = typeof Re == "function" || typeof f.getSnapshotBeforeUpdate == "function", _ = a.pendingProps !== _, fe || typeof f.UNSAFE_componentWillReceiveProps != "function" && typeof f.componentWillReceiveProps != "function" || (_ || q !== E) && El( a, f, - l, + c, E - ), xr = !1; + ), Or = !1; var te = a.memoizedState; - f.state = te, Co(a, l, f, m), Sc(), q = a.memoizedState, _ || te !== q || xr ? (typeof Se == "function" && (Us( + f.state = te, _o(a, c, f, p), Ec(), q = a.memoizedState, _ || te !== q || Or ? (typeof Re == "function" && (Us( a, r, - Se, - l - ), q = a.memoizedState), (O = xr || Nc( + Re, + c + ), q = a.memoizedState), (O = Or || Vc( a, r, O, - l, + c, te, q, E - )) ? (fe || typeof f.UNSAFE_componentWillMount != "function" && typeof f.componentWillMount != "function" || (typeof f.componentWillMount == "function" && f.componentWillMount(), typeof f.UNSAFE_componentWillMount == "function" && f.UNSAFE_componentWillMount()), typeof f.componentDidMount == "function" && (a.flags |= 4194308)) : (typeof f.componentDidMount == "function" && (a.flags |= 4194308), a.memoizedProps = l, a.memoizedState = q), f.props = l, f.state = q, f.context = E, l = O) : (typeof f.componentDidMount == "function" && (a.flags |= 4194308), l = !1); + )) ? (fe || typeof f.UNSAFE_componentWillMount != "function" && typeof f.componentWillMount != "function" || (typeof f.componentWillMount == "function" && f.componentWillMount(), typeof f.UNSAFE_componentWillMount == "function" && f.UNSAFE_componentWillMount()), typeof f.componentDidMount == "function" && (a.flags |= 4194308)) : (typeof f.componentDidMount == "function" && (a.flags |= 4194308), a.memoizedProps = c, a.memoizedState = q), f.props = c, f.state = q, f.context = E, c = O) : (typeof f.componentDidMount == "function" && (a.flags |= 4194308), c = !1); } else { - f = a.stateNode, Ju(n, a), E = a.memoizedProps, fe = Ts(r, E), f.props = fe, Se = a.pendingProps, te = f.context, q = r.contextType, O = cc, typeof q == "object" && q !== null && (O = ii(q)), _ = r.getDerivedStateFromProps, (q = typeof _ == "function" || typeof f.getSnapshotBeforeUpdate == "function") || typeof f.UNSAFE_componentWillReceiveProps != "function" && typeof f.componentWillReceiveProps != "function" || (E !== Se || te !== O) && Rl( + f = a.stateNode, Iu(n, a), E = a.memoizedProps, fe = Ts(r, E), f.props = fe, Re = a.pendingProps, te = f.context, q = r.contextType, O = uc, typeof q == "object" && q !== null && (O = ii(q)), _ = r.getDerivedStateFromProps, (q = typeof _ == "function" || typeof f.getSnapshotBeforeUpdate == "function") || typeof f.UNSAFE_componentWillReceiveProps != "function" && typeof f.componentWillReceiveProps != "function" || (E !== Re || te !== O) && El( a, f, - l, + c, O - ), xr = !1, te = a.memoizedState, f.state = te, Co(a, l, f, m), Sc(); - var ie = a.memoizedState; - E !== Se || te !== ie || xr || n !== null && n.dependencies !== null && Bd(n.dependencies) ? (typeof _ == "function" && (Us( + ), Or = !1, te = a.memoizedState, f.state = te, _o(a, c, f, p), Ec(); + var ae = a.memoizedState; + E !== Re || te !== ae || Or || n !== null && n.dependencies !== null && Ad(n.dependencies) ? (typeof _ == "function" && (Us( a, r, _, - l - ), ie = a.memoizedState), (fe = xr || Nc( + c + ), ae = a.memoizedState), (fe = Or || Vc( a, r, fe, - l, + c, te, - ie, + ae, O - ) || n !== null && n.dependencies !== null && Bd(n.dependencies)) ? (q || typeof f.UNSAFE_componentWillUpdate != "function" && typeof f.componentWillUpdate != "function" || (typeof f.componentWillUpdate == "function" && f.componentWillUpdate(l, ie, O), typeof f.UNSAFE_componentWillUpdate == "function" && f.UNSAFE_componentWillUpdate( - l, - ie, + ) || n !== null && n.dependencies !== null && Ad(n.dependencies)) ? (q || typeof f.UNSAFE_componentWillUpdate != "function" && typeof f.componentWillUpdate != "function" || (typeof f.componentWillUpdate == "function" && f.componentWillUpdate(c, ae, O), typeof f.UNSAFE_componentWillUpdate == "function" && f.UNSAFE_componentWillUpdate( + c, + ae, O - )), typeof f.componentDidUpdate == "function" && (a.flags |= 4), typeof f.getSnapshotBeforeUpdate == "function" && (a.flags |= 1024)) : (typeof f.componentDidUpdate != "function" || E === n.memoizedProps && te === n.memoizedState || (a.flags |= 4), typeof f.getSnapshotBeforeUpdate != "function" || E === n.memoizedProps && te === n.memoizedState || (a.flags |= 1024), a.memoizedProps = l, a.memoizedState = ie), f.props = l, f.state = ie, f.context = O, l = fe) : (typeof f.componentDidUpdate != "function" || E === n.memoizedProps && te === n.memoizedState || (a.flags |= 4), typeof f.getSnapshotBeforeUpdate != "function" || E === n.memoizedProps && te === n.memoizedState || (a.flags |= 1024), l = !1); + )), typeof f.componentDidUpdate == "function" && (a.flags |= 4), typeof f.getSnapshotBeforeUpdate == "function" && (a.flags |= 1024)) : (typeof f.componentDidUpdate != "function" || E === n.memoizedProps && te === n.memoizedState || (a.flags |= 4), typeof f.getSnapshotBeforeUpdate != "function" || E === n.memoizedProps && te === n.memoizedState || (a.flags |= 1024), a.memoizedProps = c, a.memoizedState = ae), f.props = c, f.state = ae, f.context = O, c = fe) : (typeof f.componentDidUpdate != "function" || E === n.memoizedProps && te === n.memoizedState || (a.flags |= 4), typeof f.getSnapshotBeforeUpdate != "function" || E === n.memoizedProps && te === n.memoizedState || (a.flags |= 1024), c = !1); } - return f = l, o0(n, a), l = (a.flags & 128) !== 0, f || l ? (f = a.stateNode, r = l && typeof r.getDerivedStateFromError != "function" ? null : f.render(), a.flags |= 1, n !== null && l ? (a.child = Sl( + return f = c, l0(n, a), c = (a.flags & 128) !== 0, f || c ? (f = a.stateNode, r = c && typeof r.getDerivedStateFromError != "function" ? null : f.render(), a.flags |= 1, n !== null && c ? (a.child = Rl( a, n.child, null, - m - ), a.child = Sl( + p + ), a.child = Rl( a, null, r, - m - )) : ri(n, a, r, m), a.memoizedState = f.state, n = a.child) : n = Lr( + p + )) : ri(n, a, r, p), a.memoizedState = f.state, n = a.child) : n = Wr( n, a, - m + p ), n; } - function h1(n, a, r, l) { - return mc(), a.flags |= 256, ri(n, a, r, l), a.child; + function p1(n, a, r, c) { + return fc(), a.flags |= 256, ri(n, a, r, c), a.child; } - var m1 = { + var f1 = { dehydrated: null, treeContext: null, retryLane: 0, hydrationErrors: null }; - function $m(n) { - return { baseLanes: n, cachePool: Zu() }; + function ep(n) { + return { baseLanes: n, cachePool: Bu() }; } - function ep(n, a, r) { + function tp(n, a, r) { return n = n !== null ? n.childLanes & ~r : 0, a && (n |= ja), n; } - function tp(n, a, r) { - var l = a.pendingProps, m = !1, f = (a.flags & 128) !== 0, E; - if ((E = f) || (E = n !== null && n.memoizedState === null ? !1 : (rn.current & 2) !== 0), E && (m = !0, a.flags &= -129), E = (a.flags & 32) !== 0, a.flags &= -33, n === null) { + function np(n, a, r) { + var c = a.pendingProps, p = !1, f = (a.flags & 128) !== 0, E; + if ((E = f) || (E = n !== null && n.memoizedState === null ? !1 : (rn.current & 2) !== 0), E && (p = !0, a.flags &= -129), E = (a.flags & 32) !== 0, a.flags &= -33, n === null) { if (It) { - if (m ? Mo(a) : Jr(), It) { + if (p ? Qo(a) : Ir(), It) { var _ = Wt, O; if (O = _) { e: { @@ -10547,7 +10704,7 @@ Error generating stack: ` + r.message + ` _ = null; break e; } - if (O = pr( + if (O = fr( O.nextSibling ), O === null) { _ = null; @@ -10558,7 +10715,7 @@ Error generating stack: ` + r.message + ` } _ !== null ? (a.memoizedState = { dehydrated: _, - treeContext: yo !== null ? { id: lr, overflow: _n } : null, + treeContext: bo !== null ? { id: cr, overflow: _n } : null, retryLane: 536870912, hydrationErrors: null }, O = qi( @@ -10568,101 +10725,101 @@ Error generating stack: ` + r.message + ` 0 ), O.stateNode = _, O.return = a, a.child = O, Ln = a, Wt = null, O = !0) : O = !1; } - O || No(a); + O || Vo(a); } if (_ = a.memoizedState, _ !== null && (_ = _.dehydrated, _ !== null)) - return b0(_) ? a.lanes = 32 : a.lanes = 536870912, null; - hr(a); + return C0(_) ? a.lanes = 32 : a.lanes = 536870912, null; + mr(a); } - return _ = l.children, l = l.fallback, m ? (Jr(), m = a.mode, _ = f1( + return _ = c.children, c = c.fallback, p ? (Ir(), p = a.mode, _ = v1( { mode: "hidden", children: _ }, - m - ), l = Ba( - l, - m, + p + ), c = Ba( + c, + p, r, null - ), _.return = a, l.return = a, _.sibling = l, a.child = _, m = a.child, m.memoizedState = $m(r), m.childLanes = ep( + ), _.return = a, c.return = a, _.sibling = c, a.child = _, p = a.child, p.memoizedState = ep(r), p.childLanes = tp( n, E, r - ), a.memoizedState = m1, l) : (Mo(a), p1(a, _)); + ), a.memoizedState = f1, c) : (Qo(a), g1(a, _)); } if (O = n.memoizedState, O !== null && (_ = O.dehydrated, _ !== null)) { if (f) - a.flags & 256 ? (Mo(a), a.flags &= -257, a = ys( + a.flags & 256 ? (Qo(a), a.flags &= -257, a = ys( n, a, r - )) : a.memoizedState !== null ? (Jr(), a.child = n.child, a.flags |= 128, a = null) : (Jr(), m = l.fallback, _ = a.mode, l = f1( - { mode: "visible", children: l.children }, + )) : a.memoizedState !== null ? (Ir(), a.child = n.child, a.flags |= 128, a = null) : (Ir(), p = c.fallback, _ = a.mode, c = v1( + { mode: "visible", children: c.children }, _ - ), m = Ba( - m, + ), p = Ba( + p, _, r, null - ), m.flags |= 2, l.return = a, m.return = a, l.sibling = m, a.child = l, Sl( + ), p.flags |= 2, c.return = a, p.return = a, c.sibling = p, a.child = c, Rl( a, n.child, null, r - ), l = a.child, l.memoizedState = $m(r), l.childLanes = ep( + ), c = a.child, c.memoizedState = ep(r), c.childLanes = tp( n, E, r - ), a.memoizedState = m1, a = m); - else if (Mo(a), b0(_)) { + ), a.memoizedState = f1, a = p); + else if (Qo(a), C0(_)) { if (E = _.nextSibling && _.nextSibling.dataset, E) var q = E.dgst; - E = q, l = Error(p(419)), l.stack = "", l.digest = E, pc({ value: l, source: null, stack: null }), a = ys( + E = q, c = Error(m(419)), c.stack = "", c.digest = E, gc({ value: c, source: null, stack: null }), a = ys( n, a, r ); - } else if (Kn || fc(n, a, r, !1), E = (r & n.childLanes) !== 0, Kn || E) { - if (E = ln, E !== null && (l = r & -r, l = (l & 42) !== 0 ? 1 : Sn(l), l = (l & (E.suspendedLanes | r)) !== 0 ? 0 : l, l !== 0 && l !== O.retryLane)) - throw O.retryLane = l, _r(n, l), ya(E, n, l), kn; - _.data === "$?" || Fl(), a = ys( + } else if (Kn || vc(n, a, r, !1), E = (r & n.childLanes) !== 0, Kn || E) { + if (E = ln, E !== null && (c = r & -r, c = (c & 42) !== 0 ? 1 : Rn(c), c = (c & (E.suspendedLanes | r)) !== 0 ? 0 : c, c !== 0 && c !== O.retryLane)) + throw O.retryLane = c, kr(n, c), ya(E, n, c), kn; + _.data === "$?" || _l(), a = ys( n, a, r ); } else - _.data === "$?" ? (a.flags |= 192, a.child = n.child, a = null) : (n = O.treeContext, Wt = pr( + _.data === "$?" ? (a.flags |= 192, a.child = n.child, a = null) : (n = O.treeContext, Wt = fr( _.nextSibling - ), Ln = a, It = !0, Aa = null, Ja = !1, n !== null && (wa[$i++] = lr, wa[$i++] = _n, wa[$i++] = yo, lr = n.id, _n = n.overflow, yo = a), a = p1( + ), Ln = a, It = !0, Aa = null, Ja = !1, n !== null && (wa[$i++] = cr, wa[$i++] = _n, wa[$i++] = bo, cr = n.id, _n = n.overflow, bo = a), a = g1( a, - l.children + c.children ), a.flags |= 4096); return a; } - return m ? (Jr(), m = l.fallback, _ = a.mode, O = n.child, q = O.sibling, l = sr(O, { + return p ? (Ir(), p = c.fallback, _ = a.mode, O = n.child, q = O.sibling, c = lr(O, { mode: "hidden", - children: l.children - }), l.subtreeFlags = O.subtreeFlags & 65011712, q !== null ? m = sr(q, m) : (m = Ba( - m, + children: c.children + }), c.subtreeFlags = O.subtreeFlags & 65011712, q !== null ? p = lr(q, p) : (p = Ba( + p, _, r, null - ), m.flags |= 2), m.return = a, l.return = a, l.sibling = m, a.child = l, l = m, m = a.child, _ = n.child.memoizedState, _ === null ? _ = $m(r) : (O = _.cachePool, O !== null ? (q = Yn._currentValue, O = O.parent !== q ? { parent: q, pool: q } : O) : O = Zu(), _ = { + ), p.flags |= 2), p.return = a, c.return = a, c.sibling = p, a.child = c, c = p, p = a.child, _ = n.child.memoizedState, _ === null ? _ = ep(r) : (O = _.cachePool, O !== null ? (q = Yn._currentValue, O = O.parent !== q ? { parent: q, pool: q } : O) : O = Bu(), _ = { baseLanes: _.baseLanes | r, cachePool: O - }), m.memoizedState = _, m.childLanes = ep( + }), p.memoizedState = _, p.childLanes = tp( n, E, r - ), a.memoizedState = m1, l) : (Mo(a), r = n.child, n = r.sibling, r = sr(r, { + ), a.memoizedState = f1, c) : (Qo(a), r = n.child, n = r.sibling, r = lr(r, { mode: "visible", - children: l.children + children: c.children }), r.return = a, r.sibling = null, n !== null && (E = a.deletions, E === null ? (a.deletions = [n], a.flags |= 16) : E.push(n)), a.child = r, a.memoizedState = null, r); } - function p1(n, a) { - return a = f1( + function g1(n, a) { + return a = v1( { mode: "visible", children: a }, n.mode ), a.return = n, n.child = a; } - function f1(n, a) { + function v1(n, a) { return n = qi(22, n, null, a), n.lanes = 0, n.stateNode = { _visibility: 1, _pendingMarkers: null, @@ -10671,38 +10828,38 @@ Error generating stack: ` + r.message + ` }, n; } function ys(n, a, r) { - return Sl(a, n.child, null, r), n = p1( + return Rl(a, n.child, null, r), n = g1( a, a.pendingProps.children ), n.flags |= 2, a.memoizedState = null, n; } - function s0(n, a, r) { + function c0(n, a, r) { n.lanes |= a; - var l = n.alternate; - l !== null && (l.lanes |= a), Mu(n.return, a, r); + var c = n.alternate; + c !== null && (c.lanes |= a), Qu(n.return, a, r); } - function g1(n, a, r, l, m) { + function S1(n, a, r, c, p) { var f = n.memoizedState; f === null ? n.memoizedState = { isBackwards: a, rendering: null, renderingStartTime: 0, - last: l, + last: c, tail: r, - tailMode: m - } : (f.isBackwards = a, f.rendering = null, f.renderingStartTime = 0, f.last = l, f.tail = r, f.tailMode = m); + tailMode: p + } : (f.isBackwards = a, f.rendering = null, f.renderingStartTime = 0, f.last = c, f.tail = r, f.tailMode = p); } - function v1(n, a, r) { - var l = a.pendingProps, m = l.revealOrder, f = l.tail; - if (ri(n, a, l.children, r), l = rn.current, (l & 2) !== 0) - l = l & 1 | 2, a.flags |= 128; + function R1(n, a, r) { + var c = a.pendingProps, p = c.revealOrder, f = c.tail; + if (ri(n, a, c.children, r), c = rn.current, (c & 2) !== 0) + c = c & 1 | 2, a.flags |= 128; else { if (n !== null && (n.flags & 128) !== 0) e: for (n = a.child; n !== null; ) { if (n.tag === 13) - n.memoizedState !== null && s0(n, r, a); + n.memoizedState !== null && c0(n, r, a); else if (n.tag === 19) - s0(n, r, a); + c0(n, r, a); else if (n.child !== null) { n.child.return = n, n = n.child; continue; @@ -10715,29 +10872,29 @@ Error generating stack: ` + r.message + ` } n.sibling.return = n.return, n = n.sibling; } - l &= 1; + c &= 1; } - switch (pe(rn, l), m) { + switch (pe(rn, c), p) { case "forwards": - for (r = a.child, m = null; r !== null; ) - n = r.alternate, n !== null && n0(n) === null && (m = r), r = r.sibling; - r = m, r === null ? (m = a.child, a.child = null) : (m = r.sibling, r.sibling = null), g1( + for (r = a.child, p = null; r !== null; ) + n = r.alternate, n !== null && a0(n) === null && (p = r), r = r.sibling; + r = p, r === null ? (p = a.child, a.child = null) : (p = r.sibling, r.sibling = null), S1( a, !1, - m, + p, r, f ); break; case "backwards": - for (r = null, m = a.child, a.child = null; m !== null; ) { - if (n = m.alternate, n !== null && n0(n) === null) { - a.child = m; + for (r = null, p = a.child, a.child = null; p !== null; ) { + if (n = p.alternate, n !== null && a0(n) === null) { + a.child = p; break; } - n = m.sibling, m.sibling = r, r = m, m = n; + n = p.sibling, p.sibling = r, r = p, p = n; } - g1( + S1( a, !0, r, @@ -10746,17 +10903,17 @@ Error generating stack: ` + r.message + ` ); break; case "together": - g1(a, !1, null, null, void 0); + S1(a, !1, null, null, void 0); break; default: a.memoizedState = null; } return a.child; } - function Lr(n, a, r) { - if (n !== null && (a.dependencies = n.dependencies), xo |= a.lanes, (r & a.childLanes) === 0) + function Wr(n, a, r) { + if (n !== null && (a.dependencies = n.dependencies), Oo |= a.lanes, (r & a.childLanes) === 0) if (n !== null) { - if (fc( + if (vc( n, a, r, @@ -10765,79 +10922,79 @@ Error generating stack: ` + r.message + ` return null; } else return null; if (n !== null && a.child !== n.child) - throw Error(p(153)); + throw Error(m(153)); if (a.child !== null) { - for (n = a.child, r = sr(n, n.pendingProps), a.child = r, r.return = a; n.sibling !== null; ) - n = n.sibling, r = r.sibling = sr(n, n.pendingProps), r.return = a; + for (n = a.child, r = lr(n, n.pendingProps), a.child = r, r.return = a; n.sibling !== null; ) + n = n.sibling, r = r.sibling = lr(n, n.pendingProps), r.return = a; r.sibling = null; } return a.child; } - function S1(n, a) { - return (n.lanes & a) !== 0 ? !0 : (n = n.dependencies, !!(n !== null && Bd(n))); + function E1(n, a) { + return (n.lanes & a) !== 0 ? !0 : (n = n.dependencies, !!(n !== null && Ad(n))); } - function _2(n, a, r) { + function k2(n, a, r) { switch (a.tag) { case 3: - Ge(a, a.stateNode.containerInfo), Vo(a, Yn, n.memoizedState.cache), mc(); + Ye(a, a.stateNode.containerInfo), Fo(a, Yn, n.memoizedState.cache), fc(); break; case 27: case 5: wn(a); break; case 4: - Ge(a, a.stateNode.containerInfo); + Ye(a, a.stateNode.containerInfo); break; case 10: - Vo( + Fo( a, a.type, a.memoizedProps.value ); break; case 13: - var l = a.memoizedState; - if (l !== null) - return l.dehydrated !== null ? (Mo(a), a.flags |= 128, null) : (r & a.child.childLanes) !== 0 ? tp(n, a, r) : (Mo(a), n = Lr( + var c = a.memoizedState; + if (c !== null) + return c.dehydrated !== null ? (Qo(a), a.flags |= 128, null) : (r & a.child.childLanes) !== 0 ? np(n, a, r) : (Qo(a), n = Wr( n, a, r ), n !== null ? n.sibling : null); - Mo(a); + Qo(a); break; case 19: - var m = (n.flags & 128) !== 0; - if (l = (r & a.childLanes) !== 0, l || (fc( + var p = (n.flags & 128) !== 0; + if (c = (r & a.childLanes) !== 0, c || (vc( n, a, r, !1 - ), l = (r & a.childLanes) !== 0), m) { - if (l) - return v1( + ), c = (r & a.childLanes) !== 0), p) { + if (c) + return R1( n, a, r ); a.flags |= 128; } - if (m = a.memoizedState, m !== null && (m.rendering = null, m.tail = null, m.lastEffect = null), pe(rn, rn.current), l) break; + if (p = a.memoizedState, p !== null && (p.rendering = null, p.tail = null, p.lastEffect = null), pe(rn, rn.current), c) break; return null; case 22: case 23: - return a.lanes = 0, c1(n, a, r); + return a.lanes = 0, u1(n, a, r); case 24: - Vo(a, Yn, n.memoizedState.cache); + Fo(a, Yn, n.memoizedState.cache); } - return Lr(n, a, r); + return Wr(n, a, r); } - function M2(n, a, r) { + function Q2(n, a, r) { if (n !== null) if (n.memoizedProps !== a.pendingProps) Kn = !0; else { - if (!S1(n, r) && (a.flags & 128) === 0) - return Kn = !1, _2( + if (!E1(n, r) && (a.flags & 128) === 0) + return Kn = !1, k2( n, a, r @@ -10845,54 +11002,54 @@ Error generating stack: ` + r.message + ` Kn = (n.flags & 131072) !== 0; } else - Kn = !1, It && (a.flags & 1048576) !== 0 && _u(a, uc, a.index); + Kn = !1, It && (a.flags & 1048576) !== 0 && ku(a, mc, a.index); switch (a.lanes = 0, a.tag) { case 16: e: { n = a.pendingProps; - var l = a.elementType, m = l._init; - if (l = m(l._payload), a.type = l, typeof l == "function") - Dd(l) ? (n = Ts(l, n), a.tag = 1, a = u1( + var c = a.elementType, p = c._init; + if (c = p(c._payload), a.type = c, typeof c == "function") + Zd(c) ? (n = Ts(c, n), a.tag = 1, a = m1( null, a, - l, + c, n, r - )) : (a.tag = 0, a = d1( + )) : (a.tag = 0, a = h1( null, a, - l, + c, n, r )); else { - if (l != null) { - if (m = l.$$typeof, m === Le) { - a.tag = 11, a = F2( + if (c != null) { + if (p = c.$$typeof, p === we) { + a.tag = 11, a = M2( null, a, - l, + c, n, r ); break e; - } else if (m === Te) { - a.tag = 14, a = ko( + } else if (p === Te) { + a.tag = 14, a = Do( null, a, - l, + c, n, r ); break e; } } - throw a = Ze(l) || l, Error(p(306, a, "")); + throw a = xe(c) || c, Error(m(306, a, "")); } } return a; case 0: - return d1( + return h1( n, a, a.type, @@ -10900,52 +11057,52 @@ Error generating stack: ` + r.message + ` r ); case 1: - return l = a.type, m = Ts( - l, + return c = a.type, p = Ts( + c, a.pendingProps - ), u1( + ), m1( n, a, - l, - m, + c, + p, r ); case 3: e: { - if (Ge( + if (Ye( a, a.stateNode.containerInfo - ), n === null) throw Error(p(387)); - l = a.pendingProps; + ), n === null) throw Error(m(387)); + c = a.pendingProps; var f = a.memoizedState; - m = f.element, Ju(n, a), Co(a, l, null, r); + p = f.element, Iu(n, a), _o(a, c, null, r); var E = a.memoizedState; - if (l = E.cache, Vo(a, Yn, l), l !== f.cache && ym( + if (c = E.cache, Fo(a, Yn, c), c !== f.cache && Nm( a, [Yn], r, !0 - ), Sc(), l = E.element, f.isDehydrated) + ), Ec(), c = E.element, f.isDehydrated) if (f = { - element: l, + element: c, isDehydrated: !1, cache: E.cache }, a.updateQueue.baseState = f, a.memoizedState = f, a.flags & 256) { - a = h1( + a = p1( n, a, - l, + c, r ); break e; - } else if (l !== m) { - m = Sa( - Error(p(424)), + } else if (c !== p) { + p = Sa( + Error(m(424)), a - ), pc(m), a = h1( + ), gc(p), a = p1( n, a, - l, + c, r ); break e; @@ -10957,17 +11114,17 @@ Error generating stack: ` + r.message + ` default: n = n.nodeName === "HTML" ? n.ownerDocument.body : n; } - for (Wt = pr(n.firstChild), Ln = a, It = !0, Aa = null, Ja = !0, r = wr( + for (Wt = fr(n.firstChild), Ln = a, It = !0, Aa = null, Ja = !0, r = Jr( a, null, - l, + c, r ), a.child = r; r; ) r.flags = r.flags & -3 | 4096, r = r.sibling; } else { - if (mc(), l === m) { - a = Lr( + if (fc(), c === p) { + a = Wr( n, a, r @@ -10977,7 +11134,7 @@ Error generating stack: ` + r.message + ` ri( n, a, - l, + c, r ); } @@ -10985,73 +11142,73 @@ Error generating stack: ` + r.message + ` } return a; case 26: - return o0(n, a), n === null ? (r = j2( + return l0(n, a), n === null ? (r = G2( a.type, null, a.pendingProps, null - )) ? a.memoizedState = r : It || (r = a.type, n = a.pendingProps, l = Ga( + )) ? a.memoizedState = r : It || (r = a.type, n = a.pendingProps, c = Ga( Oe.current - ).createElement(r), l[nn] = a, l[Gn] = n, ht(l, r, n), un(l), a.stateNode = l) : a.memoizedState = j2( + ).createElement(r), c[nn] = a, c[Gn] = n, mt(c, r, n), un(c), a.stateNode = c) : a.memoizedState = G2( a.type, n.memoizedProps, a.pendingProps, n.memoizedState ), null; case 27: - return wn(a), n === null && It && (l = a.stateNode = Je( + return wn(a), n === null && It && (c = a.stateNode = Ie( a.type, a.pendingProps, Oe.current - ), Ln = a, Ja = !0, m = Wt, Qs(a.type) ? (Ds = m, Wt = pr( - l.firstChild - )) : Wt = m), ri( + ), Ln = a, Ja = !0, p = Wt, Qs(a.type) ? (Ds = p, Wt = fr( + c.firstChild + )) : Wt = p), ri( n, a, a.pendingProps.children, r - ), o0(n, a), n === null && (a.flags |= 4194304), a.child; + ), l0(n, a), n === null && (a.flags |= 4194304), a.child; case 5: - return n === null && It && ((m = l = Wt) && (l = Hc( - l, + return n === null && It && ((p = c = Wt) && (c = jc( + c, a.type, a.pendingProps, Ja - ), l !== null ? (a.stateNode = l, Ln = a, Wt = pr( - l.firstChild - ), Ja = !1, m = !0) : m = !1), m || No(a)), wn(a), m = a.type, f = a.pendingProps, E = n !== null ? n.memoizedProps : null, l = f.children, Xr(m, f) ? l = null : E !== null && Xr(m, E) && (a.flags |= 32), a.memoizedState !== null && (m = Wu( + ), c !== null ? (a.stateNode = c, Ln = a, Wt = fr( + c.firstChild + ), Ja = !1, p = !0) : p = !1), p || Vo(a)), wn(a), p = a.type, f = a.pendingProps, E = n !== null ? n.memoizedProps : null, c = f.children, qr(p, f) ? c = null : E !== null && qr(p, E) && (a.flags |= 32), a.memoizedState !== null && (p = zu( n, a, - S2, + E2, null, null, r - ), ca._currentValue = m), o0(n, a), ri(n, a, l, r), a.child; + ), ca._currentValue = p), l0(n, a), ri(n, a, c, r), a.child; case 6: - return n === null && It && ((n = r = Wt) && (r = Dv( + return n === null && It && ((n = r = Wt) && (r = Zv( r, a.pendingProps, Ja - ), r !== null ? (a.stateNode = r, Ln = a, Wt = null, n = !0) : n = !1), n || No(a)), null; + ), r !== null ? (a.stateNode = r, Ln = a, Wt = null, n = !0) : n = !1), n || Vo(a)), null; case 13: - return tp(n, a, r); + return np(n, a, r); case 4: - return Ge( + return Ye( a, a.stateNode.containerInfo - ), l = a.pendingProps, n === null ? a.child = Sl( + ), c = a.pendingProps, n === null ? a.child = Rl( a, null, - l, + c, r ) : ri( n, a, - l, + c, r ), a.child; case 11: - return F2( + return M2( n, a, a.type, @@ -11080,16 +11237,16 @@ Error generating stack: ` + r.message + ` r ), a.child; case 10: - return l = a.pendingProps, Vo(a, a.type, l.value), ri( + return c = a.pendingProps, Fo(a, a.type, c.value), ri( n, a, - l.children, + c.children, r ), a.child; case 9: - return m = a.type._context, l = a.pendingProps.children, fs(a), m = ii(m), l = l(m), a.flags |= 1, ri(n, a, l, r), a.child; + return p = a.type._context, c = a.pendingProps.children, fs(a), p = ii(p), c = c(p), a.flags |= 1, ri(n, a, c, r), a.child; case 14: - return ko( + return Do( n, a, a.type, @@ -11097,7 +11254,7 @@ Error generating stack: ` + r.message + ` r ); case 15: - return El( + return Ul( n, a, a.type, @@ -11105,22 +11262,22 @@ Error generating stack: ` + r.message + ` r ); case 19: - return v1(n, a, r); + return R1(n, a, r); case 31: - return l = a.pendingProps, r = a.mode, l = { - mode: l.mode, - children: l.children - }, n === null ? (r = f1( - l, + return c = a.pendingProps, r = a.mode, c = { + mode: c.mode, + children: c.children + }, n === null ? (r = v1( + c, r - ), r.ref = a.ref, a.child = r, r.return = a, a = r) : (r = sr(n.child, l), r.ref = a.ref, a.child = r, r.return = a, a = r), a; + ), r.ref = a.ref, a.child = r, r.return = a, a = r) : (r = lr(n.child, c), r.ref = a.ref, a.child = r, r.return = a, a = r), a; case 22: - return c1(n, a, r); + return u1(n, a, r); case 24: - return fs(a), l = ii(Yn), n === null ? (m = Jd(), m === null && (m = ln, f = vc(), m.pooledCache = f, f.refCount++, f !== null && (m.pooledCacheLanes |= r), m = f), a.memoizedState = { - parent: l, - cache: m - }, Au(a), Vo(a, Yn, m)) : ((n.lanes & r) !== 0 && (Ju(n, a), Co(a, null, null, r), Sc()), m = n.memoizedState, f = a.memoizedState, m.parent !== l ? (m = { parent: l, cache: l }, a.memoizedState = m, a.lanes === 0 && (a.memoizedState = a.updateQueue.baseState = m), Vo(a, Yn, l)) : (l = f.cache, Vo(a, Yn, l), l !== m.cache && ym( + return fs(a), c = ii(Yn), n === null ? (p = Id(), p === null && (p = ln, f = Rc(), p.pooledCache = f, f.refCount++, f !== null && (p.pooledCacheLanes |= r), p = f), a.memoizedState = { + parent: c, + cache: p + }, Lu(a), Fo(a, Yn, p)) : ((n.lanes & r) !== 0 && (Iu(n, a), _o(a, null, null, r), Ec()), p = n.memoizedState, f = a.memoizedState, p.parent !== c ? (p = { parent: c, cache: c }, a.memoizedState = p, a.lanes === 0 && (a.memoizedState = a.updateQueue.baseState = p), Fo(a, Yn, c)) : (c = f.cache, Fo(a, Yn, c), c !== p.cache && Nm( a, [Yn], r, @@ -11134,24 +11291,24 @@ Error generating stack: ` + r.message + ` case 29: throw a.pendingProps; } - throw Error(p(156, a.tag)); + throw Error(m(156, a.tag)); } - function Ir(n) { + function Hr(n) { n.flags |= 4; } - function Vc(n, a) { + function Fc(n, a) { if (a.type !== "stylesheet" || (a.state.loading & 4) !== 0) n.flags &= -16777217; - else if (n.flags |= 16777216, !wp(a)) { + else if (n.flags |= 16777216, !Ap(a)) { if (a = Ua.current, a !== null && ((xt & 4194048) === xt ? _i !== null : (xt & 62914560) !== xt && (xt & 536870912) === 0 || a !== _i)) - throw cl = Bu, Ou; + throw dl = Au, wu; n.flags |= 8192; } } - function l0(n, a) { - a !== null && (n.flags |= 4), n.flags & 16384 && (a = n.tag !== 22 ? Be() : 536870912, n.lanes |= a, kc |= a); + function d0(n, a) { + a !== null && (n.flags |= 4), n.flags & 16384 && (a = n.tag !== 22 ? Be() : 536870912, n.lanes |= a, Dc |= a); } - function Cc(n, a) { + function _c(n, a) { if (!It) switch (n.tailMode) { case "hidden": @@ -11162,24 +11319,24 @@ Error generating stack: ` + r.message + ` break; case "collapsed": r = n.tail; - for (var l = null; r !== null; ) - r.alternate !== null && (l = r), r = r.sibling; - l === null ? a || n.tail === null ? n.tail = null : n.tail.sibling = null : l.sibling = null; + for (var c = null; r !== null; ) + r.alternate !== null && (c = r), r = r.sibling; + c === null ? a || n.tail === null ? n.tail = null : n.tail.sibling = null : c.sibling = null; } } - function rt(n) { - var a = n.alternate !== null && n.alternate.child === n.child, r = 0, l = 0; + function ot(n) { + var a = n.alternate !== null && n.alternate.child === n.child, r = 0, c = 0; if (a) - for (var m = n.child; m !== null; ) - r |= m.lanes | m.childLanes, l |= m.subtreeFlags & 65011712, l |= m.flags & 65011712, m.return = n, m = m.sibling; + for (var p = n.child; p !== null; ) + r |= p.lanes | p.childLanes, c |= p.subtreeFlags & 65011712, c |= p.flags & 65011712, p.return = n, p = p.sibling; else - for (m = n.child; m !== null; ) - r |= m.lanes | m.childLanes, l |= m.subtreeFlags, l |= m.flags, m.return = n, m = m.sibling; - return n.subtreeFlags |= l, n.childLanes = r, a; + for (p = n.child; p !== null; ) + r |= p.lanes | p.childLanes, c |= p.subtreeFlags, c |= p.flags, p.return = n, p = p.sibling; + return n.subtreeFlags |= c, n.childLanes = r, a; } - function np(n, a, r) { - var l = a.pendingProps; - switch (Mr(a), a.tag) { + function ip(n, a, r) { + var c = a.pendingProps; + switch (Qr(a), a.tag) { case 31: case 16: case 15: @@ -11190,50 +11347,50 @@ Error generating stack: ` + r.message + ` case 12: case 9: case 14: - return rt(a), null; + return ot(a), null; case 1: - return rt(a), null; + return ot(a), null; case 3: - return r = a.stateNode, l = null, n !== null && (l = n.memoizedState.cache), a.memoizedState.cache !== l && (a.flags |= 2048), kr(Yn), pt(), r.pendingContext && (r.context = r.pendingContext, r.pendingContext = null), (n === null || n.child === null) && (hc(a) ? Ir(a) : n === null || n.memoizedState.isDehydrated && (a.flags & 256) === 0 || (a.flags |= 1024, Tm())), rt(a), null; + return r = a.stateNode, c = null, n !== null && (c = n.memoizedState.cache), a.memoizedState.cache !== c && (a.flags |= 2048), Dr(Yn), ft(), r.pendingContext && (r.context = r.pendingContext, r.pendingContext = null), (n === null || n.child === null) && (pc(a) ? Hr(a) : n === null || n.memoizedState.isDehydrated && (a.flags & 256) === 0 || (a.flags |= 1024, ym())), ot(a), null; case 26: - return r = a.memoizedState, n === null ? (Ir(a), r !== null ? (rt(a), Vc(a, r)) : (rt(a), a.flags &= -16777217)) : r ? r !== n.memoizedState ? (Ir(a), rt(a), Vc(a, r)) : (rt(a), a.flags &= -16777217) : (n.memoizedProps !== l && Ir(a), rt(a), a.flags &= -16777217), null; + return r = a.memoizedState, n === null ? (Hr(a), r !== null ? (ot(a), Fc(a, r)) : (ot(a), a.flags &= -16777217)) : r ? r !== n.memoizedState ? (Hr(a), ot(a), Fc(a, r)) : (ot(a), a.flags &= -16777217) : (n.memoizedProps !== c && Hr(a), ot(a), a.flags &= -16777217), null; case 27: Hn(a), r = Oe.current; - var m = a.type; + var p = a.type; if (n !== null && a.stateNode != null) - n.memoizedProps !== l && Ir(a); + n.memoizedProps !== c && Hr(a); else { - if (!l) { + if (!c) { if (a.stateNode === null) - throw Error(p(166)); - return rt(a), null; + throw Error(m(166)); + return ot(a), null; } - n = Fe.current, hc(a) ? Zd(a) : (n = Je(m, l, r), a.stateNode = n, Ir(a)); + n = Fe.current, pc(a) ? Bd(a) : (n = Ie(p, c, r), a.stateNode = n, Hr(a)); } - return rt(a), null; + return ot(a), null; case 5: if (Hn(a), r = a.type, n !== null && a.stateNode != null) - n.memoizedProps !== l && Ir(a); + n.memoizedProps !== c && Hr(a); else { - if (!l) { + if (!c) { if (a.stateNode === null) - throw Error(p(166)); - return rt(a), null; + throw Error(m(166)); + return ot(a), null; } - if (n = Fe.current, hc(a)) - Zd(a); + if (n = Fe.current, pc(a)) + Bd(a); else { - switch (m = Ga( + switch (p = Ga( Oe.current ), n) { case 1: - n = m.createElementNS( + n = p.createElementNS( "http://www.w3.org/2000/svg", r ); break; case 2: - n = m.createElementNS( + n = p.createElementNS( "http://www.w3.org/1998/Math/MathML", r ); @@ -11241,50 +11398,50 @@ Error generating stack: ` + r.message + ` default: switch (r) { case "svg": - n = m.createElementNS( + n = p.createElementNS( "http://www.w3.org/2000/svg", r ); break; case "math": - n = m.createElementNS( + n = p.createElementNS( "http://www.w3.org/1998/Math/MathML", r ); break; case "script": - n = m.createElement("div"), n.innerHTML = "